Mon, 04 Jul 2022 19:53:13 +0300
Experiment to delete the Model class and rely solely on text documents
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> |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
4 | #include <QMdiArea> |
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
5 | #include "src/libraries.h" |
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
6 | #include "src/gl/common.h" |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
7 | |
233 | 8 | template<class> |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
9 | struct SettingInfo{}; |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
10 | |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
11 | #define SETTING(NAME, DEFVALUE) \ |
233 | 12 | namespace Setting { class NAME; } \ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
13 | template<> \ |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
14 | struct SettingInfo<Setting::NAME> \ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
15 | { \ |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
16 | using type = decltype((DEFVALUE)); \ |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
17 | static constexpr char name[] = #NAME; \ |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
18 | static const auto& defaultValue() { \ |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
19 | static const auto value = DEFVALUE; \ |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
20 | return value; \ |
250
2837b549e616
I felt that the compiler was too kind to me, so I enabled a big pile of warnings
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
240
diff
changeset
|
21 | } \ |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
22 | }; |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
23 | |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
24 | // ----------------------------------------------------------------------------- |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
25 | // Setting definitions |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
26 | |
264
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
27 | Q_DECLARE_METATYPE(QMdiArea::ViewMode) |
76a025db4948
Convert all includes to be relative to project root directory. Files that cannot be found in this manner use angle brackets.
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
259
diff
changeset
|
28 | |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
29 | // Rendering options |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
30 | SETTING(BackgroundColor, (QColor{48, 48, 48})) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
31 | SETTING(MainColor, (QColor{255, 255, 64})) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
32 | SETTING(SelectedColor, (QColor{32, 32, 224})) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
33 | SETTING(LineThickness, 2.0f) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
34 | SETTING(LineAntiAliasing, true) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
35 | SETTING(RenderStyle, gl::RenderStyle::Normal) |
231
a9bf6bab5ea2
Add wireframe button
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
224
diff
changeset
|
36 | SETTING(Wireframe, false) |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
37 | SETTING(DrawAxes, true) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
38 | SETTING(MainWindowGeometry, QByteArray{}) |
240
414d392b9ae6
some improvements to dock widget handling
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
237
diff
changeset
|
39 | SETTING(MainWindowState, QByteArray{}) |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
40 | SETTING(MainSplitterState, QByteArray{}) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
41 | SETTING(RecentFiles, QStringList{}) |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
42 | SETTING(ViewMode, QMdiArea::TabbedView) |
237
10a6298f636f
Add an option to log opengl messages
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
233
diff
changeset
|
43 | SETTING(LogOpenGLDebugMessages, false) |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
44 | |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
45 | // File management options |
259
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
46 | SETTING(Libraries, Libraries{}) |
221
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
47 | |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
48 | // End of setting definitions |
e28f89b8ccdf
simplify settings further
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
220
diff
changeset
|
49 | // ----------------------------------------------------------------------------- |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
50 | #undef SETTING |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
51 | |
233 | 52 | template<class X> |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
53 | 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
|
54 | 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
|
55 | |
233 | 56 | template<class X> |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
57 | const char* settingName = SettingInfo<X>::name; |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
58 | |
233 | 59 | template<class X> |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
60 | inline auto settingDefaultValue() |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
61 | { |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
62 | return SettingInfo<X>::defaultValue(); |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
63 | } |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
64 | |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
65 | // get() - get setting by enumerator |
233 | 66 | template<class X> |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
67 | inline SettingType_t<X> setting() |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
68 | { |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
69 | static const QVariant defvariant = QVariant::fromValue(settingDefaultValue<X>()); |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
70 | const QVariant var = QSettings{}.value(settingName<X>, defvariant); |
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
71 | 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
|
72 | } |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
73 | |
219 | 74 | // setSetting() - set value of setting |
233 | 75 | template<class X> |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
76 | 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
|
77 | { |
259
c27612f0eac0
- Made it build under Qt6
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
250
diff
changeset
|
78 | if (false/*value == settingDefaultValue<X>()*/) { |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
79 | QSettings{}.remove(settingName<X>); |
218
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
80 | } |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
81 | else { |
220
a6d937f8c0ac
Further reduce settings.h
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
219
diff
changeset
|
82 | 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
|
83 | } |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
84 | } |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
85 | |
63125c36de73
Replace config collector with a simpler system
Teemu Piippo <teemu.s.piippo@gmail.com>
parents:
diff
changeset
|
86 | #endif // SETTINGS_H |