diff -r 6d95c1a41e6e -r 63125c36de73 src/settings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/settings.h Tue Jun 14 19:50:31 2022 +0300 @@ -0,0 +1,55 @@ +#ifndef SETTINGS_H +#define SETTINGS_H +#include +#include "settingdefs.h" + +// settingdefs - get name and default value by setting +static const struct Settingdef +{ + const char* name; + QVariant defaultValue; +} settingdefs[] = { +#define SETTING(NAME, DEFVALUE) {#NAME, QVariant::fromValue(DEFVALUE)}, +#include "settingdefs.h" +#undef SETTING +}; + +// SettingType - get type of setting by enumerator +template +struct SettingType{}; + +#define SETTING(NAME, DEFVALUE) \ + template<> \ + struct SettingType \ + { \ + using type = decltype((DEFVALUE)); \ + }; +#include "settingdefs.h" +#undef SETTING + +template +using SettingType_t = typename SettingType::type; +static_assert(std::is_same_v, bool>); + +// get() - get setting by enumerator +template +inline SettingType_t setting() +{ + const Settingdef& def = settingdefs[static_cast(X)]; + return QSettings{}.value(def.name, def.defaultValue).value>(); +} + +// get() - get setting by enumerator +template +inline void setSetting(const SettingType_t& value) +{ + const Settingdef& def = settingdefs[static_cast(X)]; + if (value == def.defaultValue.value>()) { + QSettings{}.remove(def.name); + } + else { + QSettings{}.setValue(def.name, QVariant::fromValue(value)); + } +} + +#endif // SETTINGS_H