summaryrefslogtreecommitdiffstats
path: root/sigscript/Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigscript/Config.cpp')
-rw-r--r--sigscript/Config.cpp60
1 files changed, 40 insertions, 20 deletions
diff --git a/sigscript/Config.cpp b/sigscript/Config.cpp
index 6460053c..0340d741 100644
--- a/sigscript/Config.cpp
+++ b/sigscript/Config.cpp
@@ -23,40 +23,53 @@ Sigscript::Config::Config(QObject* parent) :
{
}
-void Sigscript::Config::addValue(const QString& name, const QVariant& value, const bool temporary)
+void Sigscript::Config::addValue(const QString& name, const QVariant& value, const Options options)
{
if (!m_values.contains(name))
{
- setValue(name, value, temporary);
+ setValue(name, value, options);
emit(valueAdded(name, value));
}
}
-void Sigscript::Config::setValue(const QString& name, const QVariant& value, const bool temporary)
+void Sigscript::Config::setValue(const QString& name, const QVariant& value, const Options options)
{
- const QVariant& oldValue = m_values[name];
- m_values[name] = value;
- if (temporary)
- {
- if (m_temporaries.contains(name))
- m_temporaries.append(name);
- }
- else
- m_temporaries.removeAll(name);
+ QVariant oldValue = m_values[name].first;
+ m_values[name] = Value(value, options);
emit(valueChanged(name, oldValue, value));
}
-void Sigscript::Config::removeValue(const QString& name)
+void Sigscript::Config::setOptions(const QString& name, const Options options)
+{
+ const Options oldOptions = m_values[name].second;
+ m_values[name].second |= options;
+ emit(optionsChanged(name, oldOptions, options));
+}
+
+void Sigscript::Config::unsetOptions(const QString& name, const Options options)
+{
+ const Options oldOptions = m_values[name].second;
+ m_values[name].second |= ~options;
+ emit(optionsChanged(name, oldOptions, options));
+}
+
+void Sigscript::Config::removeValue(const QString& name, const bool shadow)
{
- m_values.remove(name);
- m_temporaries.removeAll(name);
+ if (shadow)
+ m_values[name].second |= Deleted;
+ else
+ m_values.remove(name);
emit(valueRemoved(name));
}
QVariant Sigscript::Config::value(const QString& name, const bool recursive) const
{
if (m_values.contains(name))
- return m_values[name];
+ {
+ if (m_values[name].second & (Deleted | Hidden))
+ return QVariant();
+ return m_values[name].first;
+ }
if (recursive)
{
QObject* par = parent();
@@ -73,16 +86,23 @@ QVariant Sigscript::Config::value(const QString& name, const bool recursive) con
bool Sigscript::Config::hasValue(const QString& name, const bool recursive) const
{
if (m_values.contains(name))
- return true;
+ return !(m_values[name].second & (Deleted | Hidden));
if (recursive && qobject_cast<Config*>(parent()))
return qobject_cast<Config*>(parent())->hasValue(name, true);
return false;
}
-void Sigscript::Config::clearTemporary()
+void Sigscript::Config::clean()
{
- while (m_temporaries.size())
- removeValue(m_temporaries[0]);
+ for (QMutableMapIterator<QString, Value> i(m_values); i.hasNext(); i.next())
+ {
+ if (i.value().second & Temporary)
+ {
+ i.remove();
+ continue;
+ }
+ i.value().second &= ~Hidden;
+ }
}
void Sigscript::Config::writeBack()