#pragma once #include #include #include "settings/macros.hpp" #include "settings/objectnode.hpp" #define CONFIG_NODE_NO_CTOR SETTINGS_NODE_NO_CTOR #define CONFIG_NODE SETTINGS_NODE #define CONFIG_PROPERTY SETTINGS_PROPERTY #define CONFIG_GLOBAL_PROPERTY SETTINGS_GLOBAL_PROPERTY #define CONFIG_ENUM_PROPERTY(Type, name, defaultVal) \ CONFIG_PROPERTY(ZShell::config::Type::Enum, name, defaultVal) #define CONFIG_GLOBAL_ENUM_PROPERTY(Type, name, defaultVal) \ CONFIG_GLOBAL_PROPERTY(ZShell::config::Type::Enum, name, defaultVal) #define CONFIG_SUBOBJECT(Type, name) \ SETTINGS_SUBOBJECT(ZShell::config::Type, name) #define CONFIG_GLOBAL_SUBOBJECT(Type, name) \ SETTINGS_GLOBAL_SUBOBJECT(ZShell::config::Type, name) #define CONFIG_LIST_TYPE SETTINGS_LIST_TYPE #define CONFIG_LIST(Type, name, defaultVal, ...) \ SETTINGS_LIST( \ ZShell::config::Type, name, DEFAULT_ARG(defaultVal), __VA_ARGS__) #define CONFIG_GLOBAL_LIST(Type, name, defaultVal, ...) \ SETTINGS_GLOBAL_LIST( \ ZShell::config::Type, name, DEFAULT_ARG(defaultVal), __VA_ARGS__) namespace ZShell::config { Q_DECLARE_LOGGING_CATEGORY(lcConfig) QString configDir(); QString monitorConfigDir(); class ListEntry : public settings::ObjectNode { CONFIG_NODE(ListEntry, settings::ObjectNode) CONFIG_PROPERTY(QString, id, {}) CONFIG_PROPERTY(bool, enabled, true) }; CONFIG_LIST_TYPE(ListEntry, EntryList) } // namespace ZShell::config // Shorthand for declaring an ID'd entry (bar entries/status icons, quick toggles, etc) #define LIST_ENTRY(id, enabled) \ settings::vmap({ \ {QStringLiteral("id"), QStringLiteral(#id)}, \ {QStringLiteral("enabled"), enabled}, \ })