summaryrefslogtreecommitdiffhomepage
path: root/options/metatype.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'options/metatype.cpp')
-rw-r--r--options/metatype.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/options/metatype.cpp b/options/metatype.cpp
index ed12821b..7430c00a 100644
--- a/options/metatype.cpp
+++ b/options/metatype.cpp
@@ -1,22 +1,26 @@
-#include "metatype.hpp"
-
-#define OPENTRACK_REGISTER_METATYPE(t) ::options::detail::custom_type_initializer::declare_for_type<t>(#t)
+#include <QMetaType>
-namespace options {
-namespace detail {
+namespace options::detail {
-custom_type_initializer::custom_type_initializer()
+template<typename t>
+void declare_metatype_for_type(const char* str)
{
- OPENTRACK_REGISTER_METATYPE(options::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>);
+ qRegisterMetaType<t>(str);
+ qRegisterMetaTypeStreamOperators<t>();
}
-const custom_type_initializer custom_type_initializer::singleton;
+} // ns options::detail
-}
-}
+#define OPENTRACK_DEFINE_METATYPE3(t, ctr) \
+ static \
+ const char init_##ctr = /* NOLINT(misc-definitions-in-headers) */ \
+ (::options::detail::declare_metatype_for_type<t>(#t), 0); \
+
+#define OPENTRACK_DEFINE_METATYPE2(t, ctr) \
+ OPENTRACK_DEFINE_METATYPE3(t, ctr)
+
+#define OPENTRACK_DEFINE_METATYPE(t) \
+ OPENTRACK_DEFINE_METATYPE2(t, __COUNTER__)
+
+#define OPENTRACK_METATYPE_(x) OPENTRACK_DEFINE_METATYPE(x)
+#include "metatype.hpp"