-
-
Notifications
You must be signed in to change notification settings - Fork 379
Expand file tree
/
Copy pathSettingsManager.h
More file actions
110 lines (92 loc) · 5.55 KB
/
Copy pathSettingsManager.h
File metadata and controls
110 lines (92 loc) · 5.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*---------------------------------------------------------*\
| SettingsManager.h |
| |
| OpenRGB Settings Manager maintains a list of application|
| settings in JSON format. Other components may register |
| settings with this class and store/load values. |
| |
| Adam Honse (CalcProgrammer1) 04 Nov 2020 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*---------------------------------------------------------*/
#pragma once
#include <nlohmann/json.hpp>
#include <mutex>
#include "filesystem.h"
/*---------------------------------------------------------*\
| Define a macro for QT lupdate to parse |
\*---------------------------------------------------------*/
#define QT_TRANSLATE_NOOP(scope, x) x
/*---------------------------------------------------------*\
| Callback Types |
\*---------------------------------------------------------*/
typedef void (*SettingsManagerCallback)(void *, unsigned int);
/*---------------------------------------------------------*\
| SettingsManager Update Reason Codes |
\*---------------------------------------------------------*/
enum
{
SETTINGSMANAGER_UPDATE_REASON_SETTINGS_UPDATED, /* Settings updated */
SETTINGSMANAGER_UPDATE_REASON_SETTINGS_SCHEMA_UPDATED, /* Settings schema updated */
};
class SettingsManagerInterface
{
public:
virtual nlohmann::json GetSettings(std::string settings_key) = 0;
virtual nlohmann::json GetSettingsSchema(std::string settings_key) = 0;
virtual void ModifySettings(std::string settings_key, nlohmann::json new_settings) = 0;
virtual void ModifySettingsFromJsonString(std::string settings_json_str) = 0;
virtual void SetSettings(std::string settings_key, nlohmann::json new_settings) = 0;
virtual void SetSettingsFromJsonString(std::string settings_json_str) = 0;
virtual void LoadSettings(const filesystem::path& filename) = 0;
virtual void SaveSettings() = 0;
protected:
virtual ~SettingsManagerInterface() {};
};
class SettingsManager: public SettingsManagerInterface
{
public:
SettingsManager();
~SettingsManager();
nlohmann::json GetSettings(std::string settings_key);
nlohmann::json GetSettingsSchema(std::string settings_key);
void RegisterSettingsSchema(std::string settings_key, std::string settings_title, nlohmann::json& new_schema);
void RegisterSettingsSchema(std::string settings_key, std::string settings_title, nlohmann::json& new_schema, int order);
void ModifySettings(std::string settings_key, nlohmann::json new_settings);
void ModifySettingsFromJsonString(std::string settings_json_str);
void SetSettings(std::string settings_key, nlohmann::json new_settings);
void SetSettingsFromJsonString(std::string settings_json_str);
void LoadSettings(const filesystem::path& filename);
void SaveSettings();
/*-----------------------------------------------------*\
| Callback Registration Functions |
\*-----------------------------------------------------*/
void RegisterSettingsManagerCallback(SettingsManagerCallback new_callback, void * new_callback_arg);
void UnregisterSettingsManagerCallback(SettingsManagerCallback callback, void * callback_arg);
void SignalSettingsManagerUpdate(unsigned int update_reason);
private:
/*-----------------------------------------------------*\
| JSON objects for settings data and schema |
\*-----------------------------------------------------*/
nlohmann::json settings_data;
nlohmann::json settings_schema;
/*-----------------------------------------------------*\
| Settings filename |
\*-----------------------------------------------------*/
filesystem::path settings_filename;
/*-----------------------------------------------------*\
| Settings mutex |
\*-----------------------------------------------------*/
std::mutex mutex;
/*-----------------------------------------------------*\
| Configuration found flag |
\*-----------------------------------------------------*/
bool config_found;
/*-----------------------------------------------------*\
| SettingsManager Callbacks |
\*-----------------------------------------------------*/
std::vector<SettingsManagerCallback> SettingsManagerCallbacks;
std::vector<void *> SettingsManagerCallbackArgs;
std::mutex SettingsManagerCallbackMutex;
};