1 #ifndef SETTINGS_H |
1 #ifndef SETTINGS_H |
2 #define SETTINGS_H |
2 #define SETTINGS_H |
3 #include <QSettings> |
3 #include <QSettings> |
4 #include "settingdefs.h" |
4 #include <QMdiArea> |
|
5 #include "libraries.h" |
|
6 #include "gl/common.h" |
5 |
7 |
6 // SettingType - get type of setting by enumerator |
8 // SettingType - get type of setting by enumerator |
7 template<Setting> |
9 template<typename> |
|
10 struct SettingId{}; |
|
11 |
|
12 template<SettingId> |
8 struct SettingInfo{}; |
13 struct SettingInfo{}; |
9 |
14 |
10 #define SETTING(NAME, DEFVALUE) \ |
15 #define SETTING(NAME, DEFVALUE) \ |
|
16 namespace SettingIdTypes { class NAME; } \ |
|
17 namespace Setting { constexpr SettingId<class NAME##_SettingType> NAME; } \ |
11 template<> \ |
18 template<> \ |
12 struct SettingInfo<Setting::NAME> \ |
19 struct SettingInfo<Setting::NAME> \ |
13 { \ |
20 { \ |
14 using type = decltype((DEFVALUE)); \ |
21 using type = decltype((DEFVALUE)); \ |
15 static constexpr char name[] = #NAME; \ |
22 static constexpr char name[] = #NAME; \ |
16 static const auto& defaultValue() { \ |
23 static const auto& defaultValue() { \ |
17 static const auto value = DEFVALUE; \ |
24 static const auto value = DEFVALUE; \ |
18 return value; \ |
25 return value; \ |
19 }; \ |
26 }; \ |
20 }; |
27 }; |
21 #include "settingdefs.h" |
28 |
|
29 // ----------------------------------------------------------------------------- |
|
30 // Setting definitions |
|
31 |
|
32 // Rendering options |
|
33 SETTING(Locale, QStringLiteral("system")) |
|
34 SETTING(BackgroundColor, (QColor{48, 48, 48})) |
|
35 SETTING(MainColor, (QColor{255, 255, 64})) |
|
36 SETTING(SelectedColor, (QColor{32, 32, 224})) |
|
37 SETTING(LineThickness, 2.0f) |
|
38 SETTING(LineAntiAliasing, true) |
|
39 SETTING(RenderStyle, gl::RenderStyle::Normal) |
|
40 SETTING(DrawWireframe, false) |
|
41 SETTING(DrawAxes, true) |
|
42 SETTING(MainWindowGeometry, QByteArray{}) |
|
43 SETTING(MainSplitterState, QByteArray{}) |
|
44 SETTING(RecentFiles, QStringList{}) |
|
45 SETTING(ViewMode, QMdiArea::TabbedView) |
|
46 |
|
47 // File management options |
|
48 SETTING(Libraries, QVector<Library>{}) |
|
49 |
|
50 // End of setting definitions |
|
51 // ----------------------------------------------------------------------------- |
22 #undef SETTING |
52 #undef SETTING |
23 |
53 |
24 template<Setting X> |
54 template<SettingId X> |
25 using SettingType_t = typename SettingInfo<X>::type; |
55 using SettingType_t = typename SettingInfo<X>::type; |
26 static_assert(std::is_same_v<SettingType_t<Setting::DrawAxes>, bool>); |
56 static_assert(std::is_same_v<SettingType_t<Setting::DrawAxes>, bool>); |
27 |
57 |
28 template<Setting X> |
58 template<SettingId X> |
29 const char* settingName = SettingInfo<X>::name; |
59 const char* settingName = SettingInfo<X>::name; |
30 |
60 |
31 template<Setting X> |
61 template<SettingId X> |
32 inline auto settingDefaultValue() |
62 inline auto settingDefaultValue() |
33 { |
63 { |
34 return SettingInfo<X>::defaultValue(); |
64 return SettingInfo<X>::defaultValue(); |
35 } |
65 } |
36 |
66 |
37 // get() - get setting by enumerator |
67 // get() - get setting by enumerator |
38 template<Setting X> |
68 template<SettingId X> |
39 inline SettingType_t<X> setting() |
69 inline SettingType_t<X> setting() |
40 { |
70 { |
41 static const QVariant defvariant = QVariant::fromValue(settingDefaultValue<X>()); |
71 static const QVariant defvariant = QVariant::fromValue(settingDefaultValue<X>()); |
42 const QVariant var = QSettings{}.value(settingName<X>, defvariant); |
72 const QVariant var = QSettings{}.value(settingName<X>, defvariant); |
43 return var.value<SettingType_t<X>>(); |
73 return var.value<SettingType_t<X>>(); |
44 } |
74 } |
45 |
75 |
46 // setSetting() - set value of setting |
76 // setSetting() - set value of setting |
47 template<Setting X> |
77 template<SettingId X> |
48 inline void setSetting(const SettingType_t<X>& value) |
78 inline void setSetting(const SettingType_t<X>& value) |
49 { |
79 { |
50 if (value == settingDefaultValue<X>()) { |
80 if (value == settingDefaultValue<X>()) { |
51 QSettings{}.remove(settingName<X>); |
81 QSettings{}.remove(settingName<X>); |
52 } |
82 } |