X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsettings.cpp;h=eb4fc72a7241ae3947b540a4d284a690159f0eb2;hp=f35bdd7905479cf91cd6afbd25aacea60810f3bc;hb=a1d785ae12b3ec04b43e243f3397bb6f8ecf60d5;hpb=8699dd758516d0ded076811e8ea656adc95e69d0 diff --git a/src/common/settings.cpp b/src/common/settings.cpp index f35bdd79..eb4fc72a 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -29,7 +29,17 @@ #include "settings.h" -Settings::Settings(QString g, QString applicationName) : QSettings(QCoreApplication::organizationName(), applicationName), group(g) { +static QHash > __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 @@ -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(); @@ -90,14 +91,17 @@ QStringList Settings::localChildGroups(const QString &rootkey) { 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) { @@ -105,3 +109,16 @@ 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); +}