diff --git a/settings.cpp b/settings.cpp index 78e4d02..1945bc7 100644 --- a/settings.cpp +++ b/settings.cpp @@ -11,7 +11,7 @@ using namespace QuasarAppUtils; -Settings::Settings() { +Settings::Settings(SettingsSaveMode mode) { auto name = QCoreApplication::applicationName(); auto company = QCoreApplication::organizationName(); if (name.isEmpty()) { @@ -23,11 +23,21 @@ Settings::Settings() { } _settings = new QSettings(QSettings::IniFormat, QSettings::Scope::UserScope, company, name); - + _mode = mode; } -Settings *Settings::initSettings() { - static Settings* res = new Settings(); +SettingsSaveMode Settings::getMode() const +{ + return _mode; +} + +void Settings::setMode(const SettingsSaveMode &mode) +{ + _mode = mode; +} + +Settings *Settings::initSettings(SettingsSaveMode mode) { + static Settings* res = new Settings(mode); return res; } @@ -47,12 +57,20 @@ QString Settings::getStrValue(const QString &key, const QString &def) { return getValue(key, QVariant(def)).toString(); } +void Settings::sync() { + _settings->sync(); +} + void Settings::setValue(const QString key, const QVariant &value) { _settings->setValue(key, value); emit valueChanged(key, value); emit valueStrChanged(key, value.toString()); + if (_mode == SettingsSaveMode::Auto) { + sync(); + } + } void Settings::setStrValue(const QString &key, const QString &value) { diff --git a/settings.h b/settings.h index 17101af..1428925 100644 --- a/settings.h +++ b/settings.h @@ -16,6 +16,16 @@ class QSettings; namespace QuasarAppUtils { +/** + * @brief The SettingsSaveMode enum + * Auto - value save on hard disk when calling method "value" + * manual - save all data on hard disk when calling method Settings::sync + */ +enum class SettingsSaveMode: quint64 { + Auto, + Manual +}; + /** * @brief The Settings class - singleton for QSettings */ @@ -23,11 +33,11 @@ class QUASARAPPSHARED_EXPORT Settings : public QObject { Q_OBJECT private: - explicit Settings(); - QSettings *_settings; - - static Settings* initSettings(); + explicit Settings(SettingsSaveMode mode = SettingsSaveMode::Auto); + QSettings *_settings = nullptr; + SettingsSaveMode _mode = SettingsSaveMode::Auto; + static Settings* initSettings(SettingsSaveMode mode = SettingsSaveMode::Auto); public: /** @@ -55,6 +65,23 @@ public: */ QString getStrValue(const QString &key, const QString& def); + /** + * @brief sync - save all data on hard disk; + */ + void sync(); + + /** + * @brief getMode + * @return + */ + SettingsSaveMode getMode() const; + + /** + * @brief setMode + * @param mode + */ + void setMode(const SettingsSaveMode &mode); + public slots: /** * @brief setValue - set new value of key