You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
#ifndef SETTINGSSERVICE_H
|
|
#define SETTINGSSERVICE_H
|
|
|
|
#include <QString>
|
|
#include <QSharedPointer>
|
|
#include <QJsonObject>
|
|
#include <QJsonDocument>
|
|
#include <QMetaProperty>
|
|
|
|
#include <QDecDouble.hh>
|
|
#include <QDebug>
|
|
|
|
#include "data/system.h"
|
|
#include "service.h"
|
|
#include "core_global.h"
|
|
|
|
class CORESHARED_EXPORT SettingsService : public IService
|
|
{
|
|
public:
|
|
explicit SettingsService(QObject *parent = NULL);
|
|
SettingsService(const QString &pluginId, QObject *parent = NULL);
|
|
|
|
|
|
template <class T>
|
|
QSharedPointer<T> loadSettings() {
|
|
QSharedPointer<System> sys = loadSystem();
|
|
QObject *objSettings = new T();
|
|
QSharedPointer<T> settingsObj((T*)objSettings);
|
|
|
|
if (sys.isNull())
|
|
{
|
|
return settingsObj;
|
|
}
|
|
|
|
QString settingStr = sys->settings();
|
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(settingStr.toUtf8());
|
|
QJsonValue val = jsonDoc.object()["Settings"];
|
|
|
|
if (!val.isObject())
|
|
{
|
|
return settingsObj;
|
|
}
|
|
|
|
for (int i = 0; i < objSettings->metaObject()->propertyCount(); i++)
|
|
{
|
|
const char *propName = objSettings->metaObject()->property(i).name();
|
|
QJsonValue v = val.toObject()[propName];
|
|
QVariant varVal = v.toVariant();
|
|
|
|
if (objSettings->property(propName).canConvert<QDecDouble>())
|
|
{
|
|
QDecDouble dec(TO_DEC(varVal.toInt()));
|
|
varVal = QVariant::fromValue(dec);
|
|
objSettings->setProperty(propName, varVal);
|
|
continue;
|
|
}
|
|
|
|
// all other numbers are int
|
|
if (varVal.toInt() > 0)
|
|
{
|
|
objSettings->setProperty(propName, varVal.toInt());
|
|
}
|
|
else
|
|
{
|
|
objSettings->setProperty(propName, varVal);
|
|
}
|
|
}
|
|
|
|
return settingsObj;
|
|
}
|
|
|
|
template <class T>
|
|
void saveSettings(QSharedPointer<T> objSettings)
|
|
{
|
|
QObject *objSettingsQo = objSettings.data();
|
|
QJsonDocument jsonDoc;
|
|
QJsonObject jsonObj;
|
|
|
|
for (int i = 0; i < objSettingsQo->metaObject()->propertyCount(); i++)
|
|
{
|
|
const char *propName = objSettings->metaObject()->property(i).name();
|
|
QVariant val = objSettingsQo->property(propName);
|
|
if (val.canConvert<QDecDouble>())
|
|
{
|
|
int vat = FROM_DEC(val.value<QDecDouble>());
|
|
val = QVariant::fromValue(vat);
|
|
}
|
|
|
|
jsonObj[propName] = QJsonValue::fromVariant(val);
|
|
}
|
|
|
|
QJsonObject jsonSettings;
|
|
jsonSettings["Settings"] = jsonObj;
|
|
jsonDoc.setObject(jsonSettings);
|
|
|
|
saveSystem(jsonDoc);
|
|
}
|
|
|
|
private:
|
|
QString m_pluginId;
|
|
QSharedPointer<QObject> m_settings;
|
|
QSharedPointer<System> loadSystem();
|
|
void saveSystem(const QJsonDocument &doc);
|
|
};
|
|
|
|
#endif // SETTINGSSERVICE_H
|