summaryrefslogtreecommitdiffhomepage
path: root/options/defs.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'options/defs.hpp')
-rw-r--r--options/defs.hpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/options/defs.hpp b/options/defs.hpp
index f093a22a..feaad005 100644
--- a/options/defs.hpp
+++ b/options/defs.hpp
@@ -1,7 +1,45 @@
#pragma once
#include <QString>
+#include <QMetaType>
#define OPENTRACK_CONFIG_FILENAME_KEY "settings-filename"
#define OPENTRACK_DEFAULT_CONFIG "default.ini"
#define OPENTRACK_DEFAULT_CONFIG_Q QStringLiteral("default.ini")
+#define OTR_OPTIONS_EXPAND2(x) x
+#define OTR_OPTIONS_EXPAND1(x) OTR_OPTIONS_EXPAND2(x)
+
+#define OPENTRACK_REGISTER_METATYPE2(t, ctr) \
+ OPENTRACK_REGISTER_METATYPE3(t, ctr)
+
+#define OPENTRACK_REGISTER_METATYPE3(t, sym) \
+ OPENTRACK_REGISTER_METATYPE4(t, init_metatype_ ## sym)
+
+#define OPENTRACK_REGISTER_METATYPE4(t, sym) \
+ class sym { \
+ static const int dribble; \
+ } sym ## _singleton; \
+ const int sym :: dribble = ::options::detail::custom_type_initializer::declare_for_type<t>(#t)
+
+#if defined Q_CREATOR_RUN
+# define OPENTRACK_DEFINE_METATYPE(t)
+#else
+# define OPENTRACK_DEFINE_METATYPE(t) OPENTRACK_REGISTER_METATYPE2(t, OTR_OPTIONS_EXPAND1(__COUNTER__))
+#endif
+
+namespace options {
+namespace detail {
+
+struct custom_type_initializer final
+{
+ template<typename t> static int declare_for_type(const char* str)
+ {
+ qRegisterMetaType<t>(str);
+ qRegisterMetaTypeStreamOperators<t>();
+
+ return -1;
+ }
+};
+
+} // ns options::detail
+} // ns options