Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

76 lines
1.8 KiB

#ifndef QTMVVM_DATASYNCSETTINGSVIEWMODEL_H
#define QTMVVM_DATASYNCSETTINGSVIEWMODEL_H
#include <QtCore/qobject.h>
#include <QtCore/qscopedpointer.h>
#include <QtMvvmCore/settingsviewmodel.h>
#include "QtMvvmDataSyncCore/qtmvvmdatasynccore_global.h"
namespace QtMvvm {
struct Q_MVVMDATASYNCCORE_EXPORT DataSyncSettingsEntry
{
Q_GADGET
Q_PROPERTY(QString key MEMBER _key USER true)
Q_PROPERTY(int dataVersion MEMBER _dataVersion)
Q_PROPERTY(QByteArray value MEMBER _value)
Q_PROPERTY(QVariant varValue READ value WRITE setValue STORED false)
public:
DataSyncSettingsEntry();
DataSyncSettingsEntry(QString key, const QVariant &value);
template <typename T>
DataSyncSettingsEntry(QString key, const T &value);
QString key() const;
QVariant value() const;
template <typename T>
T value() const;
void setValue(const QVariant &value);
private:
QString _key;
int _dataVersion = 0;
QByteArray _value;
};
class DataSyncSettingsViewModelPrivate;
class Q_MVVMDATASYNCCORE_EXPORT DataSyncSettingsViewModel : public QtMvvm::SettingsViewModel
{
Q_OBJECT
public:
Q_INVOKABLE explicit DataSyncSettingsViewModel(QObject *parent = nullptr);
~DataSyncSettingsViewModel() override;
QVariant loadValue(const QString &key, const QVariant &defaultValue) const override;
void saveValue(const QString &key, const QVariant &value) override;
void resetValue(const QString &key) override;
private:
QScopedPointer<DataSyncSettingsViewModelPrivate> d;
};
// ------------- Generic Implementation -------------
template<typename T>
DataSyncSettingsEntry::DataSyncSettingsEntry(QString key, const T &value) :
DataSyncSettingsEntry{std::move(key), QVariant::fromValue(value)}
{}
template<typename T>
T DataSyncSettingsEntry::value() const
{
return value().template value<T>();
}
}
Q_DECLARE_METATYPE(QtMvvm::DataSyncSettingsEntry)
#endif // QTMVVM_DATASYNCSETTINGSVIEWMODEL_H