src/settings.h

Tue, 14 Jun 2022 20:44:07 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Tue, 14 Jun 2022 20:44:07 +0300
changeset 220
a6d937f8c0ac
parent 219
571e85c0d811
child 221
e28f89b8ccdf
permissions
-rw-r--r--

Further reduce settings.h

218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
1 #ifndef SETTINGS_H
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
2 #define SETTINGS_H
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
3 #include <QSettings>
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
4 #include "settingdefs.h"
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
5
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
6 // SettingType - get type of setting by enumerator
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
7 template<Setting>
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
8 struct SettingInfo{};
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
9
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
10 #define SETTING(NAME, DEFVALUE) \
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
11 template<> \
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
12 struct SettingInfo<Setting::NAME> \
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
13 { \
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
14 using type = decltype((DEFVALUE)); \
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
15 static constexpr char name[] = #NAME; \
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
16 static const auto& defaultValue() { \
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
17 static const auto value = DEFVALUE; \
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
18 return value; \
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
19 }; \
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
20 };
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
21 #include "settingdefs.h"
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
22 #undef SETTING
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
23
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
24 template<Setting X>
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
25 using SettingType_t = typename SettingInfo<X>::type;
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
26 static_assert(std::is_same_v<SettingType_t<Setting::DrawAxes>, bool>);
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
27
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
28 template<Setting X>
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
29 const char* settingName = SettingInfo<X>::name;
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
30
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
31 template<Setting X>
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
32 inline auto settingDefaultValue()
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
33 {
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
34 return SettingInfo<X>::defaultValue();
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
35 }
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
36
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
37 // get() - get setting by enumerator
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
38 template<Setting X>
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
39 inline SettingType_t<X> setting()
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
40 {
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
41 static const QVariant defvariant = QVariant::fromValue(settingDefaultValue<X>());
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
42 const QVariant var = QSettings{}.value(settingName<X>, defvariant);
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
43 return var.value<SettingType_t<X>>();
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
44 }
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
45
219
571e85c0d811 fix comment
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 218
diff changeset
46 // setSetting() - set value of setting
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
47 template<Setting X>
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
48 inline void setSetting(const SettingType_t<X>& value)
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
49 {
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
50 if (value == settingDefaultValue<X>()) {
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
51 QSettings{}.remove(settingName<X>);
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
52 }
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
53 else {
220
a6d937f8c0ac Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents: 219
diff changeset
54 QSettings{}.setValue(settingName<X>, QVariant::fromValue(value));
218
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
55 }
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
56 }
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
57
63125c36de73 Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff changeset
58 #endif // SETTINGS_H

mercurial