Files

107 lines
2.9 KiB
C++
Raw Permalink Normal View History

2016-02-24 22:46:36 +01:00
#ifndef SETTINGSSERVICE_H
#define SETTINGSSERVICE_H
#include <QString>
#include <QSharedPointer>
#include <QJsonObject>
#include <QJsonDocument>
#include <QMetaProperty>
2016-05-27 16:47:40 +02:00
#include <QDecDouble.hh>
#include <QDebug>
2016-05-27 16:47:40 +02:00
2016-02-24 22:46:36 +01:00
#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++)
{
2016-02-26 13:46:04 +01:00
const char *propName = objSettings->metaObject()->property(i).name();
QJsonValue v = val.toObject()[propName];
QVariant varVal = v.toVariant();
2016-05-27 16:47:40 +02:00
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);
2016-05-27 16:47:40 +02:00
}
2016-02-24 22:46:36 +01:00
}
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();
2016-05-27 16:47:40 +02:00
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);
2016-02-24 22:46:36 +01:00
}
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