#include "settings.h"
+static QHash<QString, QHash<QString, QVariant> > __settingsCache__;
+
Settings::Settings(QString g, QString applicationName)
#ifdef Q_WS_MAC
*/
}
-Settings::~Settings() {
-
-}
-
-void Settings::setGroup(QString g) {
- group = g;
-
-}
-
QStringList Settings::allLocalKeys() {
beginGroup(group);
QStringList res = allKeys();
void Settings::setLocalValue(const QString &key, const QVariant &data) {
beginGroup(group);
setValue(key, data);
+ setCacheValue(group, key, data);
endGroup();
}
-QVariant Settings::localValue(const QString &key, const QVariant &def) {
- beginGroup(group);
- QVariant res = value(key, def);
- endGroup();
- return res;
+const QVariant &Settings::localValue(const QString &key, const QVariant &def) {
+ if(!isCached(group, key)) {
+ beginGroup(group);
+ setCacheValue(group, key, value(key, def));
+ endGroup();
+ }
+ return cacheValue(group, key);
}
void Settings::removeLocalKey(const QString &key) {
remove(key);
endGroup();
}
+
+
+void Settings::setCacheValue(const QString &group, const QString &key, const QVariant &data) {
+ ::__settingsCache__[group][key] = data;
+}
+
+const QVariant &Settings::cacheValue(const QString &group, const QString &key) {
+ return ::__settingsCache__[group][key];
+}
+
+bool Settings::isCached(const QString &group, const QString &key) {
+ return ::__settingsCache__.contains(group) && ::__settingsCache__[group].contains(key);
+}
#include <QSettings>
class Settings : private QSettings {
-
- public:
- virtual ~Settings();
-
- //static void setGuiValue(QString, QVariant) {};
- //static QVariant guiValue(QString, QVariant = QVariant()) { return QVariant(); }
-
- enum Mode { Default, Custom };
-
- protected:
- Settings(QString group, QString applicationName);
-
- void setGroup(QString group);
-
- virtual QStringList allLocalKeys();
- virtual QStringList localChildKeys(const QString &rootkey = QString());
- virtual QStringList localChildGroups(const QString &rootkey = QString());
-
- virtual void setLocalValue(const QString &key, const QVariant &data);
- virtual QVariant localValue(const QString &key, const QVariant &def = QVariant());
-
- virtual void removeLocalKey(const QString &key);
-
- QString group;
-
+public:
+ enum Mode { Default, Custom };
+
+protected:
+ Settings(QString group, QString applicationName);
+
+ inline void setGroup(const QString &group_) { group = group_; }
+
+ virtual QStringList allLocalKeys();
+ virtual QStringList localChildKeys(const QString &rootkey = QString());
+ virtual QStringList localChildGroups(const QString &rootkey = QString());
+
+ virtual void setLocalValue(const QString &key, const QVariant &data);
+ virtual const QVariant &localValue(const QString &key, const QVariant &def = QVariant());
+
+ virtual void removeLocalKey(const QString &key);
+
+ QString group;
+
+private:
+ void setCacheValue(const QString &group, const QString &key, const QVariant &data);
+ const QVariant &cacheValue(const QString &group, const QString &key);
+ bool isCached(const QString &group, const QString &key);
};