Introduced SettingsBridge class

Class use to privatize direct access to settings
This commit is contained in:
Atlante45 2015-01-19 21:24:57 -08:00
parent 6cf00041f8
commit d0d16e088e
2 changed files with 26 additions and 17 deletions

View file

@ -9,16 +9,13 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <QSettings>
#include "Settings.h" #include "Settings.h"
QVariant getFromSettings(QString key, QVariant defaultValue) { QVariant SettingsBridge::getFromSettings(const QString& key, const QVariant& defaultValue) {
return QSettings().value(key, defaultValue); return QSettings().value(key, defaultValue);
} }
void setInSettings(QString key, QVariant value) { void SettingsBridge::setInSettings(const QString& key, const QVariant& value) {
QSettings().setValue(key, value); QSettings().setValue(key, value);
} }

View file

@ -12,17 +12,23 @@
#ifndef hifi_Settings_h #ifndef hifi_Settings_h
#define hifi_Settings_h #define hifi_Settings_h
#include <QSettings>
#include <QString> #include <QString>
#include <QVariant> #include <QVariant>
// TODO: remove
class Settings : public QSettings {
};
template <typename T> template <typename T>
class SettingHandle { class SettingHandle {
public: public:
SettingHandle(const QString& key, const T& defaultValue); SettingHandle(const QString& key, const T& defaultValue);
const T& get() const; // Returns setting value, returns its default value if not found T get() const; // Returns setting value, returns its default value if not found
const T& get(const T& other) const; // Returns setting value, returns other if not found T get(const T& other) const; // Returns setting value, returns other if not found
const T& getDefault() const; T getDefault() const;
void set(const T& value) const; void set(const T& value) const;
void reset() const; void reset() const;
@ -32,9 +38,15 @@ public:
private: private:
const QString _key; const QString _key;
const QVariant _defaultValue; const QVariant _defaultValue;
};
friend QVariant getFromSettings(QString key, QVariant defaultValue); class SettingsBridge {
friend void setInSettings(QString key, QVariant value); private:
static QVariant getFromSettings(const QString& key, const QVariant& defaultValue);
static void setInSettings(const QString& key, const QVariant& value);
template<typename T>
friend class SettingHandle;
}; };
// Specialize template here for types used in Setting // Specialize template here for types used in Setting
@ -52,8 +64,8 @@ SettingHandle<T>::SettingHandle(const QString& key, const T& defaultValue) : _ke
} }
template <typename T> template <typename T>
const T& SettingHandle<T>::get() const { T SettingHandle<T>::get() const {
QVariant variant = getFromSettings(_key, _defaultValue); QVariant variant = SettingsBridge::getFromSettings(_key, _defaultValue);
if (variant.type() == type) { if (variant.type() == type) {
return variant.value<T>(); return variant.value<T>();
} }
@ -61,8 +73,8 @@ const T& SettingHandle<T>::get() const {
} }
template <typename T> template <typename T>
const T& SettingHandle<T>::get(const T& other) const { T SettingHandle<T>::get(const T& other) const {
QVariant variant = getFromSettings(_key, _defaultValue); QVariant variant = SettingsBridge::getFromSettings(_key, _defaultValue);
if (variant.type() == type) { if (variant.type() == type) {
return variant.value<T>(); return variant.value<T>();
} }
@ -70,13 +82,13 @@ const T& SettingHandle<T>::get(const T& other) const {
} }
template <typename T> inline template <typename T> inline
const T& SettingHandle<T>::getDefault() const { T SettingHandle<T>::getDefault() const {
return _defaultValue.value<T>(); return _defaultValue.value<T>();
} }
template <typename T> inline template <typename T> inline
void SettingHandle<T>::set(const T& value) const { void SettingHandle<T>::set(const T& value) const {
setInSettings(_key, QVariant(value)); SettingsBridge::setInSettings(_key, QVariant(value));
} }
template <typename T> inline template <typename T> inline