diff options
Diffstat (limited to 'sigscript')
-rw-r--r-- | sigscript/Config.cpp | 34 | ||||
-rw-r--r-- | sigscript/Config.h | 5 | ||||
-rw-r--r-- | sigscript/ValueMap.cpp | 26 | ||||
-rw-r--r-- | sigscript/ValueMap.h | 7 |
4 files changed, 66 insertions, 6 deletions
diff --git a/sigscript/Config.cpp b/sigscript/Config.cpp index f5924056..a30fa997 100644 --- a/sigscript/Config.cpp +++ b/sigscript/Config.cpp @@ -121,10 +121,40 @@ bool Config::unsetOptions(const QString& name, const ConfigOptions options) ConfigOptions Config::options(const QString& name, const bool recursive) const { + ConfigOptions options = 0; if (m_values.contains(name)) - return m_values.options(name); + options = m_values.options(name); if (recursive && m_parent) - return m_parent->options(name, recursive); + options |= m_parent->options(name, recursive) & ~overrides(name); + return options; +} + +bool Config::setOverrides(const QString& name, const ConfigOptions newOverrides) +{ + if ((~overrides(name) & newOverrides) || addValue(name, QVariant())) + { + m_values.setOverrides(name, newOverrides); + emit(overridesChanged(name, overrides(name))); + return true; + } + return false; +} + +bool Config::unsetOverrides(const QString& name, const ConfigOptions oldOverrides) +{ + if (overrides(name) & oldOverrides) + { + m_values.unsetOverrides(name, oldOverrides); + emit(overridesChanged(name, overrides(name))); + return true; + } + return false; +} + +ConfigOptions Config::overrides(const QString& name) const +{ + if (m_values.contains(name)) + return m_values.overrides(name); return 0; } diff --git a/sigscript/Config.h b/sigscript/Config.h index 812c3652..458cff97 100644 --- a/sigscript/Config.h +++ b/sigscript/Config.h @@ -42,12 +42,14 @@ class SIGSCRIPT_EXPORT Config : public QObject Q_SCRIPTABLE QStringList values(const bool recursive = false) const; Q_SCRIPTABLE ConfigOptions options(const QString& name, const bool recursive = true) const; + Q_SCRIPTABLE ConfigOptions overrides(const QString& name) const; signals: void valueAdded(const QString& name, const QVariant& value); void valueChanged(const QString& name, const QVariant& newValue); void valueRemoved(const QString& name); void optionsChanged(const QString& name, const Sigscript::ConfigOptions newOptions); + void overridesChanged(const QString& name, const Sigscript::ConfigOptions newOverrides); public slots: bool addValue(const QString& name, const QVariant& value); bool setValue(const QString& name, const QVariant& value); @@ -56,6 +58,9 @@ class SIGSCRIPT_EXPORT Config : public QObject bool setOptions(const QString& name, const Sigscript::ConfigOptions options); bool unsetOptions(const QString& name, const Sigscript::ConfigOptions options); + bool setOverrides(const QString& name, const Sigscript::ConfigOptions options); + bool unsetOverrides(const QString& name, const Sigscript::ConfigOptions options); + void clean(); virtual void writeBack(); diff --git a/sigscript/ValueMap.cpp b/sigscript/ValueMap.cpp index 1b10462d..eec7fa7e 100644 --- a/sigscript/ValueMap.cpp +++ b/sigscript/ValueMap.cpp @@ -60,18 +60,38 @@ ConfigOptions ValueMap::options(const QString& name) const { QReadLocker locker(&m_mutex); if (m_map.contains(name)) - return m_map[name].second; + return m_map[name].second.first; return 0; } void ValueMap::setOptions(const QString& name, const ConfigOptions options) { QWriteLocker locker(&m_mutex); - m_map[name].second |= options; + m_map[name].second.first |= options; } void ValueMap::unsetOptions(const QString& name, const ConfigOptions options) { QWriteLocker locker(&m_mutex); - m_map[name].second &= ~options; + m_map[name].second.first &= ~options; +} + +ConfigOptions ValueMap::overrides(const QString& name) const +{ + QReadLocker locker(&m_mutex); + if (m_map.contains(name)) + return m_map[name].second.second; + return 0; +} + +void ValueMap::setOverrides(const QString& name, const ConfigOptions options) +{ + QWriteLocker locker(&m_mutex); + m_map[name].second.second |= options; +} + +void ValueMap::unsetOverrides(const QString& name, const ConfigOptions options) +{ + QWriteLocker locker(&m_mutex); + m_map[name].second.second &= ~options; } diff --git a/sigscript/ValueMap.h b/sigscript/ValueMap.h index 9f05ca33..aa07c43b 100644 --- a/sigscript/ValueMap.h +++ b/sigscript/ValueMap.h @@ -46,8 +46,13 @@ class SIGSCRIPT_NO_EXPORT ValueMap ConfigOptions options(const QString& name) const; void setOptions(const QString& name, const ConfigOptions options); void unsetOptions(const QString& name, const ConfigOptions options); + + ConfigOptions overrides(const QString& name) const; + void setOverrides(const QString& name, const ConfigOptions options); + void unsetOverrides(const QString& name, const ConfigOptions options); private: - typedef QPair<QVariant, ConfigOptions> Value; + typedef QPair<ConfigOptions, ConfigOptions> Options; + typedef QPair<QVariant, Options> Value; QMap<QString, Value> m_map; mutable QReadWriteLock m_mutex; }; |