/***************************************************************************
- * 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 *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include <QCoreApplication>
#include <QSettings>
#include <QStringList>
#include <QDebug>
#ifdef Q_WS_QWS
#include <Qtopia>
-#include <QCoreApplication>
#endif
#include "settings.h"
-Settings::Settings(QString g) : 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
- QSettings();
+ QSettings(QCoreApplication::organizationName(), applicationName);
#else
// FIXME sandboxDir() is not currently working correctly...
//if(Qtopia::sandboxDir().isEmpty()) QSettings();
QSettings(sandboxPath + "/etc/QuasselIRC.conf", QSettings::IniFormat);
qDebug() << sandboxPath + "/etc/QuasselIRC.conf";
} else {
- QSettings();
+ QSettings(QCoreApplication::organizationName(), applicationName);
}
#endif
-}
-
-Settings::~Settings() {
-
-}
-
-void Settings::setGroup(QString g) {
- group = g;
-
+*/
}
QStringList Settings::allLocalKeys() {
return res;
}
-QStringList Settings::localChildKeys() {
- beginGroup(group);
+QStringList Settings::localChildKeys(const QString &rootkey) {
+ QString g;
+ if(rootkey.isEmpty()) g = group;
+ else g = QString("%1/%2").arg(group, rootkey);
+ beginGroup(g);
QStringList res = childKeys();
endGroup();
return res;
}
-QStringList Settings::localChildGroups() {
- beginGroup(group);
+QStringList Settings::localChildGroups(const QString &rootkey) {
+ QString g;
+ if(rootkey.isEmpty()) g = group;
+ else g = QString("%1/%2").arg(group, rootkey);
+ beginGroup(g);
QStringList res = childGroups();
endGroup();
return res;
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);
+}