Added support for settings
parent
2bb07716b9
commit
e569dfbc12
@ -0,0 +1,31 @@
|
|||||||
|
#include "system.h"
|
||||||
|
|
||||||
|
System::System()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int System::id() const
|
||||||
|
{
|
||||||
|
return m_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void System::setId(int id)
|
||||||
|
{
|
||||||
|
m_id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString System::pluginId() const
|
||||||
|
{
|
||||||
|
return m_pluginId;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString System::settings() const
|
||||||
|
{
|
||||||
|
return m_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
void System::setSettings(const QString &settings)
|
||||||
|
{
|
||||||
|
m_settings = settings;
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
#ifndef SYSTEM_H
|
||||||
|
#define SYSTEM_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include <odb/core.hxx>
|
||||||
|
|
||||||
|
#pragma db object
|
||||||
|
class System
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
System();
|
||||||
|
|
||||||
|
int id() const;
|
||||||
|
void setId(int id);
|
||||||
|
|
||||||
|
QString pluginId() const;
|
||||||
|
|
||||||
|
QString schemaVersion() const;
|
||||||
|
|
||||||
|
QString settings() const;
|
||||||
|
void setSettings(const QString &settings);
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend class odb::access;
|
||||||
|
|
||||||
|
#pragma db id auto
|
||||||
|
int m_id;
|
||||||
|
QString m_pluginId;
|
||||||
|
QString m_schemaVersion;
|
||||||
|
QString m_settings;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SYSTEM_H
|
@ -0,0 +1,136 @@
|
|||||||
|
#ifndef FORMBINDER_H
|
||||||
|
#define FORMBINDER_H
|
||||||
|
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QMetaMethod>
|
||||||
|
#include <QMetaProperty>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
|
#include "combodata.h"
|
||||||
|
#include "ivalidator.h"
|
||||||
|
#include "iform.h"
|
||||||
|
|
||||||
|
#include "../qdecimal/src/QDecDouble.hh"
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
class FormBinder : public IForm
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
explicit FormBinder(QWidget *parent = NULL) : IForm(parent) {}
|
||||||
|
|
||||||
|
virtual ~FormBinder() {
|
||||||
|
foreach (IValidator *val, m_validators) {
|
||||||
|
delete val;
|
||||||
|
}
|
||||||
|
m_validators.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerBinding(QWidget *widget) {
|
||||||
|
if (!m_bindWidgets.contains(widget)) {
|
||||||
|
m_bindWidgets.append(widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerBinding(QComboBox *combo, const QList<ComboData> &values) {
|
||||||
|
m_bindCombos[combo] = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerValidator(IValidator *validator) {
|
||||||
|
m_validators.append(validator);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setEntity(QSharedPointer<T> entity) {
|
||||||
|
m_entity = entity;
|
||||||
|
bindToUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSharedPointer<T> entity() {
|
||||||
|
return m_entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QSharedPointer<T> m_entity;
|
||||||
|
|
||||||
|
virtual void bindOtherToUi() {}
|
||||||
|
virtual bool bindOtherToData() { return true; }
|
||||||
|
virtual void registerCombos() {}
|
||||||
|
|
||||||
|
void bindToUi() {
|
||||||
|
registerCombos();
|
||||||
|
foreach (QWidget *widget, m_bindWidgets) {
|
||||||
|
const char* prop = widget->metaObject()->userProperty().name();
|
||||||
|
QVariant value = ((QObject*)m_entity.data())->property(widget->objectName().toStdString().c_str());
|
||||||
|
if (value.canConvert<QDecDouble>())
|
||||||
|
{
|
||||||
|
widget->setProperty(prop, value.value<QDecDouble>().toString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
widget->setProperty(prop, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (QComboBox *combo, m_bindCombos.keys()) {
|
||||||
|
int idx = 0;
|
||||||
|
QVariant field = ((QObject*)m_entity.data())->property(combo->objectName().toStdString().c_str());
|
||||||
|
|
||||||
|
combo->clear();
|
||||||
|
for (int i = 0; i < m_bindCombos[combo].size(); i++) {
|
||||||
|
ComboData data = m_bindCombos[combo][i];
|
||||||
|
combo->addItem(data.label(), data.index());
|
||||||
|
|
||||||
|
if (data.index().canConvert<QObject*>()) {
|
||||||
|
ComboItem* ci = qobject_cast<ComboItem*>(data.index().value<QObject*>());
|
||||||
|
ComboItem* ciField = qobject_cast<ComboItem*>(field.value<QObject*>());
|
||||||
|
if (ci->eq(ciField)) {
|
||||||
|
idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (field == data.index()) {
|
||||||
|
idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
combo->setCurrentIndex(idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
bindOtherToUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bindToData() {
|
||||||
|
foreach (IValidator *val, m_validators) {
|
||||||
|
if (!val->validate()) {
|
||||||
|
emit validationError(val->errMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (QWidget *widget, m_bindWidgets) {
|
||||||
|
const char* prop = widget->metaObject()->userProperty().name();
|
||||||
|
|
||||||
|
QVariant val = widget->property(prop);
|
||||||
|
if (((QObject*)m_entity.data())->property(widget->objectName().toStdString().c_str()).canConvert<QDecDouble>())
|
||||||
|
{
|
||||||
|
QDecDouble dec(val.toDouble());
|
||||||
|
val = QVariant::fromValue(dec);
|
||||||
|
}
|
||||||
|
((QObject*)m_entity.data())->setProperty(widget->objectName().toStdString().c_str(), val);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (QComboBox *combo, m_bindCombos.keys()) {
|
||||||
|
((QObject*)m_entity.data())->setProperty(combo->objectName().toStdString().c_str(), combo->currentData());
|
||||||
|
}
|
||||||
|
|
||||||
|
return bindOtherToData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<QWidget*> m_bindWidgets;
|
||||||
|
QHash<QComboBox*, QList<ComboData> > m_bindCombos;
|
||||||
|
QList<IValidator*> m_validators;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FORMBINDER_H
|
@ -0,0 +1,96 @@
|
|||||||
|
#include "globalsettings.h"
|
||||||
|
|
||||||
|
GlobalSettings::GlobalSettings(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::firmName() const
|
||||||
|
{
|
||||||
|
return m_firmName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setFirmName(const QString &firmName)
|
||||||
|
{
|
||||||
|
m_firmName = firmName;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::street() const
|
||||||
|
{
|
||||||
|
return m_street;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setStreet(const QString &street)
|
||||||
|
{
|
||||||
|
m_street = street;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::houseNumber() const
|
||||||
|
{
|
||||||
|
return m_houseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setHouseNumber(const QString &houseNumber)
|
||||||
|
{
|
||||||
|
m_houseNumber = houseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::zipCode() const
|
||||||
|
{
|
||||||
|
return m_zipCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setZipCode(const QString &zipCode)
|
||||||
|
{
|
||||||
|
m_zipCode = zipCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::city() const
|
||||||
|
{
|
||||||
|
return m_city;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setCity(const QString &city)
|
||||||
|
{
|
||||||
|
m_city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GlobalSettings::ic() const
|
||||||
|
{
|
||||||
|
return m_ic;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setIc(int IC)
|
||||||
|
{
|
||||||
|
m_ic = IC;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::dic() const
|
||||||
|
{
|
||||||
|
return m_dic;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setDic(const QString &dic)
|
||||||
|
{
|
||||||
|
m_dic = dic;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GlobalSettings::vatPayer() const
|
||||||
|
{
|
||||||
|
return m_vatPayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setVatPayer(bool vatPayer)
|
||||||
|
{
|
||||||
|
m_vatPayer = vatPayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString GlobalSettings::logoPath() const
|
||||||
|
{
|
||||||
|
return m_logoPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettings::setLogoPath(const QString &logoPath)
|
||||||
|
{
|
||||||
|
m_logoPath = logoPath;
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
#ifndef GLOBALSETTINGS_H
|
||||||
|
#define GLOBALSETTINGS_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class GlobalSettings : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(QString firmName READ firmName WRITE setFirmName)
|
||||||
|
Q_PROPERTY(QString street READ street WRITE setStreet)
|
||||||
|
Q_PROPERTY(QString houseNumber READ houseNumber WRITE setHouseNumber)
|
||||||
|
Q_PROPERTY(QString zipCode READ zipCode WRITE setZipCode)
|
||||||
|
Q_PROPERTY(QString city READ city WRITE setCity)
|
||||||
|
Q_PROPERTY(int ic READ ic WRITE setIc)
|
||||||
|
Q_PROPERTY(QString dic READ dic WRITE setDic)
|
||||||
|
Q_PROPERTY(bool vatPayer READ vatPayer WRITE setVatPayer)
|
||||||
|
Q_PROPERTY(QString logoPath READ logoPath WRITE setLogoPath)
|
||||||
|
public:
|
||||||
|
explicit GlobalSettings(QObject *parent = 0);
|
||||||
|
|
||||||
|
QString firmName() const;
|
||||||
|
void setFirmName(const QString &firmName);
|
||||||
|
|
||||||
|
QString street() const;
|
||||||
|
void setStreet(const QString &street);
|
||||||
|
|
||||||
|
QString houseNumber() const;
|
||||||
|
void setHouseNumber(const QString &houseNumber);
|
||||||
|
|
||||||
|
QString zipCode() const;
|
||||||
|
void setZipCode(const QString &zipCode);
|
||||||
|
|
||||||
|
QString city() const;
|
||||||
|
void setCity(const QString &city);
|
||||||
|
|
||||||
|
int ic() const;
|
||||||
|
void setIc(int ic);
|
||||||
|
|
||||||
|
QString dic() const;
|
||||||
|
void setDic(const QString &dic);
|
||||||
|
|
||||||
|
bool vatPayer() const;
|
||||||
|
void setVatPayer(bool vatPayer);
|
||||||
|
|
||||||
|
QString logoPath() const;
|
||||||
|
void setLogoPath(const QString &logoPath);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_firmName;
|
||||||
|
QString m_street;
|
||||||
|
QString m_houseNumber;
|
||||||
|
QString m_zipCode;
|
||||||
|
QString m_city;
|
||||||
|
int m_ic;
|
||||||
|
QString m_dic;
|
||||||
|
bool m_vatPayer;
|
||||||
|
QString m_logoPath;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GLOBALSETTINGS_H
|
@ -0,0 +1,42 @@
|
|||||||
|
#include "globalsettingsform.h"
|
||||||
|
#include "ui_globalsettingsform.h"
|
||||||
|
|
||||||
|
#include "globalsettings.h"
|
||||||
|
#include "../settingsservice.h"
|
||||||
|
|
||||||
|
GlobalSettingsForm::GlobalSettingsForm(QWidget *parent) :
|
||||||
|
FormBinder<GlobalSettings>(parent),
|
||||||
|
ui(new Ui::GlobalSettingsForm)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
registerBinding(ui->firmName);
|
||||||
|
registerBinding(ui->street);
|
||||||
|
registerBinding(ui->houseNumber);
|
||||||
|
registerBinding(ui->zipCode);
|
||||||
|
registerBinding(ui->city);
|
||||||
|
registerBinding(ui->ic);
|
||||||
|
registerBinding(ui->vatPayer);
|
||||||
|
registerBinding(ui->dic);
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalSettingsForm::~GlobalSettingsForm()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GlobalSettingsForm::saveRecord()
|
||||||
|
{
|
||||||
|
bindToData();
|
||||||
|
SettingsService srv("CORE");
|
||||||
|
srv.saveSettings(entity());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalSettingsForm::loadEntity()
|
||||||
|
{
|
||||||
|
SettingsService srv("CORE");
|
||||||
|
QSharedPointer<GlobalSettings> settings = srv.loadSettings<GlobalSettings>();
|
||||||
|
setEntity(settings);
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef GLOBALSETTINGSFORM_H
|
||||||
|
#define GLOBALSETTINGSFORM_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include "../formbinder.h"
|
||||||
|
#include "globalsettings.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class GlobalSettingsForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
class GlobalSettingsForm : public FormBinder<GlobalSettings>
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit GlobalSettingsForm(QWidget *parent = 0);
|
||||||
|
~GlobalSettingsForm();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::GlobalSettingsForm *ui;
|
||||||
|
|
||||||
|
// IForm interface
|
||||||
|
public slots:
|
||||||
|
bool saveRecord() override;
|
||||||
|
|
||||||
|
// IForm interface
|
||||||
|
public:
|
||||||
|
void loadEntity() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GLOBALSETTINGSFORM_H
|
@ -0,0 +1,139 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>GlobalSettingsForm</class>
|
||||||
|
<widget class="QWidget" name="GlobalSettingsForm">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>422</width>
|
||||||
|
<height>323</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
|
<property name="title">
|
||||||
|
<string>Company info</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>IC</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="ic"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="text">
|
||||||
|
<string>VAT number</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="dic"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="vatPayer">
|
||||||
|
<property name="text">
|
||||||
|
<string>VAT payer</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QGroupBox" name="groupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Contact</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Firm Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLineEdit" name="firmName"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Street</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="street"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>House Number</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLineEdit" name="houseNumber"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>City</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLineEdit" name="city"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>ZIP code</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="zipCode"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
|
<property name="title">
|
||||||
|
<string>Logo</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Logo</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Select file</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -0,0 +1,56 @@
|
|||||||
|
#include "settingsform.h"
|
||||||
|
#include "ui_settingsform.h"
|
||||||
|
|
||||||
|
#include "settingsservice.h"
|
||||||
|
#include "context.h"
|
||||||
|
#include "iplugin.h"
|
||||||
|
#include "iform.h"
|
||||||
|
|
||||||
|
SettingsForm::SettingsForm(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::SettingsForm)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
foreach (IPlugin *plugin, Context::instance().plugins()) {
|
||||||
|
if (plugin->settingsUi() != NULL)
|
||||||
|
{
|
||||||
|
SettingsService srv(plugin->pluginId());
|
||||||
|
IForm *tab = qobject_cast<IForm*>(plugin->settingsUi());
|
||||||
|
|
||||||
|
if (tab != NULL)
|
||||||
|
{
|
||||||
|
tab->loadEntity();
|
||||||
|
ui->tabWidget->addTab(tab, QIcon(), plugin->settingsTabLabel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsForm::~SettingsForm()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsForm::on_buttonBox_accepted()
|
||||||
|
{
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsForm::accept()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ui->tabWidget->count(); i++)
|
||||||
|
{
|
||||||
|
IForm *tab = qobject_cast<IForm*>(ui->tabWidget->widget(i));
|
||||||
|
if (tab != NULL)
|
||||||
|
{
|
||||||
|
tab->saveRecord();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QDialog::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsForm::on_buttonBox_rejected()
|
||||||
|
{
|
||||||
|
reject();
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
#ifndef SETTINGSFORM_H
|
||||||
|
#define SETTINGSFORM_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class SettingsForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SettingsForm : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit SettingsForm(QWidget *parent = 0);
|
||||||
|
~SettingsForm();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_buttonBox_accepted();
|
||||||
|
|
||||||
|
void on_buttonBox_rejected();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::SettingsForm *ui;
|
||||||
|
|
||||||
|
// QDialog interface
|
||||||
|
public slots:
|
||||||
|
void accept() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SETTINGSFORM_H
|
@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>SettingsForm</class>
|
||||||
|
<widget class="QDialog" name="SettingsForm">
|
||||||
|
<property name="windowModality">
|
||||||
|
<enum>Qt::ApplicationModal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<height>600</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Settings</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="tabPosition">
|
||||||
|
<enum>QTabWidget::North</enum>
|
||||||
|
</property>
|
||||||
|
<property name="tabShape">
|
||||||
|
<enum>QTabWidget::Rounded</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>-1</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -0,0 +1,47 @@
|
|||||||
|
#include "settingsservice.h"
|
||||||
|
|
||||||
|
#include "core-odb.hxx"
|
||||||
|
|
||||||
|
#include <odb/core.hxx>
|
||||||
|
#include <odb/result.hxx>
|
||||||
|
|
||||||
|
SettingsService::SettingsService(QObject *parent)
|
||||||
|
:IService(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsService::SettingsService(const QString &pluginId, QObject *parent)
|
||||||
|
:IService(parent)
|
||||||
|
{
|
||||||
|
m_pluginId = pluginId;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSharedPointer<System> SettingsService::loadSystem()
|
||||||
|
{
|
||||||
|
Service<System> srv;
|
||||||
|
QList<QSharedPointer<System> > sysObj = srv.all("pluginId = '" + m_pluginId + "'");
|
||||||
|
|
||||||
|
if (sysObj.isEmpty())
|
||||||
|
{
|
||||||
|
emit dbErrorUpdate("Error loading sys object");
|
||||||
|
return QSharedPointer<System>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return sysObj[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsService::saveSystem(const QJsonDocument &doc)
|
||||||
|
{
|
||||||
|
QSharedPointer<System> sysObj = loadSystem();
|
||||||
|
|
||||||
|
if (sysObj.isNull())
|
||||||
|
{
|
||||||
|
emit dbErrorUpdate("Error loading sys object");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sysObj->setSettings(QString(doc.toJson()));
|
||||||
|
|
||||||
|
Service<System> srv;
|
||||||
|
srv.update(sysObj);
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
#ifndef SETTINGSSERVICE_H
|
||||||
|
#define SETTINGSSERVICE_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <QSharedPointer>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QMetaProperty>
|
||||||
|
|
||||||
|
#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();
|
||||||
|
QVariant varVal = val.toObject()[propName].toVariant();
|
||||||
|
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();
|
||||||
|
jsonObj[propName] = QJsonValue::fromVariant(objSettingsQo->property(propName));
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
@ -1,11 +1,11 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
SUBDIRS += \
|
SUBDIRS += \
|
||||||
|
qdecimal \
|
||||||
core \
|
core \
|
||||||
application \
|
application \
|
||||||
accommodation \
|
accommodation \
|
||||||
qdecimal \
|
services
|
||||||
services \
|
#commodity \
|
||||||
commodity \
|
#addressbook
|
||||||
addressbook
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue