aboutsummaryrefslogtreecommitdiffstats
path: root/src/settings_interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings_interface.h')
-rw-r--r--src/settings_interface.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/settings_interface.h b/src/settings_interface.h
new file mode 100644
index 0000000..e3935d0
--- /dev/null
+++ b/src/settings_interface.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <QString>
+#include <QVariant>
+#include <QSettings>
+
+/* struct AppSettings {
+ enum {LOCALTIME, UTC} ui_timezone = LOCALTIME;
+ bool can_access_internet = true;
+ bool can_download_emoji = true;
+ bool can_download_attachments = true;
+ struct {
+ enum {MASTODON} type = MASTODON;
+ QString address;
+ QString token;
+ } instance;
+}; */
+
+namespace AppSettingsTypes {
+ enum Timezone {LOCALTIME = 0, UTC};
+ enum InstanceType {MASTODON = 0};
+}
+// Declare metatypes for use with QVariant
+Q_DECLARE_METATYPE(AppSettingsTypes::Timezone);
+Q_DECLARE_METATYPE(AppSettingsTypes::InstanceType);
+
+class SettingsInterface {
+public:
+ ~SettingsInterface();
+ const QVariant read_setting(const QString &key);
+ void write_setting(const QString &key, const QVariant &value);
+ void clear_setting(const QString &key);
+ void clear_all();
+ bool commit();
+ bool is_default(const QString &key);
+ bool is_uncommited(const QString &key);
+
+private:
+ QSettings qt_settings;
+ QHash<QString, QVariant>* modified = nullptr;
+
+ // Optimization to commit a clear_all() faster
+ bool must_clear_all = false;
+ // List of keys to remove from the QSettings
+ QStringList must_clear;
+};