Maki
Formally verfied low-code orchestration
Loading...
Searching...
No Matches
settings_manager.h
1// SettingsManager.h
2#pragma once
3
4#include <QApplication>
5#include <QObject>
6#include <QSettings>
7#include <oclero/qlementine.hpp>
8
9#include "app_paths.h"
10#include "isettings.h"
11#include "plugin_version.h"
12#include "style_helpers.h"
13
14namespace Config
15{
16struct ThemeInfo;
17}
18
23{
24 bool restoreLastSession = true;
25 bool autosaveEnabled = true;
28 bool enableDebugLogs = true;
29 int maximumLogHistory = 2000;
31 bool showWelcomeMessage = true;
32 QVector<QString> recentFiles = {};
33 QString lastOpenFileDir = "";
34 QString language = "en_US";
35
43};
44
49{
50 QString theme = "Dark";
51 int uiScalePercent = 100;
52 bool showCanvasGrid = true;
53 bool nativeMenuBar = true;
56 oclero::qlementine::Theme themeVars;
58 int edgeShape = 0;
59
66};
67
72{
73 QString generationDir = QCoreApplication::applicationDirPath() + "/generation";
75
76 bool operator!=(const GenerationSettings& s) const
77 {
78 return generationDir != s.generationDir || pluginSearchPaths != s.pluginSearchPaths;
79 }
80};
81
86{
87 QString name;
88 bool enabled;
89 maki::PluginVersion version;
90 QVector<maki::SettingField> settings;
91 QString icon;
92 bool registered;
93
94 bool operator==(const PluginInfo& s) const
95 {
96 return name == s.name && enabled == s.enabled && version == s.version && settings == s.settings && icon == s.icon;
97 }
98
99 bool operator!=(const PluginInfo& s) const
100 {
101 return !(*this == s);
102 }
103};
104
109{
110 QString defaultPlugin = "";
111 bool showCombinedLogs = false;
112 QVector<PluginInfo> plugins = {};
113
114 enum class Status
115 {
116 Unknown,
117 Enabled,
118 Disabled
119 };
120
121 bool operator!=(const PluginSettings& s) const
122 {
123 return defaultPlugin != s.defaultPlugin || showCombinedLogs != s.showCombinedLogs || plugins != s.plugins;
124 }
125
126 Status pluginStatus(const QString& pluginName) const
127 {
128 for (const auto& p : plugins)
129 if (p.name == pluginName)
130 return p.enabled ? Status::Enabled : Status::Disabled;
131
132 return Status::Unknown;
133 }
134};
135
139class SettingsManager : public QObject, public maki::ISettings
140{
141 Q_OBJECT
142
143public:
150 SettingsManager(oclero::qlementine::ThemeManager* themeManager, QObject* parent = nullptr);
151
157 GeneralSettings general() const;
158
165
172
178 PluginSettings plugins() const;
179
186 void applySettings();
187
193 void setGeneral(const GeneralSettings& s);
194
200 void setAppearance(const AppearanceSettings& s);
201
207 void setGeneration(const GenerationSettings& s);
208
214 void setPlugins(const PluginSettings& s);
215
222 QVector<maki::SettingField> getPluginSettings(const QString& id) const override;
223
232 VoidResult registerSettings(const QString& id, const maki::PluginVersion version, const QString& iconPath,
233 const QVector<maki::SettingField>& settings) override;
234
238 void load();
239
243 void save();
244
250 std::vector<oclero::qlementine::Theme> availableThemes() const;
251
257 Result<oclero::qlementine::Theme> themeByName(const QString& themeName) const;
258
264 void themeCreated(const QString& themePath);
265
266signals:
271
272public slots:
278 void addRecentFile(const QString& s);
279
280private:
281 QSettings mSettings;
286
289 AppearanceSettings mTmpAppearance;
290 GenerationSettings mTmpGeneration;
291 PluginSettings mTmpPluginSettings;
292
293 oclero::qlementine::ThemeManager* mThemeManager;
294
304 maki::SettingField settingFromName(const QVector<maki::SettingField>& settings, const QString& fieldName) const;
305};
static QStringList pluginSearchPaths()
Returns a list of directories to search for plugins.
Definition app_paths.cpp:83
GeneralSettings mGeneral
Settings storage.
Definition settings_manager.h:282
SettingsManager(oclero::qlementine::ThemeManager *themeManager, QObject *parent=nullptr)
Constructs a new SettingsManager object.
Definition settings_manager.cpp:33
void setPlugins(const PluginSettings &s)
Sets the list of plugins.
Definition settings_manager.cpp:319
void setAppearance(const AppearanceSettings &s)
Sets the appearance settings.
Definition settings_manager.cpp:309
void load()
Loads settings from a file.
Definition settings_manager.cpp:82
AppearanceSettings mAppearance
Current general settings.
Definition settings_manager.h:283
Result< oclero::qlementine::Theme > themeByName(const QString &themeName) const
Get a theme based on its metadata name.
Definition settings_manager.cpp:67
GenerationSettings mGeneration
Current appearance settings.
Definition settings_manager.h:284
void addRecentFile(const QString &s)
Adds a file to the recent files list.
Definition settings_manager.cpp:324
void setGeneral(const GeneralSettings &s)
Sets the general settings.
Definition settings_manager.cpp:304
void settingsChanged()
Emitted when settings change.
PluginSettings plugins() const
Gets the list of plugins.
Definition settings_manager.cpp:57
PluginSettings mPluginSettings
Current generation settings.
Definition settings_manager.h:285
void themeCreated(const QString &themePath)
Handles a theme creation event.
Definition settings_manager.cpp:76
GeneralSettings general() const
Gets the general settings.
Definition settings_manager.cpp:42
GeneralSettings mTmpGeneral
Current plugin settings.
Definition settings_manager.h:288
AppearanceSettings appearance() const
Gets the appearance settings.
Definition settings_manager.cpp:47
void save()
Saves settings to a file.
Definition settings_manager.cpp:196
std::vector< oclero::qlementine::Theme > availableThemes() const
Gets the list of available themes.
Definition settings_manager.cpp:62
VoidResult registerSettings(const QString &id, const maki::PluginVersion version, const QString &iconPath, const QVector< maki::SettingField > &settings) override
Registers settings for a plugin.
Definition settings_manager.cpp:346
maki::SettingField settingFromName(const QVector< maki::SettingField > &settings, const QString &fieldName) const
Pointer to the ThemeManager.
Definition settings_manager.cpp:412
QVector< maki::SettingField > getPluginSettings(const QString &id) const override
Gets the settings for a specific plugin.
Definition settings_manager.cpp:337
void setGeneration(const GenerationSettings &s)
Sets the generation settings.
Definition settings_manager.cpp:314
void applySettings()
Applies the current temporary settings to the permanent settings and emits a signal indicating that s...
Definition settings_manager.cpp:271
GenerationSettings generation() const
Gets the generation settings.
Definition settings_manager.cpp:52
Holds appearance settings.
Definition settings_manager.h:49
oclero::qlementine::Theme themeVars
Start the log table filters collapsed or expanded.
Definition settings_manager.h:56
bool startLogFilterExpanded
Node corner radius.
Definition settings_manager.h:55
int edgeShape
The number of columns to use in the node paletter.
Definition settings_manager.h:58
int uiScalePercent
Current theme.
Definition settings_manager.h:51
bool operator!=(const AppearanceSettings &s) const
The shape of the transition arrows.
Definition settings_manager.h:60
int nodeCornerRadius
Whether to use the native menu bar.
Definition settings_manager.h:54
bool nativeMenuBar
Whether to show the canvas grid.
Definition settings_manager.h:53
bool showCanvasGrid
UI scale percentage.
Definition settings_manager.h:52
int numberOfColumns
Theme variables.
Definition settings_manager.h:57
Holds general application settings.
Definition settings_manager.h:23
bool operator!=(const GeneralSettings &s) const
Application language.
Definition settings_manager.h:36
QString language
Directory of the last opened file.
Definition settings_manager.h:34
int autosaveIntervalMinutes
Whether autosave is enabled.
Definition settings_manager.h:26
QVector< QString > recentFiles
Whether to show the welcome message.
Definition settings_manager.h:32
bool showWelcomeMessage
Size of the recent history list.
Definition settings_manager.h:31
QString lastOpenFileDir
List of recent files.
Definition settings_manager.h:33
bool confirmOnCloseWithExecution
Interval for autosave in minutes.
Definition settings_manager.h:27
bool enableDebugLogs
Whether to confirm close with execution.
Definition settings_manager.h:28
int recentHistorySize
How many rows to keep in the log table.
Definition settings_manager.h:30
bool autosaveEnabled
Whether to restore the last session on startup.
Definition settings_manager.h:25
int maximumLogHistory
Whether debug logs are enabled.
Definition settings_manager.h:29
Holds generation settings.
Definition settings_manager.h:72
QStringList pluginSearchPaths
Directory for generated files.
Definition settings_manager.h:74
bool operator!=(const GenerationSettings &s) const
Paths to search for plugins.
Definition settings_manager.h:76
Holds information about a plugin.
Definition settings_manager.h:86
bool enabled
Name of the plugin.
Definition settings_manager.h:88
QVector< maki::SettingField > settings
Version of the plugin.
Definition settings_manager.h:90
maki::PluginVersion version
Whether the plugin is enabled.
Definition settings_manager.h:89
QString icon
Settings for the plugin.
Definition settings_manager.h:91
Holds information about a plugin.
Definition settings_manager.h:109
QVector< PluginInfo > plugins
Whether the plugin logs should be printed with the normal logs.
Definition settings_manager.h:112
bool showCombinedLogs
The default plugin to be used.
Definition settings_manager.h:111
Status
The list of plugin settings.
Definition settings_manager.h:115