diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-10-31 17:52:15 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-10-31 17:52:15 +0000 |
| commit | 518d85ab591723da2c5a1a0e01a04dcf0e75c5c4 (patch) | |
| tree | 924a35f7ab7420f915f932db9bf11f81c8e057a5 /sigscript | |
| parent | 54fa12c1143185f7aa18945ccc6bb8d4b9ad630c (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.cpp | 60 | ||||
| -rw-r--r-- | sigscript/Config.h | 39 |
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 |
