aboutsummaryrefslogtreecommitdiffstats
path: root/include/GFModuleCommonUtils.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/GFModuleCommonUtils.hpp')
-rw-r--r--include/GFModuleCommonUtils.hpp49
1 files changed, 46 insertions, 3 deletions
diff --git a/include/GFModuleCommonUtils.hpp b/include/GFModuleCommonUtils.hpp
index 1811ffc..73de58a 100644
--- a/include/GFModuleCommonUtils.hpp
+++ b/include/GFModuleCommonUtils.hpp
@@ -32,10 +32,11 @@
#include <GFSDKLog.h>
#include <GFSDKModule.h>
#include <GFSDKUI.h>
-#include <qsharedpointer.h>
#include <QMap>
+#include <QSharedPointer>
#include <QString>
+#include <QVariant>
#include <cstring>
#define DUP(v) GFModuleStrDup(v)
@@ -394,9 +395,51 @@ inline auto CharArrayToQStringList(char** pl_components,
int size) -> QStringList {
QStringList list;
for (int i = 0; i < size; ++i) {
- list.append(QString::fromUtf8(pl_components[i]));
- GFFreeMemory(pl_components[i]);
+ list.append(UDUP(pl_components[i]));
}
GFFreeMemory(pl_components);
return list;
}
+
+inline auto QListToCharArray(const QStringList& list) -> char** {
+ char** char_array =
+ static_cast<char**>(GFAllocateMemory(list.size() * sizeof(char*)));
+
+ int index = 0;
+ for (const QString& item : list) {
+ QByteArray value = item.toUtf8();
+ char_array[index] = static_cast<char*>(GFAllocateMemory(value.size() + 1));
+ std::strcpy(char_array[index], value.constData());
+ index++;
+ }
+
+ return char_array;
+}
+
+inline auto ConvertQVariantToVoidPtr(const QVariant& variant) -> void* {
+ void* mem = GFAllocateMemory(sizeof(QVariant));
+ auto* variant_ptr = new (mem) QVariant(variant);
+ return static_cast<void*>(variant_ptr);
+}
+
+inline auto ConvertVoidPtrToQVariant(void* ptr) -> QVariant {
+ if (ptr == nullptr) return {};
+
+ auto* variant_ptr = static_cast<QVariant*>(ptr);
+ QVariant variant = *variant_ptr;
+
+ GFFreeMemory(variant_ptr);
+ return variant;
+}
+
+#define Q_VARIANT_Q_OBJECT_FACTORY_DECLARE(name) \
+ auto name(void* data_raw_ptr) -> void*;
+
+#define Q_VARIANT_Q_OBJECT_FACTORY_DEFINE(name, func) \
+ auto name(void* data_raw_ptr) -> void* { \
+ auto data = ConvertVoidPtrToQVariant(data_raw_ptr); \
+ return func(data); \
+ }
+
+#define GUI_OBJECT(factory, data) \
+ GFUICreateGUIObject(factory, ConvertQVariantToVoidPtr(data))