src/settings.h

changeset 221
e28f89b8ccdf
parent 220
a6d937f8c0ac
child 224
54fd83d4db9c
equal deleted inserted replaced
220:a6d937f8c0ac 221:e28f89b8ccdf
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 }

mercurial