- virtual QStringList allLocalKeys();
- virtual QStringList localChildKeys(const QString &rootkey = QString());
- virtual QStringList localChildGroups(const QString &rootkey = QString());
- //virtual QStringList allSessionKeys() = 0;
- virtual QStringList sessionKeys() = 0;
-
- virtual void setLocalValue(const QString &key, const QVariant &data);
- virtual QVariant localValue(const QString &key, const QVariant &def = QVariant());
-
- virtual void setSessionValue(const QString &key, const QVariant &data) = 0;
- virtual QVariant sessionValue(const QString &key, const QVariant &def = QVariant()) = 0;
-
- virtual void removeLocalKey(const QString &key);
-
- QString group;
-
+ /**
+ * Allows subclasses to transform the key given to notify().
+ *
+ * Default implementation just returns the given key.
+ *
+ * @param key Key given to notify()
+ * @returns Key that should be used for notfication
+ */
+ virtual QString keyForNotify(const QString& key) const;
+
+ virtual QStringList allLocalKeys() const;
+ virtual QStringList localChildKeys(const QString& rootkey = QString()) const;
+ virtual QStringList localChildGroups(const QString& rootkey = QString()) const;
+
+ virtual void setLocalValue(const QString& key, const QVariant& data);
+ virtual QVariant localValue(const QString& key, const QVariant& def = QVariant()) const;
+
+ /**
+ * Gets if a key exists in settings
+ *
+ * @param[in] key ID of local settings key
+ * @returns True if key exists in settings, otherwise false
+ */
+ virtual bool localKeyExists(const QString& key) const;
+
+ virtual void removeLocalKey(const QString& key);
+
+ QString _group;
+ QString _appName;
+
+private:
+ QSettings::Format format() const;
+
+ QString fileName() const;
+
+ QString normalizedKey(const QString& group, const QString& key) const;
+
+ /**
+ * Update the cache of whether or not a given settings key persists on disk
+ *
+ * @param normKey Normalized settings key ID
+ * @param exists True if key exists, otherwise false
+ */
+ void setCacheKeyPersisted(const QString& normKey, bool exists) const;
+
+ /**
+ * Check if the given settings key ID persists on disk (rather than being a default value)
+ *
+ * @see Settings::localKeyExists()
+ *
+ * @param normKey Normalized settings key ID
+ * @return True if key exists and persistence has been cached, otherwise false
+ */
+ bool cacheKeyPersisted(const QString& normKey) const;
+
+ /**
+ * Check if the persistence of the given settings key ID has been cached
+ *
+ * @param normKey Normalized settings key ID
+ * @return True if key persistence has been cached, otherwise false
+ */
+ bool isKeyPersistedCached(const QString& normKey) const;
+
+ void setCacheValue(const QString& normKey, const QVariant& data) const;
+
+ QVariant cacheValue(const QString& normKey) const;
+
+ bool isCached(const QString& normKey) const;
+
+ SettingsChangeNotifier* notifier(const QString& normKey) const;
+
+ bool hasNotifier(const QString& normKey) const;
+
+private:
+ static QHash<QString, QVariant> _settingsCache; ///< Cached settings values
+ static QHash<QString, bool> _settingsKeyPersistedCache; ///< Cached settings key exists on disk
+ static QHash<QString, std::shared_ptr<SettingsChangeNotifier>> _settingsChangeNotifier;