introducing autocached settings
[quassel.git] / src / common / settings.cpp
index f35bdd7..eb4fc72 100644 (file)
 
 #include "settings.h"
 
 
 #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
 
 /* we need to call the constructor immediately in order to set the path...
 #ifndef Q_WS_QWS
@@ -51,15 +61,6 @@ Settings::Settings(QString g, QString applicationName) : QSettings(QCoreApplicat
 */
 }
 
 */
 }
 
-Settings::~Settings() {
-
-}
-
-void Settings::setGroup(QString g) {
-  group = g;
-
-}
-
 QStringList Settings::allLocalKeys() {
   beginGroup(group);
   QStringList res = allKeys();
 QStringList Settings::allLocalKeys() {
   beginGroup(group);
   QStringList res = allKeys();
@@ -90,14 +91,17 @@ QStringList Settings::localChildGroups(const QString &rootkey) {
 void Settings::setLocalValue(const QString &key, const QVariant &data) {
   beginGroup(group);
   setValue(key, data);
 void Settings::setLocalValue(const QString &key, const QVariant &data) {
   beginGroup(group);
   setValue(key, data);
+  setCacheValue(group, key, data);
   endGroup();
 }
 
   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) {
 }
 
 void Settings::removeLocalKey(const QString &key) {
@@ -105,3 +109,16 @@ void Settings::removeLocalKey(const QString &key) {
   remove(key);
   endGroup();
 }
   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);
+}