This commit is contained in:
2016-02-13 21:52:33 +01:00
19 changed files with 337 additions and 9 deletions
+38
View File
@@ -9,6 +9,7 @@
#include <QDebug>
#include <QVariant>
#include <QMessageBox>
#include <QComboBox>
#include "iform.h"
#include "service.h"
@@ -16,6 +17,7 @@
#include "iservice.h"
#include "iplugin.h"
#include "combodata.h"
template <class T>
class AutoForm : public IForm
@@ -53,6 +55,10 @@ public:
}
}
void registerBinding(QComboBox *combo, const QList<ComboData> &values) {
m_bindCombos[combo] = values;
}
void registerValidator(IValidator *validator) {
m_validators.append(validator);
}
@@ -60,18 +66,46 @@ public:
protected:
virtual void bindOtherToUi() {}
virtual bool bindOtherToData() { return true; }
virtual void registerCombos() {}
private:
QSharedPointer<T> m_entity;
QList<QWidget*> m_bindWidgets;
QList<IValidator*> m_validators;
QHash<QComboBox*, QList<ComboData> > m_bindCombos;
bool m_newRec;
void bindToUi() {
registerCombos();
foreach (QWidget *widget, m_bindWidgets) {
const char* prop = widget->metaObject()->userProperty().name();
widget->setProperty(prop, ((QObject*)m_entity.data())->property(widget->objectName().toStdString().c_str()));
}
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();
}
@@ -88,6 +122,10 @@ private:
((QObject*)m_entity.data())->setProperty(widget->objectName().toStdString().c_str(), widget->property(prop));
}
foreach (QComboBox *combo, m_bindCombos.keys()) {
((QObject*)m_entity.data())->setProperty(combo->objectName().toStdString().c_str(), combo->currentData());
}
return bindOtherToData();
}
+8 -1
View File
@@ -10,6 +10,7 @@
#include "core_global.h"
#include "exprevaluator.h"
#include "itablemodel.h"
#include "data/comboitem.h"
template<class T>
class AutoTableModel : public ITableModel
@@ -51,7 +52,13 @@ public:
QSharedPointer<T> entity = m_list.at(index.row());
QObject *rawEntity = (QObject*)entity.data();
return rawEntity->property(rawEntity->metaObject()->property(index.column() + 1).name());
QVariant dispData = rawEntity->property(rawEntity->metaObject()->property(index.column() + 1).name());
if (dispData.canConvert<QObject*>() && qobject_cast<ComboItem*>(dispData.value<QObject*>()))
{
return qobject_cast<ComboItem*>(dispData.value<QObject*>())->toString();
}
return dispData;
}
return QVariant::Invalid;
+42
View File
@@ -0,0 +1,42 @@
#include "combodata.h"
ComboData::ComboData(const QVariant &index, const QString &label)
{
m_index = index;
m_label = label;
}
ComboData::ComboData(const QSharedPointer<QObject> &index)
{
m_index = QVariant::fromValue(index);
ComboItem *ci = qobject_cast<ComboItem*>(index.data());
if (ci != NULL)
{
m_label = ci->toString();
}
}
ComboData::~ComboData()
{
}
QVariant ComboData::index() const
{
return m_index;
}
void ComboData::setIndex(const QVariant &index)
{
m_index = index;
}
QString ComboData::label() const
{
return m_label;
}
void ComboData::setLabel(const QString &label)
{
m_label = label;
}
+28
View File
@@ -0,0 +1,28 @@
#ifndef COMBODATA_H
#define COMBODATA_H
#include <QVariant>
#include <QSharedDataPointer>
#include "core_global.h"
#include "data/comboitem.h"
class CORESHARED_EXPORT ComboData
{
public:
ComboData(const QVariant &index, const QString &label);
ComboData(const QSharedPointer<QObject> &index);
~ComboData();
QVariant index() const;
void setIndex(const QVariant &index);
QString label() const;
void setLabel(const QString &label);
private:
QVariant m_index;
QString m_label;
};
#endif // COMBODATA_H
+3 -3
View File
@@ -49,7 +49,7 @@ void Context::loadPlugins()
m_plugins.append(new Users);
m_plugins.append(new Roles);
QDir pluginsDir(qApp->applicationDirPath() + "/../plugins");
QDir pluginsDir(qApp->applicationDirPath() + "/../../plugins");
foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.so" << "*.dll")) {
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
@@ -96,10 +96,10 @@ void Context::destroy()
m_dbOpened = false;
}
if (m_settings != NULL && m_settings->parent() == NULL)
/*if (m_settings != NULL && m_settings->parent() == NULL)
{
delete m_settings;
}
}*/
foreach (IPlugin *plugin, m_plugins)
{
+1
View File
@@ -8,5 +8,6 @@
#include "transaction.h"
#include "gridform.h"
#include "permissionservice.h"
#include "combodata.h"
#endif // CORE_H
+8 -2
View File
@@ -43,7 +43,9 @@ SOURCES += \
savefilterdialog.cpp \
filterdialog.cpp \
itablemodel.cpp \
iservice.cpp
iservice.cpp \
combodata.cpp \
data/comboitem.cpp
HEADERS += core.h\
core_global.h \
@@ -84,7 +86,9 @@ HEADERS += core.h\
filterdialog.h \
itablemodel.h \
data/core_global.h \
iservice.h
iservice.h \
combodata.h \
data/comboitem.h
unix {
target.path = /usr/lib
@@ -121,3 +125,5 @@ FORMS += \
OTHER_FILES += \
users/metaData.json \
roles/metaData.json
TRANSLATIONS = core_cz.ts
+11
View File
@@ -0,0 +1,11 @@
#include "comboitem.h"
ComboItem::ComboItem(QObject *parent)
:QObject(parent)
{
}
ComboItem::~ComboItem()
{
}
+21
View File
@@ -0,0 +1,21 @@
#ifndef COMBOITEM_H
#define COMBOITEM_H
#include "core_global.h"
#include <QSharedPointer>
#include <QVariant>
#include <QObject>
class CORESHARED_EXPORT ComboItem : public QObject
{
Q_OBJECT
public:
explicit ComboItem(QObject *parent = NULL);
~ComboItem();
virtual bool eq(ComboItem *other) = 0;
virtual QString toString() = 0;
};
#endif // COMBOITEM_H