You can now register a slot for settings changes using:
Settings::notify(const QString &key, QObject *receiver, const char *slot)
irclisthelper.h
ircuser.h
network.h
irclisthelper.h
ircuser.h
network.h
signalproxy.h
syncableobject.h)
signalproxy.h
syncableobject.h)
global.h
logger.h
message.h
global.h
logger.h
message.h
types.h
util.h
cliparser.h)
types.h
util.h
cliparser.h)
#include "settings.h"
QHash<QString, QHash<QString, QVariant> > Settings::settingsCache;
#include "settings.h"
QHash<QString, QHash<QString, QVariant> > Settings::settingsCache;
+QHash<QString, QHash<QString, SettingsChangeNotifier *> > Settings::settingsChangeNotifier;
// Settings::Settings(QString group_, QString appName_)
// : group(group_),
// Settings::Settings(QString group_, QString appName_)
// : group(group_),
+void Settings::notify(const QString &key, QObject *receiver, const char *slot) {
+ QObject::connect(notifier(group, key), SIGNAL(valueChanged(const QVariant &)),
+ receiver, slot);
+}
+
QStringList Settings::allLocalKeys() {
QSettings s(org(), appName);
s.beginGroup(group);
QStringList Settings::allLocalKeys() {
QSettings s(org(), appName);
s.beginGroup(group);
s.setValue(key, data);
s.endGroup();
setCacheValue(group, key, data);
s.setValue(key, data);
s.endGroup();
setCacheValue(group, key, data);
+ if(hasNotifier(group, key)) {
+ emit notifier(group, key)->valueChanged(data);
+ }
}
const QVariant &Settings::localValue(const QString &key, const QVariant &def) {
}
const QVariant &Settings::localValue(const QString &key, const QVariant &def) {
if(isCached(group, key))
settingsCache[group].remove(key);
}
if(isCached(group, key))
settingsCache[group].remove(key);
}
-
-
-// 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 <QString>
#include <QVariant>
#include <QString>
#include <QVariant>
+class SettingsChangeNotifier : public QObject {
+ Q_OBJECT
+
+signals:
+ void valueChanged(const QVariant &newValue);
+
+private:
+ friend class Settings;
+};
+
+
+
class Settings {
public:
enum Mode { Default, Custom };
class Settings {
public:
enum Mode { Default, Custom };
+
+public:
+ void notify(const QString &key, QObject *receiver, const char *slot);
+
protected:
inline Settings(QString group_, QString appName_) : group(group_), appName(appName_) {}
inline virtual ~Settings() {}
protected:
inline Settings(QString group_, QString appName_) : group(group_), appName(appName_) {}
inline virtual ~Settings() {}
virtual const QVariant &localValue(const QString &key, const QVariant &def = QVariant());
virtual void removeLocalKey(const QString &key);
virtual const QVariant &localValue(const QString &key, const QVariant &def = QVariant());
virtual void removeLocalKey(const QString &key);
QString group;
QString appName;
QString group;
QString appName;
}
static QHash<QString, QHash<QString, QVariant> > settingsCache;
}
static QHash<QString, QHash<QString, QVariant> > settingsCache;
+ static QHash<QString, QHash<QString, SettingsChangeNotifier *> > settingsChangeNotifier;
+
inline void setCacheValue(const QString &group, const QString &key, const QVariant &data) {
settingsCache[group][key] = data;
}
inline void setCacheValue(const QString &group, const QString &key, const QVariant &data) {
settingsCache[group][key] = data;
}
inline bool isCached(const QString &group, const QString &key) {
return settingsCache.contains(group) && settingsCache[group].contains(key);
}
inline bool isCached(const QString &group, const QString &key) {
return settingsCache.contains(group) && settingsCache[group].contains(key);
}
+ inline SettingsChangeNotifier *notifier(const QString &group, const QString &key) {
+ if(!hasNotifier(group, key))
+ settingsChangeNotifier[group][key] = new SettingsChangeNotifier();
+ return settingsChangeNotifier[group][key];
+ }
+ inline bool hasNotifier(const QString &group, const QString &key) {
+ return settingsChangeNotifier.contains(group) && settingsChangeNotifier[group].contains(key);
+ }
+};