#pragma once #include #include #define OPENTRACK_CONFIG_FILENAME_KEY "settings-filename" #define OPENTRACK_DEFAULT_CONFIG "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) #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 static int declare_for_type(const char* str) { qRegisterMetaType(str); qRegisterMetaTypeStreamOperators(); return -1; } }; } // ns options::detail } // ns options