1 #pragma once
2 
3 #include <QSettings>
4 #include <map>
5 #include <iostream>
6 #include <memory>
7 #include <mutex>
8 #include <thread>
9 
10 #include "printutils.h"
11 
12 class QSettingsCached {
13     public:
14 
QSettingsCached()15         QSettingsCached() {
16             if (qsettingsPointer.get() == nullptr) {
17                 std::lock_guard<std::mutex> lock{ctor_mutex};
18                 if (qsettingsPointer.get() == nullptr) {
19                     qsettingsPointer.reset(new QSettings());
20                 }
21             }
22         }
23 
setValue(const QString & key,const QVariant & value)24         inline void setValue(const QString &key, const QVariant &value) {
25             PRINTDB("QSettings::setValue(): %s = '%s'", key.toStdString() % value.toString().toStdString());
26             qsettingsPointer->setValue(key,value); // It is safe to access qsettings from Multiple sources. it is thread safe
27             // Disabling forced sync to persisted storage on write. Will rely on automatic behavior of QSettings
28             // qsettingsPointer->sync(); // force write to file system on each modification of open scad settings
29         }
30 
31         inline QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const {
32             return qsettingsPointer->value(key, defaultValue);
33         }
34 
remove(const QString & key)35         inline void remove(const QString &key) {
36             qsettingsPointer->remove(key);
37             // Disabling forced sync to persisted storage on write. Will rely on automatic behavior of QSettings
38             // qsettingsPointer->sync();
39         }
40 
contains(const QString & key)41         inline bool contains(const QString &key) {
42             return qsettingsPointer->contains(key);
43         }
44 
release()45         void release() {
46             delete qsettingsPointer.release();
47         }
48 
49 
50     private:
51         static std::unique_ptr<QSettings> qsettingsPointer;
52         static std::mutex ctor_mutex;
53 
54 };
55