Tue, 14 Jun 2022 20:44:07 +0300
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 | 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 |