summaryrefslogtreecommitdiffstats
path: root/sigscript/Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigscript/Config.cpp')
-rw-r--r--sigscript/Config.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/sigscript/Config.cpp b/sigscript/Config.cpp
index 9daff0a8..d776956d 100644
--- a/sigscript/Config.cpp
+++ b/sigscript/Config.cpp
@@ -32,18 +32,24 @@ Config::Config(Config* parent) :
bool Config::addValue(const QString& name, const QVariant& value, const Options options)
{
- if (!m_values.contains(name))
- {
- emit(valueAdded(name, value));
- setValue(name, value, options);
- }
+ if (!m_values.contains(name) || (m_values[name].second & Deleted))
+ return setValue(name, value, options);
+ return false;
}
bool Config::setValue(const QString& name, const QVariant& value, const Options options)
{
QWriteLocker locker(&m_lock);
+ if (m_values.contains(name) && (m_values[name].second & ReadOnly))
+ return false;
+ if (!m_values.contains(name) || (m_values[name].second & Deleted))
+ {
+ m_values[name].second &= ~Deleted;
+ emit(valueAdded(name, value));
+ }
m_values[name] = Value(value, options);
emit(valueChanged(name, value));
+ return true;
}
bool Config::removeValue(const QString& name, const bool shadow)
@@ -51,9 +57,12 @@ bool Config::removeValue(const QString& name, const bool shadow)
QWriteLocker locker(&m_lock);
if (shadow)
m_values[name].second |= Deleted;
- else
+ else if (m_values.contains(name))
m_values.remove(name);
+ else
+ return false;
emit(valueRemoved(name));
+ return true;
}
QVariant Config::value(const QString& name, const bool recursive) const