Albert
Loading...
Searching...
No Matches
property.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Manuel Schneider
2// SPDX-License-Identifier: MIT
3
4#pragma once
5#include <QSettings>
6#define EXPAND_STRINGIZE(s) STRINGIZE(s)
7#define STRINGIZE(s) #s
8
36#define ALBERT_PROPERTY_BASE(type, name, defaultValue, settings) \
37 public: static type name##_default(){ return defaultValue; }; \
38 protected: void store_##name() { settings()->setValue(EXPAND_STRINGIZE(name), name()); } \
39 protected: void restore_##name(const auto &s = nullptr) { \
40 if (s) \
41 set_##name##_(s->value(EXPAND_STRINGIZE(name), name##_default()).template value<type>()); \
42 else \
43 set_##name##_(settings()->value(EXPAND_STRINGIZE(name), name##_default()).template value<type>()); \
44 } \
45 signals: Q_SIGNAL void name##_changed(type); \
46 Q_PROPERTY(type name READ name WRITE set_##name RESET reset_##name NOTIFY name##_changed USER true) \
47 public: void set_##name(type val) { \
48 if (val != name()){ set_##name##_(val); \
49 store_##name(); \
50 emit name##_changed(val); } } \
51 public: void reset_##name() { \
52 set_##name(name##_default()); \
53 settings()->remove(EXPAND_STRINGIZE(name)); \
54 }
55
56
62#define ALBERT_PLUGIN_PROPERTY_BASE(type, name, defaultValue) \
63 ALBERT_PROPERTY_BASE(type, name, defaultValue, PluginInstance::settings)
64
65
66// -------------------------------------------------------------------------------------------------
67
85#define ALBERT_PROPERTY_GETSET(type, name, defaultValue, settings) \
86 ALBERT_PROPERTY_BASE(type, name, defaultValue, settings) \
87 public: type name() const; \
88 private: void set_##name##_(type);
89
90
96#define ALBERT_PLUGIN_PROPERTY_GETSET(type, name, defaultValue) \
97 ALBERT_PROPERTY_GETSET(type, name, defaultValue, PluginInstance::settings)
98
99
100// -------------------------------------------------------------------------------------------------
101
115#define ALBERT_PROPERTY_MEMBER(type, name, member, defaultValue, settings) \
116 ALBERT_PROPERTY_BASE(type, name, defaultValue, settings) \
117 public: type name() const { return member; } \
118 private: void set_##name##_(type val) { member=val; }
119
125#define ALBERT_PLUGIN_PROPERTY_MEMBER(type, name, member, defaultValue) \
126 ALBERT_PROPERTY_MEMBER(type, name, member, defaultValue, PluginInstance::settings)
127
128
129// -------------------------------------------------------------------------------------------------
130
142#define ALBERT_PROPERTY(type, name, defaultValue, settings) \
143 ALBERT_PROPERTY_MEMBER(type, name, name##_, defaultValue, settings) \
144 protected: type name##_{name##_default()};
145
151#define ALBERT_PLUGIN_PROPERTY(type, name, defaultValue) \
152 ALBERT_PROPERTY(type, name, defaultValue, PluginInstance::settings)