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