src/settings.h

changeset 218
63125c36de73
child 219
571e85c0d811
equal deleted inserted replaced
217:6d95c1a41e6e 218:63125c36de73
1 #ifndef SETTINGS_H
2 #define SETTINGS_H
3 #include <QSettings>
4 #include "settingdefs.h"
5
6 // settingdefs - get name and default value by setting
7 static const struct Settingdef
8 {
9 const char* name;
10 QVariant defaultValue;
11 } settingdefs[] = {
12 #define SETTING(NAME, DEFVALUE) {#NAME, QVariant::fromValue(DEFVALUE)},
13 #include "settingdefs.h"
14 #undef SETTING
15 };
16
17 // SettingType - get type of setting by enumerator
18 template<Setting setting>
19 struct SettingType{};
20
21 #define SETTING(NAME, DEFVALUE) \
22 template<> \
23 struct SettingType<Setting::NAME> \
24 { \
25 using type = decltype((DEFVALUE)); \
26 };
27 #include "settingdefs.h"
28 #undef SETTING
29
30 template<Setting setting>
31 using SettingType_t = typename SettingType<setting>::type;
32 static_assert(std::is_same_v<SettingType_t<Setting::DrawAxes>, bool>);
33
34 // get() - get setting by enumerator
35 template<Setting X>
36 inline SettingType_t<X> setting()
37 {
38 const Settingdef& def = settingdefs[static_cast<int>(X)];
39 return QSettings{}.value(def.name, def.defaultValue).value<SettingType_t<X>>();
40 }
41
42 // get() - get setting by enumerator
43 template<Setting X>
44 inline void setSetting(const SettingType_t<X>& value)
45 {
46 const Settingdef& def = settingdefs[static_cast<int>(X)];
47 if (value == def.defaultValue.value<SettingType_t<X>>()) {
48 QSettings{}.remove(def.name);
49 }
50 else {
51 QSettings{}.setValue(def.name, QVariant::fromValue(value));
52 }
53 }
54
55 #endif // SETTINGS_H

mercurial