Zdenek Jonak 9 years ago
commit 580b623aca

@ -17,7 +17,8 @@ SOURCES += accommodation.cpp \
accommodationservice.cpp \ accommodationservice.cpp \
tablemodel.cpp \ tablemodel.cpp \
acform.cpp \ acform.cpp \
accgrid.cpp accgrid.cpp \
data/address.cpp
HEADERS += accommodation.h\ HEADERS += accommodation.h\
accommodation_global.h \ accommodation_global.h \
@ -25,7 +26,9 @@ HEADERS += accommodation.h\
accommodationservice.h \ accommodationservice.h \
tablemodel.h \ tablemodel.h \
acform.h \ acform.h \
accgrid.h accgrid.h \
data/address.h \
data/accommodation-data.h
unix { unix {
target.path = /usr/lib target.path = /usr/lib
@ -53,7 +56,7 @@ OTHER_FILES += \
FORMS += \ FORMS += \
acform.ui acform.ui
ODB_FILES = accommodation/data/person.h ODB_FILES = accommodation/data/accommodation-data.h
H_DIR = $$PWD/data/*.h H_DIR = $$PWD/data/*.h
include(../odb.pri) include(../odb.pri)

@ -1,5 +1,8 @@
#include "acform.h" #include "acform.h"
#include "ui_acform.h" #include "ui_acform.h"
#include <QList>
#include "accommodation-odb.hxx"
AcForm::AcForm(QWidget *parent) : AcForm::AcForm(QWidget *parent) :
AutoForm<Person>(parent), AutoForm<Person>(parent),
@ -15,3 +18,14 @@ AcForm::~AcForm()
{ {
delete ui; delete ui;
} }
void AcForm::registerCombos()
{
QList<ComboData> cbData;
Service<Address> srv;
foreach (QSharedPointer<Address> adr, srv.all()) {
cbData.append(ComboData(adr));
}
registerBinding(ui->address, cbData);
}

@ -5,6 +5,7 @@
#include <autoform.h> #include <autoform.h>
#include "data/person.h" #include "data/person.h"
#include "accommodation-odb.hxx"
namespace Ui { namespace Ui {
class AcForm; class AcForm;
@ -20,6 +21,10 @@ public:
private: private:
Ui::AcForm *ui; Ui::AcForm *ui;
// AutoForm interface
protected:
virtual void registerCombos();
}; };
#endif // ACFORM_H #endif // ACFORM_H

@ -46,6 +46,16 @@
<string>PushButton</string> <string>PushButton</string>
</property> </property>
</widget> </widget>
<widget class="QComboBox" name="address">
<property name="geometry">
<rect>
<x>110</x>
<y>170</y>
<width>191</width>
<height>22</height>
</rect>
</property>
</widget>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>

@ -0,0 +1,8 @@
#ifndef ACCOMMODATIONDATA_H
#define ACCOMMODATIONDATA_H
#include "address.h"
#include "person.h"
#endif // ACCOMMODATIONDATA_H

@ -0,0 +1,58 @@
#include "address.h"
Address::Address(QObject *parent) : ComboItem(parent)
{
}
Address::~Address()
{
}
QString Address::city() const
{
return m_city;
}
void Address::setCity(const QString &city)
{
m_city = city;
}
QString Address::street() const
{
return m_street;
}
void Address::setStreet(const QString &street)
{
m_street = street;
}
QString Address::houseNumber() const
{
return m_houseNumber;
}
void Address::setHouseNumber(const QString &houseNumber)
{
m_houseNumber = houseNumber;
}
int Address::id() const
{
return m_id;
}
void Address::setId(int id)
{
m_id = id;
}
bool Address::eq(ComboItem *other)
{
Address *addr = qobject_cast<Address*>(other);
return addr != NULL && m_id == addr->id();
}
QString Address::toString()
{
return m_street + ", " + m_houseNumber + ", " + m_city;
}

@ -0,0 +1,55 @@
#ifndef ADDRESS_H
#define ADDRESS_H
#include <QObject>
#include <QString>
#include <data/comboitem.h>
#include <odb/core.hxx>
#pragma db object
class Address : public ComboItem
{
Q_OBJECT
Q_PROPERTY(QString city READ city WRITE setCity)
Q_PROPERTY(QString street READ street WRITE setStreet)
Q_PROPERTY(QString houseNumber READ houseNumber WRITE setHouseNumber)
public:
explicit Address(QObject *parent = 0);
~Address();
QString city() const;
void setCity(const QString &city);
QString street() const;
void setStreet(const QString &street);
QString houseNumber() const;
void setHouseNumber(const QString &houseNumber);
int id() const;
void setId(int id);
private:
friend class odb::access;
#pragma db id auto
int m_id;
QString m_city;
QString m_street;
QString m_houseNumber;
signals:
public slots:
// ComboItem interface
public:
virtual bool eq(ComboItem *other);
virtual QString toString();
};
#endif // ADDRESS_H

@ -1,16 +1,17 @@
#include <data/comboitem.h>
#include "person.h" #include "person.h"
Person::Person() Person::Person()
{ {
} }
int Person::getId() const int Person::id() const
{ {
return id; return m_id;
} }
void Person::setId(int value) void Person::setId(int value)
{ {
id = value; m_id = value;
} }
QString Person::getFirstName() const QString Person::getFirstName() const
{ {
@ -30,6 +31,19 @@ void Person::setLastName(const QString &value)
{ {
lastName = value; lastName = value;
} }
QSharedPointer<QObject> Person::address() const
{
return m_address;
}
void Person::setAddress(const QSharedPointer<QObject> &address)
{
if (qobject_cast<Address*>(address.data()) != NULL)
{
m_address = qSharedPointerDynamicCast<Address, QObject>(address);
}
}

@ -4,6 +4,8 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include "address.h"
#include <odb/core.hxx> #include <odb/core.hxx>
#pragma db object #pragma db object
@ -13,10 +15,11 @@ class Person : public QObject
Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName) Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName)
Q_PROPERTY(QString lastName READ getLastName WRITE setLastName) Q_PROPERTY(QString lastName READ getLastName WRITE setLastName)
Q_PROPERTY(QSharedPointer<QObject> address READ address WRITE setAddress)
public: public:
Person(); Person();
int getId() const; int id() const;
void setId(int value); void setId(int value);
QString getFirstName() const; QString getFirstName() const;
@ -25,12 +28,16 @@ public:
QString getLastName() const; QString getLastName() const;
void setLastName(const QString &value); void setLastName(const QString &value);
QSharedPointer<QObject> address() const;
void setAddress(const QSharedPointer<QObject> &address);
private: private:
friend class odb::access; friend class odb::access;
#pragma db id auto #pragma db id auto
int id; int m_id;
QString firstName; QString firstName;
QString lastName; QString lastName;
QSharedPointer<Address> m_address;
}; };

@ -8,11 +8,16 @@
#include <QMetaMethod> #include <QMetaMethod>
#include <QDebug> #include <QDebug>
#include <QVariant> #include <QVariant>
#include <QMessageBox>
#include <QComboBox>
#include "iform.h" #include "iform.h"
#include "service.h" #include "service.h"
#include "ivalidator.h" #include "ivalidator.h"
#include "iservice.h"
#include "iplugin.h"
#include "combodata.h"
template <class T> template <class T>
class AutoForm : public IForm class AutoForm : public IForm
@ -20,6 +25,8 @@ class AutoForm : public IForm
public: public:
explicit AutoForm(QWidget *parent = 0) : IForm(parent) { explicit AutoForm(QWidget *parent = 0) : IForm(parent) {
m_newRec = false; m_newRec = false;
m_serviceConnected = false;
m_saved = false;
} }
virtual ~AutoForm() { virtual ~AutoForm() {
@ -48,6 +55,10 @@ public:
} }
} }
void registerBinding(QComboBox *combo, const QList<ComboData> &values) {
m_bindCombos[combo] = values;
}
void registerValidator(IValidator *validator) { void registerValidator(IValidator *validator) {
m_validators.append(validator); m_validators.append(validator);
} }
@ -55,18 +66,46 @@ public:
protected: protected:
virtual void bindOtherToUi() {} virtual void bindOtherToUi() {}
virtual bool bindOtherToData() { return true; } virtual bool bindOtherToData() { return true; }
virtual void registerCombos() {}
private: private:
QSharedPointer<T> m_entity; QSharedPointer<T> m_entity;
QList<QWidget*> m_bindWidgets; QList<QWidget*> m_bindWidgets;
QList<IValidator*> m_validators; QList<IValidator*> m_validators;
QHash<QComboBox*, QList<ComboData> > m_bindCombos;
bool m_newRec; bool m_newRec;
void bindToUi() { void bindToUi() {
registerCombos();
foreach (QWidget *widget, m_bindWidgets) { foreach (QWidget *widget, m_bindWidgets) {
const char* prop = widget->metaObject()->userProperty().name(); const char* prop = widget->metaObject()->userProperty().name();
widget->setProperty(prop, ((QObject*)m_entity.data())->property(widget->objectName().toStdString().c_str())); 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(); bindOtherToUi();
} }
@ -83,6 +122,10 @@ private:
((QObject*)m_entity.data())->setProperty(widget->objectName().toStdString().c_str(), widget->property(prop)); ((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(); return bindOtherToData();
} }
@ -93,14 +136,54 @@ public slots:
return false; return false;
} }
if (!m_serviceConnected)
{
connect(service(), &IService::dbError, [this](QString msg) {
QMessageBox::critical(this, tr("Database error"), tr(msg.toStdString().c_str()));
m_saved = false;
});
connect(service(), &IService::dataChanged, [this]() {
m_saved = true;
});
m_serviceConnected = true;
}
if (m_newRec) { if (m_newRec) {
service()->save(entity());
if (m_saved)
{
emit recordAdded(); emit recordAdded();
}
} else { } else {
service()->update(entity());
if (m_saved)
{
emit recordUpdated(); emit recordUpdated();
} }
}
return m_saved;
}
private:
Service<T> *service() {
IPlugin *plugin = Context::instance().plugin(pluginId());
if (plugin == NULL) {
Q_ASSERT(false);
return NULL;
}
return true; Service<T> *service = plugin->service<T>();
if (service == NULL) {
Q_ASSERT(false);
return NULL;
} }
return service;
}
bool m_serviceConnected;
bool m_saved;
}; };
#endif // AUTOFORM_H #endif // AUTOFORM_H

@ -10,6 +10,7 @@
#include "core_global.h" #include "core_global.h"
#include "exprevaluator.h" #include "exprevaluator.h"
#include "itablemodel.h" #include "itablemodel.h"
#include "data/comboitem.h"
template<class T> template<class T>
class AutoTableModel : public ITableModel class AutoTableModel : public ITableModel
@ -51,7 +52,13 @@ public:
QSharedPointer<T> entity = m_list.at(index.row()); QSharedPointer<T> entity = m_list.at(index.row());
QObject *rawEntity = (QObject*)entity.data(); 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; return QVariant::Invalid;

@ -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;
}

@ -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

@ -49,7 +49,7 @@ void Context::loadPlugins()
m_plugins.append(new Users); m_plugins.append(new Users);
m_plugins.append(new Roles); m_plugins.append(new Roles);
QDir pluginsDir(qApp->applicationDirPath() + "/../plugins"); QDir pluginsDir(qApp->applicationDirPath() + "/../../plugins");
foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.so" << "*.dll")) { foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.so" << "*.dll")) {
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
@ -96,10 +96,10 @@ void Context::destroy()
m_dbOpened = false; m_dbOpened = false;
} }
if (m_settings != NULL && m_settings->parent() == NULL) /*if (m_settings != NULL && m_settings->parent() == NULL)
{ {
delete m_settings; delete m_settings;
} }*/
foreach (IPlugin *plugin, m_plugins) foreach (IPlugin *plugin, m_plugins)
{ {
@ -130,6 +130,11 @@ void Context::setCurrentUser(const QSharedPointer<User> &currentUser)
m_currentUser = currentUser; m_currentUser = currentUser;
} }
odb::session &Context::session()
{
return m_session;
}
void Context::checkDb(const QString &path) void Context::checkDb(const QString &path)
{ {
{ {

@ -37,6 +37,8 @@ public:
QSharedPointer<User> currentUser() const; QSharedPointer<User> currentUser() const;
void setCurrentUser(const QSharedPointer<User> &currentUser); void setCurrentUser(const QSharedPointer<User> &currentUser);
odb::session &session();
private: private:
Context(); Context();
QList<IPlugin*> m_plugins; QList<IPlugin*> m_plugins;

@ -8,5 +8,6 @@
#include "transaction.h" #include "transaction.h"
#include "gridform.h" #include "gridform.h"
#include "permissionservice.h" #include "permissionservice.h"
#include "combodata.h"
#endif // CORE_H #endif // CORE_H

@ -43,7 +43,9 @@ SOURCES += \
savefilterdialog.cpp \ savefilterdialog.cpp \
filterdialog.cpp \ filterdialog.cpp \
itablemodel.cpp \ itablemodel.cpp \
iservice.cpp iservice.cpp \
combodata.cpp \
data/comboitem.cpp
HEADERS += core.h\ HEADERS += core.h\
core_global.h \ core_global.h \
@ -84,7 +86,9 @@ HEADERS += core.h\
filterdialog.h \ filterdialog.h \
itablemodel.h \ itablemodel.h \
data/core_global.h \ data/core_global.h \
iservice.h iservice.h \
combodata.h \
data/comboitem.h
unix { unix {
target.path = /usr/lib target.path = /usr/lib
@ -121,3 +125,5 @@ FORMS += \
OTHER_FILES += \ OTHER_FILES += \
users/metaData.json \ users/metaData.json \
roles/metaData.json roles/metaData.json
TRANSLATIONS = core_cz.ts

@ -0,0 +1,11 @@
#include "comboitem.h"
ComboItem::ComboItem(QObject *parent)
:QObject(parent)
{
}
ComboItem::~ComboItem()
{
}

@ -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

@ -39,3 +39,9 @@ void FormDialog::accept()
QDialog::accept(); QDialog::accept();
} }
} }
void FormDialog::reject()
{
m_form->refresh();
QDialog::reject();
}

@ -31,6 +31,10 @@ private slots:
// QDialog interface // QDialog interface
public slots: public slots:
void accept(); void accept();
// QDialog interface
public slots:
void reject() override;
}; };
#endif // FORMDIALOG_H #endif // FORMDIALOG_H

@ -10,8 +10,8 @@
#include "autotablemodel.h" #include "autotablemodel.h"
#include "context.h" #include "context.h"
#include "iplugin.h" #include "iplugin.h"
#include "igridform.h" #include "igridform.h"
#include "iservice.h"
template<class T> template<class T>
class GridForm : public IGridForm class GridForm : public IGridForm
@ -21,13 +21,14 @@ public:
explicit GridForm(QWidget *parent = 0) : explicit GridForm(QWidget *parent = 0) :
IGridForm(parent) IGridForm(parent)
{ {
m_form = NULL; m_serviceConnected = false;
m_tableModel = NULL; m_tableModel = NULL;
m_formHandler = new DefaultFormHandler(); m_formHandler = new DefaultFormHandler();
m_filterUi = new FilterUi(this, new T); m_filterUi = new FilterUi(this, new T);
filterWidget()->layout()->addWidget(m_filterUi); filterWidget()->layout()->addWidget(m_filterUi);
} }
virtual ~GridForm() virtual ~GridForm()
{ {
if (m_form != NULL && m_form->parent() == NULL) if (m_form != NULL && m_form->parent() == NULL)
@ -43,20 +44,26 @@ public:
delete m_formHandler; delete m_formHandler;
} }
void setForm(AutoForm<T> *form) { void setForm(AutoForm<T> *aForm) {
Q_ASSERT(m_form == NULL); Q_ASSERT(m_form == NULL);
m_form = form; m_form = aForm;
connect(m_form, &IForm::recordAdded, [this](){ connect(m_form, &IForm::recordAdded, [this](){
service()->save(m_form->entity()); //service()->save(form()->entity());
m_tableModel->addRow(m_form->entity()); m_tableModel->addRow(form()->entity());
emit dataChanged(); emit dataChanged();
}); });
connect(m_form, &IForm::recordUpdated, [this](){ connect(m_form, &IForm::recordUpdated, [this](){
service()->update(m_form->entity()); //service()->update(form()->entity());
emit dataChanged(); emit dataChanged();
}); });
connect(m_form, &IForm::refreshEntity, [this](){
if (m_tableModel != NULL) {
m_tableModel->setItemToIndex(tableView()->currentIndex(),
service()->reload(m_tableModel->itemFromIndex(tableView()->currentIndex())->id()));
}
});
} }
void setTableModel(AutoTableModel<T> *tableModel) { void setTableModel(AutoTableModel<T> *tableModel) {
@ -79,6 +86,8 @@ public slots:
return; return;
} }
connectService();
m_tableModel->setData(service()->all()); m_tableModel->setData(service()->all());
tableView()->setModel(m_tableModel); tableView()->setModel(m_tableModel);
@ -93,7 +102,6 @@ public slots:
} }
private: private:
AutoForm<T> *m_form;
AutoTableModel<T> *m_tableModel; AutoTableModel<T> *m_tableModel;
IFormHandler *m_formHandler; IFormHandler *m_formHandler;
@ -113,6 +121,26 @@ private:
return service; return service;
} }
AutoForm<T> *form() {
return (AutoForm<T>*)m_form;
}
void connectService() {
if (!m_serviceConnected)
{
connect(service(), &IService::dbErrorRead, [this](QString msg) {
QMessageBox::critical(this, tr("Database error"), tr(msg.toStdString().c_str()));
});
connect(service(), &IService::dbErrorDelete, [this](QString msg) {
QMessageBox::critical(this, tr("Database error"), tr(msg.toStdString().c_str()));
});
m_serviceConnected = true;
}
}
bool m_serviceConnected;
// IGridForm interface // IGridForm interface
protected: protected:
void handleNewRecord() override void handleNewRecord() override
@ -123,8 +151,8 @@ protected:
return; return;
} }
m_form->setEntity(QSharedPointer<T>(new T())); form()->setEntity(QSharedPointer<T>(new T()));
m_form->setNewRec(true); form()->setNewRec(true);
m_formHandler->showForm(m_form); m_formHandler->showForm(m_form);
} }
@ -136,13 +164,14 @@ protected:
return; return;
} }
m_form->setEntity(m_tableModel->itemFromIndex(tableView()->currentIndex())); form()->setEntity(m_tableModel->itemFromIndex(tableView()->currentIndex()));
m_form->setNewRec(false); form()->setNewRec(false);
m_formHandler->showForm(m_form); m_formHandler->showForm(m_form);
} }
void handleDeleteRecord() override void handleDeleteRecord() override
{ {
connectService();
if (m_form == NULL || m_tableModel == NULL || tableView()->currentIndex().row() < 0) if (m_form == NULL || m_tableModel == NULL || tableView()->currentIndex().row() < 0)
{ {
Q_ASSERT(false); Q_ASSERT(false);

@ -8,3 +8,18 @@ IForm::~IForm()
{ {
} }
QString IForm::pluginId() const
{
return m_pluginId;
}
void IForm::setPluginId(const QString &pluginId)
{
m_pluginId = pluginId;
}
void IForm::refresh()
{
emit refreshEntity();
}

@ -2,6 +2,7 @@
#define IFORM_H #define IFORM_H
#include <QWidget> #include <QWidget>
#include <QString>
#include "core_global.h" #include "core_global.h"
@ -13,13 +14,21 @@ public:
explicit IForm(QWidget *parent = 0); explicit IForm(QWidget *parent = 0);
virtual ~IForm(); virtual ~IForm();
QString pluginId() const;
void setPluginId(const QString &pluginId);
signals: signals:
void recordAdded(); void recordAdded();
void recordUpdated(); void recordUpdated();
void validationError(const QString &errMessage); void validationError(const QString &errMessage);
void refreshEntity();
public slots: public slots:
virtual bool saveRecord() = 0; virtual bool saveRecord() = 0;
void refresh();
private:
QString m_pluginId;
}; };
#endif // IFORM_H #endif // IFORM_H

@ -14,6 +14,7 @@ IGridForm::IGridForm(QWidget *parent) :
ui->filterWidget->setVisible(false); ui->filterWidget->setVisible(false);
m_contextMenu = new QMenu(this); m_contextMenu = new QMenu(this);
m_contextMenu->addAction(ui->actionSelectColumns); m_contextMenu->addAction(ui->actionSelectColumns);
m_form = NULL;
m_columnDialog = new ColumnDialog(this); m_columnDialog = new ColumnDialog(this);
connect(m_columnDialog, SIGNAL(accepted()), this, SLOT(columnsAccepted())); connect(m_columnDialog, SIGNAL(accepted()), this, SLOT(columnsAccepted()));
@ -32,6 +33,11 @@ void IGridForm::setPluginId(const QString &pluginId)
{ {
m_filterUi->setPluginId(pluginId); m_filterUi->setPluginId(pluginId);
} }
if (m_form != NULL)
{
m_form->setPluginId(pluginId);
}
} }
QString IGridForm::pluginId() QString IGridForm::pluginId()

@ -60,6 +60,7 @@ private:
protected: protected:
FilterUi *m_filterUi; FilterUi *m_filterUi;
IForm *m_form;
}; };
#endif // IGRIDFORM_H #endif // IGRIDFORM_H

@ -16,8 +16,13 @@ public:
signals: signals:
void dbError(QString errMsg); void dbError(QString errMsg);
void dbErrorRead(QString errMsg);
void dbErrorInsert(QString errMsg);
void dbErrorUpdate(QString errMsg);
void dbErrorDelete(QString errMsg);
void dataChanged(); void dataChanged();
void permissionDenied(); void updateDenied();
void readDenied();
public slots: public slots:
}; };

@ -67,6 +67,7 @@ public:
catch (const odb::exception &ex) catch (const odb::exception &ex)
{ {
emit dbError(ex.what()); emit dbError(ex.what());
emit dbErrorUpdate(ex.what());
return; return;
} }
@ -88,6 +89,8 @@ public:
catch (const odb::exception &ex) catch (const odb::exception &ex)
{ {
emit dbError(ex.what()); emit dbError(ex.what());
emit dbErrorInsert(ex.what());
return;
} }
emit dataChanged(); emit dataChanged();
@ -109,11 +112,21 @@ public:
catch (const odb::exception &ex) catch (const odb::exception &ex)
{ {
emit dbError(ex.what()); emit dbError(ex.what());
emit dbErrorRead(ex.what());
} }
return entity; return entity;
} }
QSharedPointer<T> reload(int id) {
odb::database *db = Context::instance().db();
Q_ASSERT(db);
Context::instance().session().cache_erase<T>(*db, id);
return loadById(id);
}
void erase(QSharedPointer<T> entity) { void erase(QSharedPointer<T> entity) {
odb::database *db = Context::instance().db(); odb::database *db = Context::instance().db();
@ -129,6 +142,7 @@ public:
catch (const odb::exception &ex) catch (const odb::exception &ex)
{ {
emit dbError(ex.what()); emit dbError(ex.what());
emit dbErrorDelete(ex.what());
} }
} }

@ -42,6 +42,7 @@ DEFINES += DATABASE_SQLITE
# #
ODB_FLAGS += -I $$[QT_INSTALL_HEADERS] ODB_FLAGS += -I $$[QT_INSTALL_HEADERS]
ODB_FLAGS += -I $$[QT_INSTALL_HEADERS]/QtCore ODB_FLAGS += -I $$[QT_INSTALL_HEADERS]/QtCore
ODB_FLAGS += -I $$PWD/core
ODB_FLAGS += -D __PIC__ ODB_FLAGS += -D __PIC__
win32 { win32 {

Loading…
Cancel
Save