summaryrefslogtreecommitdiffstats
path: root/sigscript
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-10-31 17:52:15 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-10-31 17:52:15 +0000
commit518d85ab591723da2c5a1a0e01a04dcf0e75c5c4 (patch)
tree924a35f7ab7420f915f932db9bf11f81c8e057a5 /sigscript
parent54fa12c1143185f7aa18945ccc6bb8d4b9ad630c (diff)
[FIX] Adding subdirectories is done smarter now (no hard dependencies just to build sigmod)
[FIX] Added kdegames dependency because it is going to be used in signet [FIX] Config values now have flags git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@286 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'sigscript')
-rw-r--r--sigscript/Config.cpp60
-rw-r--r--sigscript/Config.h39
2 files changed, 68 insertions, 31 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()
diff --git a/sigscript/Config.h b/sigscript/Config.h
index a38bba4d..3ca15f84 100644
--- a/sigscript/Config.h
+++ b/sigscript/Config.h
@@ -24,6 +24,7 @@
// Qt includes
#include <QtCore/QMap>
#include <QtCore/QObject>
+#include <QtCore/QPair>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
@@ -39,35 +40,49 @@ namespace Sigscript
class SIGSCRIPT_EXPORT Config : public QObject
{
Q_OBJECT
+ Q_ENUMS(Option)
public:
+ enum Option
+ {
+ Temporary = 1,
+ Deleted = 2,
+ ReadOnly = 4,
+ Hidden = 8
+ };
+ Q_DECLARE_FLAGS(Options, Option)
+
+ typedef QPair<QVariant, Options> Value;
+
Config(QObject* parent);
Q_SCRIPTABLE QVariant value(const QString& name, const bool recursive = true) const;
- template<typename T> T valueOfType(const QString& name, const bool recursive = false) const;
- Q_SCRIPTABLE bool hasValue(const QString& name, const bool recursive = false) const;
- template<typename T> bool hasValueOfType(const QString& name, const bool recursive = false) const;
+ template<typename T> T valueOfType(const QString& name, const bool recursive = true) const;
+ Q_SCRIPTABLE bool hasValue(const QString& name, const bool recursive = true) const;
+ template<typename T> bool hasValueOfType(const QString& name, const bool recursive = true) const;
signals:
void valueAdded(const QString& name, const QVariant& value);
void valueChanged(const QString& name, const QVariant& oldValue, const QVariant& newValue);
+ void optionsChanged(const QString& name, const Options oldOptions, const Options newOptions);
void valueRemoved(const QString& name);
public slots:
- void addValue(const QString& name, const QVariant& value, const bool temporary = false);
- void setValue(const QString& name, const QVariant& value, const bool temporary = false);
- void removeValue(const QString& name);
+ void addValue(const QString& name, const QVariant& value, const Options options = 0);
+ void setValue(const QString& name, const QVariant& value, const Options options = 0);
+ void setOptions(const QString& name, const Options options);
+ void unsetOptions(const QString& name, const Options options);
+ void removeValue(const QString& name, const bool shadow = false);
- void clearTemporary();
+ void clean();
virtual void writeBack();
private:
- QMap<QString, QVariant> m_values;
- QStringList m_temporaries;
+ QMap<QString, Value> m_values;
};
template<typename T> T Config::valueOfType(const QString& name, const bool recursive) const
{
if (hasValueOfType<T>(name))
- return m_values[name].value<T>();
+ return m_values[name].first.value<T>();
if (recursive)
{
QObject* par = parent();
@@ -83,7 +98,7 @@ template<typename T> T Config::valueOfType(const QString& name, const bool recur
template<typename T> bool Config::hasValueOfType(const QString& name, const bool recursive) const
{
- if (m_values.contains(name) && m_values[name].canConvert<T>())
+ if (hasValue(name) && m_values[name].first.canConvert<T>())
return true;
if (recursive && qobject_cast<Config*>(parent()))
return qobject_cast<Config*>(parent())->hasValueOfType<T>(name, true);
@@ -92,5 +107,7 @@ template<typename T> bool Config::hasValueOfType(const QString& name, const bool
}
Q_DECLARE_METATYPE(Sigscript::Config*)
+Q_DECLARE_METATYPE(Sigscript::Config::Options)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Sigscript::Config::Options)
#endif