/***************************************************************************
- * Copyright (C) 2005-07 by the Quassel IRC Team *
+ * Copyright (C) 2005-08 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "settings.h"
-Settings::Settings(QString g, QString applicationName) : QSettings(QCoreApplication::organizationName(), applicationName), group(g) {
+static QHash<QString, QHash<QString, QVariant> > __settingsCache__;
+
+Settings::Settings(QString g, QString applicationName)
+
+#ifdef Q_WS_MAC
+ : QSettings(QCoreApplication::organizationDomain(), applicationName),
+#else
+ : QSettings(QCoreApplication::organizationName(), applicationName),
+#endif
+ group(g)
+{
/* we need to call the constructor immediately in order to set the path...
#ifndef Q_WS_QWS
*/
}
-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);
+}