summaryrefslogtreecommitdiffstats
path: root/sigscript
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-16 20:36:07 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-17 17:36:05 -0400
commitfe6135aaad1db57dfcdaacf2ec3af6cb653b1b3e (patch)
tree5c06df763e1a506f7b28159cd0184977f2d7a7d3 /sigscript
parent7e7427be5254dcdf2ce471918015db604e25449d (diff)
downloadsigen-fe6135aaad1db57dfcdaacf2ec3af6cb653b1b3e.tar.gz
sigen-fe6135aaad1db57dfcdaacf2ec3af6cb653b1b3e.tar.xz
sigen-fe6135aaad1db57dfcdaacf2ec3af6cb653b1b3e.zip
Smarter value handling when setting and deleting
Diffstat (limited to 'sigscript')
-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