summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--options/metatype.cpp23
-rw-r--r--options/metatype.hpp36
-rw-r--r--options/options.hpp1
3 files changed, 60 insertions, 0 deletions
diff --git a/options/metatype.cpp b/options/metatype.cpp
new file mode 100644
index 00000000..8f92f385
--- /dev/null
+++ b/options/metatype.cpp
@@ -0,0 +1,23 @@
+#include "slider.hpp"
+#include "metatype.hpp"
+
+#define OPENTRACK_REGISTER_METATYPE(t) ::options::detail::custom_type_initializer::declare_for_type<t>(#t)
+
+namespace options {
+namespace detail {
+
+custom_type_initializer::custom_type_initializer()
+{
+ OPENTRACK_REGISTER_METATYPE(slider_value);
+ OPENTRACK_REGISTER_METATYPE(QList<double>);
+ OPENTRACK_REGISTER_METATYPE(QList<float>);
+ OPENTRACK_REGISTER_METATYPE(QList<int>);
+ OPENTRACK_REGISTER_METATYPE(QList<bool>);
+ OPENTRACK_REGISTER_METATYPE(QList<QString>);
+ OPENTRACK_REGISTER_METATYPE(QList<QPointF>);
+}
+
+const custom_type_initializer custom_type_initializer::singleton;
+
+}
+}
diff --git a/options/metatype.hpp b/options/metatype.hpp
new file mode 100644
index 00000000..68480b55
--- /dev/null
+++ b/options/metatype.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#include <QMetaType>
+#include <QList>
+#include <QString>
+#include <QPointF>
+#include <QDataStream>
+#include <QDebug>
+
+#include "export.hpp"
+
+Q_DECLARE_METATYPE(QList<double>)
+Q_DECLARE_METATYPE(QList<float>)
+Q_DECLARE_METATYPE(QList<int>)
+Q_DECLARE_METATYPE(QList<bool>)
+Q_DECLARE_METATYPE(QList<QString>)
+Q_DECLARE_METATYPE(QList<QPointF>)
+
+namespace options {
+namespace detail {
+
+struct custom_type_initializer final
+{
+ static const custom_type_initializer singleton;
+
+ custom_type_initializer();
+
+ template<typename t> static inline void declare_for_type(const char* str)
+ {
+ qRegisterMetaType<t>(str);
+ qRegisterMetaTypeStreamOperators<t>();
+ }
+};
+
+}
+}
diff --git a/options/options.hpp b/options/options.hpp
index fdeb74cd..0528b0d9 100644
--- a/options/options.hpp
+++ b/options/options.hpp
@@ -16,4 +16,5 @@
#include "slider.hpp"
#include "value.hpp"
#include "tie.hpp"
+#include "metatype.hpp"
#include "scoped.hpp"