From cd108fd02975eac3a3fed2fde26c58de5cbdaf1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Fri, 4 Sep 2015 02:10:29 +0200 Subject: GH-1223 fix override settings They now work more like passthrough settings, except not passing through set and reset --- logic/settings/OverrideSetting.cpp | 34 +++++++++++++++++++++++++++++----- logic/settings/OverrideSetting.h | 9 ++++++++- logic/settings/SettingsObject.cpp | 5 +++-- logic/settings/SettingsObject.h | 3 ++- 4 files changed, 42 insertions(+), 9 deletions(-) (limited to 'logic/settings') diff --git a/logic/settings/OverrideSetting.cpp b/logic/settings/OverrideSetting.cpp index e8a9bfff..25162dff 100644 --- a/logic/settings/OverrideSetting.cpp +++ b/logic/settings/OverrideSetting.cpp @@ -15,16 +15,40 @@ #include "OverrideSetting.h" -OverrideSetting::OverrideSetting(std::shared_ptr other) +OverrideSetting::OverrideSetting(std::shared_ptr other, std::shared_ptr gate) : Setting(other->configKeys(), QVariant()) { + Q_ASSERT(other); + Q_ASSERT(gate); m_other = other; + m_gate = gate; +} + +bool OverrideSetting::isOverriding() const +{ + return m_gate->get().toBool(); } QVariant OverrideSetting::defValue() const { - if (m_other) - return m_other->get(); - else - return QVariant(); + return m_other->get(); +} + +QVariant OverrideSetting::get() const +{ + if(isOverriding()) + { + return Setting::get(); + } + return m_other->get(); +} + +void OverrideSetting::reset() +{ + Setting::reset(); +} + +void OverrideSetting::set(QVariant value) +{ + Setting::set(value); } diff --git a/logic/settings/OverrideSetting.h b/logic/settings/OverrideSetting.h index 7534692f..68595cde 100644 --- a/logic/settings/OverrideSetting.h +++ b/logic/settings/OverrideSetting.h @@ -30,10 +30,17 @@ class OverrideSetting : public Setting { Q_OBJECT public: - explicit OverrideSetting(std::shared_ptr other); + explicit OverrideSetting(std::shared_ptr overriden, std::shared_ptr gate); virtual QVariant defValue() const; + virtual QVariant get() const; + virtual void set (QVariant value); + virtual void reset(); + +private: + bool isOverriding() const; protected: std::shared_ptr m_other; + std::shared_ptr m_gate; }; diff --git a/logic/settings/SettingsObject.cpp b/logic/settings/SettingsObject.cpp index 5e682cbf..f2ffdf9b 100644 --- a/logic/settings/SettingsObject.cpp +++ b/logic/settings/SettingsObject.cpp @@ -30,7 +30,8 @@ SettingsObject::~SettingsObject() m_settings.clear(); } -std::shared_ptr SettingsObject::registerOverride(std::shared_ptr original) +std::shared_ptr SettingsObject::registerOverride(std::shared_ptr original, + std::shared_ptr gate) { if (contains(original->id())) { @@ -38,7 +39,7 @@ std::shared_ptr SettingsObject::registerOverride(std::shared_ptrid()); return nullptr; // Fail } - auto override = std::make_shared(original); + auto override = std::make_shared(original, gate); override->m_storage = this; connectSignals(*override); m_settings.insert(override->id(), override); diff --git a/logic/settings/SettingsObject.h b/logic/settings/SettingsObject.h index 6272d24c..0f299c5d 100644 --- a/logic/settings/SettingsObject.h +++ b/logic/settings/SettingsObject.h @@ -62,12 +62,13 @@ public: virtual ~SettingsObject(); /*! * Registers an override setting for the given original setting in this settings object + * gate decides if the passthrough (true) or the original (false) is used for value * * This will fail if there is already a setting with the same ID as * the one that is being registered. * \return A valid Setting shared pointer if successful. */ - std::shared_ptr registerOverride(std::shared_ptr original); + std::shared_ptr registerOverride(std::shared_ptr original, std::shared_ptr gate); /*! * Registers a passthorugh setting for the given original setting in this settings object -- cgit v1.2.3