mirror of
https://github.com/QuasarApp/QuasarAppLib.git
synced 2025-04-26 17:54:40 +00:00
167 lines
4.9 KiB
C++
167 lines
4.9 KiB
C++
/*
|
|
* Copyright (C) 2018-2022 QuasarApp.
|
|
* Distributed under the lgplv3 software license, see the accompanying
|
|
* Everyone is permitted to copy and distribute verbatim copies
|
|
* of this license document, but changing it is not allowed.
|
|
*/
|
|
|
|
#ifndef ISETTINGS_H
|
|
#define ISETTINGS_H
|
|
|
|
#include "quasarapp_global.h"
|
|
#include "service.h"
|
|
#include <QObject>
|
|
#include <QVariant>
|
|
|
|
class QSettings;
|
|
|
|
namespace QuasarAppUtils {
|
|
|
|
/**
|
|
* @brief The SettingsSaveMode enum
|
|
*/
|
|
enum class SettingsSaveMode: quint64 {
|
|
/// a settings will be saved on hard disk when called the Settings::setValue method.
|
|
Auto,
|
|
/// a settings will be saved on hard disk when called the Settings::Sync method.
|
|
Manual
|
|
};
|
|
|
|
/**
|
|
* @brief The ISettings class This is base implementation of the settings object. usaly it is used as a service
|
|
* So see the ISettingsService class wrapper.
|
|
* @see ISettingsService
|
|
*/
|
|
class QUASARAPPSHARED_EXPORT ISettings : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
/**
|
|
* @brief getValue This method return the value of the settings.
|
|
* @param key This is name of the required settings value.
|
|
* @param def This is default value if a value is not finded.
|
|
* @return value of a @a key
|
|
*/
|
|
Q_INVOKABLE QVariant getValue(const QString &key, const QVariant& def);
|
|
|
|
/**
|
|
* @brief getStrValue some as getValue but convert result object to QString type.
|
|
* @param key This is name of the required settings value.
|
|
* @param def This is default value if a value is not finded.
|
|
* @return value of a @a key
|
|
*/
|
|
Q_INVOKABLE QString getStrValue(const QString &key, const QString& def);
|
|
|
|
/**
|
|
* @brief sync This method save all setings data on a hard disk;
|
|
*/
|
|
void sync();
|
|
|
|
/**
|
|
* @brief forceReloadCache This method force reload settings data from disk.
|
|
* @note Cache will be refreshed
|
|
*/
|
|
void forceReloadCache();
|
|
|
|
/**
|
|
* @brief getMode This method return the current mode of the settings.
|
|
* @return the current mode of the settings.
|
|
*/
|
|
SettingsSaveMode getMode() const;
|
|
|
|
/**
|
|
* @brief setMode This method sets a new value of the settings mode.
|
|
* @param mode This is a new value of the settings mode.
|
|
*/
|
|
void setMode(const SettingsSaveMode &mode);
|
|
|
|
public slots:
|
|
/**
|
|
* @brief setValue This slot sets new value for a @a key setting
|
|
* @param key This is name of the changed setting.
|
|
* @param value This is a new value of the setting
|
|
*/
|
|
void setValue(const QString key, const QVariant& value);
|
|
|
|
/**
|
|
* @brief setStrValue This is some as setValue but working with the QString type.
|
|
* @param key This is name of the changed setting.
|
|
* @param value This is a new value of the setting
|
|
*/
|
|
void setStrValue(const QString& key, const QString& value);
|
|
|
|
|
|
signals:
|
|
/**
|
|
* @brief valueChanged This signal when value of the @a key settings changed
|
|
* @param key This is name of change setting.
|
|
* @param value This is a new value of @a key.
|
|
*/
|
|
void valueChanged(QString key, QVariant value);
|
|
|
|
/**
|
|
* @brief valueStrChanged some as valueChanged(QString key, QVariant value) but value has ben converted to the QString type.
|
|
* @param key This is name of change setting.
|
|
* @param value This is a new value of @a key.
|
|
*/
|
|
void valueStrChanged(QString key, QString value);
|
|
|
|
protected:
|
|
|
|
explicit ISettings(SettingsSaveMode mode = SettingsSaveMode::Auto);
|
|
|
|
/**
|
|
* @brief syncImplementation This method should save all configuration data to the hard drive;
|
|
*/
|
|
virtual void syncImplementation() = 0;
|
|
|
|
/**
|
|
* @brief getValueImplementation This method will return the value of the settings.
|
|
* @param key This is name of the required settings value.
|
|
* @param def This is default value if a value is not finded.
|
|
* @return value of a @a key
|
|
*/
|
|
virtual QVariant getValueImplementation(const QString &key, const QVariant& def) = 0;
|
|
|
|
/**
|
|
* @brief setValueImplementation This slot will set a new value for the @a key parameter.
|
|
* @param key This is name of the changed setting.
|
|
* @param value This is a new value of the setting
|
|
*/
|
|
virtual void setValueImplementation(const QString key, const QVariant& value) = 0;
|
|
|
|
/**
|
|
* @brief clearCache This method clear all data from cache.
|
|
*/
|
|
void clearCache();
|
|
private:
|
|
SettingsSaveMode _mode = SettingsSaveMode::Auto;
|
|
|
|
QHash<QString, QVariant> _cache;
|
|
};
|
|
|
|
/**
|
|
* @brief The ISettingsService class base interface for implementation settings backends.
|
|
* Available implementations:
|
|
* Setting (based on QSettings backend)
|
|
* @note This is singleton object.
|
|
*
|
|
* @note The all child classes should be initialized before used.
|
|
*
|
|
* ```
|
|
* auto settingsInstance = Setting::init<Setting>();
|
|
* ```
|
|
*
|
|
* @see Service::init method.
|
|
*
|
|
*/
|
|
class QUASARAPPSHARED_EXPORT ISettingsService: public QuasarAppUtils::Service<ISettings> {};
|
|
|
|
} ;
|
|
|
|
|
|
|
|
#endif // ISETTINGS_H
|