summaryrefslogtreecommitdiffstats
path: root/sigscript
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-17 20:43:33 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-17 20:43:33 -0400
commitaf483183c11a494394a3c61c47f9c46f805806bf (patch)
tree03e0677ee576274550dbb25e893bbad34d8b87dc /sigscript
parent86d3207a4fc047d62cba109be7e8f40a43cc7d65 (diff)
downloadsigen-af483183c11a494394a3c61c47f9c46f805806bf.tar.gz
sigen-af483183c11a494394a3c61c47f9c46f805806bf.tar.xz
sigen-af483183c11a494394a3c61c47f9c46f805806bf.zip
Add override capabilities for Config values
Diffstat (limited to 'sigscript')
-rw-r--r--sigscript/Config.cpp34
-rw-r--r--sigscript/Config.h5
-rw-r--r--sigscript/ValueMap.cpp26
-rw-r--r--sigscript/ValueMap.h7
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;
};