initial commit Base app, core lib, plugin system
commit
53d56f2e13
@ -0,0 +1,29 @@
|
||||
#include <context.h>
|
||||
|
||||
#include "accommodation.h"
|
||||
#include <QDebug>
|
||||
#include "accommodationform.h"
|
||||
|
||||
#include "data/person.h"
|
||||
|
||||
Accommodation::Accommodation()
|
||||
{
|
||||
}
|
||||
|
||||
QString Accommodation::pluginName()
|
||||
{
|
||||
return "Ubytovani";
|
||||
}
|
||||
|
||||
void Accommodation::init()
|
||||
{
|
||||
qDebug() << "init accomodation";
|
||||
m_ui = new AccommodationForm();
|
||||
m_service = new Service<Person>();
|
||||
}
|
||||
|
||||
QString Accommodation::pluginId()
|
||||
{
|
||||
return "ACCOMMODATION";
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
#ifndef ACCOMMODATION_H
|
||||
#define ACCOMMODATION_H
|
||||
|
||||
#include "accommodation_global.h"
|
||||
#include <context.h>
|
||||
#include <iplugin.h>
|
||||
#include <QObject>
|
||||
#include <QtPlugin>
|
||||
|
||||
class ACCOMMODATIONSHARED_EXPORT Accommodation : public QObject, IPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "accommodation.json")
|
||||
Q_INTERFACES(IPlugin)
|
||||
|
||||
public:
|
||||
Accommodation();
|
||||
|
||||
QString pluginName() Q_DECL_OVERRIDE;
|
||||
void init() Q_DECL_OVERRIDE;
|
||||
QString pluginId() Q_DECL_OVERRIDE;
|
||||
|
||||
};
|
||||
|
||||
#endif // ACCOMMODATION_H
|
@ -0,0 +1,48 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2015-10-28T15:27:14
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += widgets
|
||||
|
||||
TARGET = accommodation
|
||||
TEMPLATE = lib
|
||||
|
||||
DEFINES += ACCOMMODATION_LIBRARY
|
||||
|
||||
SOURCES += accommodation.cpp \
|
||||
accommodationform.cpp \
|
||||
data/person.cpp \
|
||||
dialog.cpp
|
||||
|
||||
HEADERS += accommodation.h\
|
||||
accommodation_global.h \
|
||||
accommodationform.h \
|
||||
data/person.h \
|
||||
dialog.h
|
||||
|
||||
unix {
|
||||
target.path = /usr/lib
|
||||
INSTALLS += target
|
||||
}
|
||||
|
||||
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../core/release/ -lcore
|
||||
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../core/debug/ -lcore
|
||||
else:unix: LIBS += -L$$OUT_PWD/../core/ -lcore
|
||||
|
||||
INCLUDEPATH += $$PWD/../core
|
||||
DEPENDPATH += $$PWD/../core
|
||||
|
||||
DESTDIR = ../plugins
|
||||
|
||||
OTHER_FILES += \
|
||||
accommodation.json
|
||||
|
||||
FORMS += \
|
||||
accommodationform.ui \
|
||||
dialog.ui
|
||||
|
||||
ODB_FILES = accommodation/data/person.h
|
||||
H_DIR = $$PWD/data/*.h
|
||||
include(../odb.pri)
|
@ -0,0 +1,12 @@
|
||||
#ifndef ACCOMMODATION_GLOBAL_H
|
||||
#define ACCOMMODATION_GLOBAL_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#if defined(ACCOMMODATION_LIBRARY)
|
||||
# define ACCOMMODATIONSHARED_EXPORT Q_DECL_EXPORT
|
||||
#else
|
||||
# define ACCOMMODATIONSHARED_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
|
||||
#endif // ACCOMMODATION_GLOBAL_H
|
@ -0,0 +1,22 @@
|
||||
#include "accommodationform.h"
|
||||
#include "ui_accommodationform.h"
|
||||
|
||||
#include "dialog.h"
|
||||
|
||||
AccommodationForm::AccommodationForm(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::AccommodationForm)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
AccommodationForm::~AccommodationForm()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void AccommodationForm::on_pushButton_clicked()
|
||||
{
|
||||
Dialog d;
|
||||
d.open();
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
#ifndef ACCOMMODATIONFORM_H
|
||||
#define ACCOMMODATIONFORM_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class AccommodationForm;
|
||||
}
|
||||
|
||||
class AccommodationForm : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit AccommodationForm(QWidget *parent = 0);
|
||||
~AccommodationForm();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
|
||||
private:
|
||||
Ui::AccommodationForm *ui;
|
||||
};
|
||||
|
||||
#endif // ACCOMMODATIONFORM_H
|
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>AccommodationForm</class>
|
||||
<widget class="QWidget" name="AccommodationForm">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>828</width>
|
||||
<height>548</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="text">
|
||||
<string>PushButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableView" name="tableView"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -0,0 +1,35 @@
|
||||
#include "person.h"
|
||||
|
||||
Person::Person()
|
||||
{
|
||||
}
|
||||
int Person::getId() const
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
void Person::setId(int value)
|
||||
{
|
||||
id = value;
|
||||
}
|
||||
QString Person::getFirstName() const
|
||||
{
|
||||
return firstName;
|
||||
}
|
||||
|
||||
void Person::setFirstName(const QString &value)
|
||||
{
|
||||
firstName = value;
|
||||
}
|
||||
QString Person::getLastName() const
|
||||
{
|
||||
return lastName;
|
||||
}
|
||||
|
||||
void Person::setLastName(const QString &value)
|
||||
{
|
||||
lastName = value;
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
#ifndef PERSON_H
|
||||
#define PERSON_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
#include <odb/core.hxx>
|
||||
|
||||
#pragma db object
|
||||
class Person : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Person();
|
||||
|
||||
int getId() const;
|
||||
void setId(int value);
|
||||
|
||||
QString getFirstName() const;
|
||||
void setFirstName(const QString &value);
|
||||
|
||||
QString getLastName() const;
|
||||
void setLastName(const QString &value);
|
||||
|
||||
private:
|
||||
friend class odb::access;
|
||||
#pragma db id auto
|
||||
int id;
|
||||
QString firstName;
|
||||
QString lastName;
|
||||
|
||||
};
|
||||
|
||||
#endif // PERSON_H
|
@ -0,0 +1,31 @@
|
||||
#include "dialog.h"
|
||||
#include "ui_dialog.h"
|
||||
|
||||
#include <context.h>
|
||||
#include <iplugin.h>
|
||||
#include "data/person.h"
|
||||
|
||||
#include "accommodation-odb.hxx"
|
||||
|
||||
Dialog::Dialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Dialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
Dialog::~Dialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void Dialog::on_buttonBox_accepted()
|
||||
{
|
||||
IPlugin *plugin = Context::instance().plugins().at(0);
|
||||
QSharedPointer<Person> p(new Person());
|
||||
|
||||
p->setFirstName(ui->lineEdit->text());
|
||||
p->setLastName(ui->lineEdit_2->text());
|
||||
|
||||
plugin->service<Person>()->save(p);
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
#ifndef DIALOG_H
|
||||
#define DIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class Dialog;
|
||||
}
|
||||
|
||||
class Dialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Dialog(QWidget *parent = 0);
|
||||
~Dialog();
|
||||
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
|
||||
private:
|
||||
Ui::Dialog *ui;
|
||||
};
|
||||
|
||||
#endif // DIALOG_H
|
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>544</width>
|
||||
<height>355</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>240</y>
|
||||
<width>341</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>40</y>
|
||||
<width>113</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEdit_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>90</y>
|
||||
<width>113</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@ -0,0 +1,27 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2015-10-28T15:23:55
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = prodejna
|
||||
TEMPLATE = app
|
||||
|
||||
|
||||
SOURCES += main.cpp\
|
||||
mainwindow.cpp \
|
||||
|
||||
HEADERS += mainwindow.h
|
||||
|
||||
FORMS += mainwindow.ui
|
||||
|
||||
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../core/release/ -lcore
|
||||
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../core/debug/ -lcore
|
||||
else:unix: LIBS += -L$$OUT_PWD/../core/ -lcore
|
||||
|
||||
INCLUDEPATH += $$PWD/../core
|
||||
DEPENDPATH += $$PWD/../core
|
@ -0,0 +1,11 @@
|
||||
#include "mainwindow.h"
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
#include <context.h>
|
||||
#include <iplugin.h>
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
Context::instance().loadPlugins();
|
||||
int i = 0;
|
||||
|
||||
foreach (IPlugin *plugin, Context::instance().plugins()) {
|
||||
QPushButton *plugButton = new QPushButton(this);
|
||||
plugButton->setText(plugin->pluginName());
|
||||
ui->navigation->layout()->addWidget(plugButton);
|
||||
plugButton->setProperty(PLUGIN_INDEX, i);
|
||||
i++;
|
||||
connect(plugButton, SIGNAL(clicked()), this, SLOT(openPlugin()) );
|
||||
}
|
||||
|
||||
((QVBoxLayout*)ui->navigation->layout())->addStretch(1);
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::on_actionExit_triggered()
|
||||
{
|
||||
this->close();
|
||||
}
|
||||
|
||||
void MainWindow::openPlugin()
|
||||
{
|
||||
QVariant var = QObject::sender()->property(PLUGIN_INDEX);
|
||||
IPlugin *plugin = Context::instance().plugins().at(var.toInt());
|
||||
|
||||
for (int i = 0; i < ui->tabWidget->count(); i++) {
|
||||
if (ui->tabWidget->widget(i)->objectName() == plugin->pluginId()) {
|
||||
ui->tabWidget->setCurrentIndex(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ui->tabWidget->addTab(plugin->ui(), QIcon(), plugin->pluginName());
|
||||
ui->tabWidget->widget(ui->tabWidget->count() - 1)->setObjectName(plugin->pluginId());
|
||||
ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionOpen_database_triggered()
|
||||
{
|
||||
Context::instance().openDb("/home/jony/db.db");
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
#define PLUGIN_INDEX "plug_index"
|
||||
|
||||
namespace Ui {
|
||||
class MainWindow;
|
||||
}
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void on_actionExit_triggered();
|
||||
void openPlugin();
|
||||
|
||||
void on_actionOpen_database_triggered();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>825</width>
|
||||
<height>538</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="navigation" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2"/>
|
||||
</widget>
|
||||
</item>
|
||||
<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>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Tab 1</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Tab 2</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>825</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
<property name="title">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="actionOpen_database"/>
|
||||
<addaction name="actionExit"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="mainToolBar">
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
<action name="actionExit">
|
||||
<property name="text">
|
||||
<string>Exit</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionOpen_database">
|
||||
<property name="text">
|
||||
<string>Open database...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -0,0 +1,51 @@
|
||||
#include <QDir>
|
||||
#include <QApplication>
|
||||
#include <QPluginLoader>
|
||||
|
||||
#include "context.h"
|
||||
#include "iplugin.h"
|
||||
|
||||
#include <odb/sqlite/database.hxx>
|
||||
|
||||
Context &Context::instance()
|
||||
{
|
||||
static Context ctx;
|
||||
return ctx;
|
||||
}
|
||||
|
||||
QList<IPlugin *> Context::plugins()
|
||||
{
|
||||
return m_plugins;
|
||||
}
|
||||
|
||||
void Context::loadPlugins()
|
||||
{
|
||||
QDir pluginsDir(qApp->applicationDirPath() + "/../plugins");
|
||||
|
||||
foreach (QString fileName, pluginsDir.entryList(QStringList() << "*.so")) {
|
||||
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
|
||||
QObject *p = pluginLoader.instance();
|
||||
|
||||
if (p != NULL) {
|
||||
IPlugin *plugin = qobject_cast<IPlugin*>(p);
|
||||
if (plugin != NULL) {
|
||||
plugin->init();
|
||||
m_plugins.append(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Context::openDb(const QString &path)
|
||||
{
|
||||
if (m_db != NULL) {
|
||||
delete m_db;
|
||||
}
|
||||
|
||||
m_db = new odb::sqlite::database(path.toStdString());
|
||||
}
|
||||
|
||||
Context::Context()
|
||||
{
|
||||
m_db = NULL;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
#ifndef CONTEXT_H
|
||||
#define CONTEXT_H
|
||||
|
||||
#include <QList>
|
||||
#include <odb/database.hxx>
|
||||
|
||||
class IPlugin;
|
||||
|
||||
class Context
|
||||
{
|
||||
public:
|
||||
static Context &instance();
|
||||
QList<IPlugin*> plugins();
|
||||
void loadPlugins();
|
||||
void openDb(const QString &path);
|
||||
odb::database *db();
|
||||
|
||||
private:
|
||||
Context();
|
||||
QList<IPlugin*> m_plugins;
|
||||
odb::database *m_db;
|
||||
|
||||
};
|
||||
|
||||
#endif // CONTEXT_H
|
@ -0,0 +1,6 @@
|
||||
#include "core.h"
|
||||
|
||||
|
||||
Core::Core()
|
||||
{
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
#ifndef CORE_H
|
||||
#define CORE_H
|
||||
|
||||
#include "core_global.h"
|
||||
|
||||
class CORESHARED_EXPORT Core
|
||||
{
|
||||
|
||||
public:
|
||||
Core();
|
||||
};
|
||||
|
||||
#endif // CORE_H
|
@ -0,0 +1,32 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2015-10-28T15:25:33
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += widgets
|
||||
|
||||
TARGET = core
|
||||
TEMPLATE = lib
|
||||
|
||||
DEFINES += CORE_LIBRARY
|
||||
|
||||
SOURCES += core.cpp \
|
||||
data/user.cpp \
|
||||
context.cpp
|
||||
|
||||
HEADERS += core.h\
|
||||
core_global.h \
|
||||
iplugin.h \
|
||||
service.h \
|
||||
data/user.h \
|
||||
context.h
|
||||
|
||||
unix {
|
||||
target.path = /usr/lib
|
||||
INSTALLS += target
|
||||
}
|
||||
|
||||
ODB_FILES = core/data/user.h
|
||||
H_DIR = $$PWD/data/*.h
|
||||
include(../odb.pri)
|
@ -0,0 +1,12 @@
|
||||
#ifndef CORE_GLOBAL_H
|
||||
#define CORE_GLOBAL_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#if defined(CORE_LIBRARY)
|
||||
# define CORESHARED_EXPORT Q_DECL_EXPORT
|
||||
#else
|
||||
# define CORESHARED_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
|
||||
#endif // CORE_GLOBAL_H
|
@ -0,0 +1,38 @@
|
||||
#include "user.h"
|
||||
|
||||
User::User()
|
||||
{
|
||||
}
|
||||
|
||||
int User::getId() const
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
void User::setId(int value)
|
||||
{
|
||||
id = value;
|
||||
}
|
||||
|
||||
QString User::getLogin() const
|
||||
{
|
||||
return login;
|
||||
}
|
||||
|
||||
void User::setLogin(const QString &value)
|
||||
{
|
||||
login = value;
|
||||
}
|
||||
|
||||
QString User::getPassword() const
|
||||
{
|
||||
return password;
|
||||
}
|
||||
|
||||
void User::setPassword(const QString &value)
|
||||
{
|
||||
password = value;
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
#ifndef USER_H
|
||||
#define USER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <odb/core.hxx>
|
||||
|
||||
#pragma db object
|
||||
class User : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
User();
|
||||
|
||||
int getId() const;
|
||||
void setId(int value);
|
||||
|
||||
QString getLogin() const;
|
||||
void setLogin(const QString &value);
|
||||
|
||||
QString getPassword() const;
|
||||
void setPassword(const QString &value);
|
||||
|
||||
private:
|
||||
friend class odb::access;
|
||||
|
||||
#pragma db id auto
|
||||
int id;
|
||||
QString login;
|
||||
QString password;
|
||||
};
|
||||
|
||||
#endif // USER_H
|
@ -0,0 +1,39 @@
|
||||
#ifndef IPLUGIN_H
|
||||
#define IPLUGIN_H
|
||||
|
||||
#include <QString>
|
||||
#include <QWidget>
|
||||
#include <QtPlugin>
|
||||
|
||||
#include "service.h"
|
||||
|
||||
class IPlugin
|
||||
{
|
||||
|
||||
public:
|
||||
IPlugin() {
|
||||
m_ui = NULL;
|
||||
}
|
||||
|
||||
virtual ~IPlugin() { }
|
||||
virtual QString pluginName() = 0;
|
||||
virtual QString pluginId() = 0;
|
||||
virtual void init() = 0;
|
||||
virtual QWidget *ui() {
|
||||
return m_ui;
|
||||
}
|
||||
template<class T>
|
||||
Service<T> *service() {
|
||||
(Service<T>*)m_service;
|
||||
}
|
||||
|
||||
protected:
|
||||
QWidget *m_ui;
|
||||
void *m_service;
|
||||
};
|
||||
|
||||
#define PluginInterface_iid "cz.itsolved.prodejna.IPlugin"
|
||||
|
||||
Q_DECLARE_INTERFACE(IPlugin, PluginInterface_iid)
|
||||
|
||||
#endif // IPLUGIN_H
|
@ -0,0 +1,48 @@
|
||||
#ifndef SERVICE_H
|
||||
#define SERVICE_H
|
||||
|
||||
#include <QList>
|
||||
#include <QSharedPointer>
|
||||
|
||||
#include <odb/core.hxx>
|
||||
#include <odb/transaction.hxx>
|
||||
#include <odb/database.hxx>
|
||||
#include <odb/result.hxx>
|
||||
|
||||
template<class T>
|
||||
class Service
|
||||
{
|
||||
public:
|
||||
Service() { }
|
||||
|
||||
QList<QSharedPointer<T> > all() {
|
||||
odb::database *db = Context::instance().db();
|
||||
odb::transaction tx(db->begin());
|
||||
odb::result<T> res = db->template query<T>();
|
||||
|
||||
QList<QSharedPointer<T> > ret;
|
||||
for (typename odb::result<T>::iterator it = res.begin(); it != res.end(); it++) {
|
||||
QSharedPointer<T> entity = db->template load<T>(((T*)*it)->id());
|
||||
ret.append(entity);
|
||||
}
|
||||
|
||||
tx.commit();
|
||||
return ret;
|
||||
}
|
||||
|
||||
void save(QSharedPointer<T> entity) {
|
||||
odb::database *db = Context::instance().db();
|
||||
odb::transaction tx(db->begin());
|
||||
db->persist(entity);
|
||||
tx.commit();
|
||||
}
|
||||
|
||||
QSharedPointer<T> loadById(int id) {
|
||||
odb::database *db = Context::instance().db();
|
||||
odb::transaction tx(db->begin());
|
||||
db->template load<T>(id);
|
||||
tx.commit();
|
||||
}
|
||||
};
|
||||
|
||||
#endif // SERVICE_H
|
@ -0,0 +1,77 @@
|
||||
win32 {
|
||||
LIBS += -L"d:/prac/qt/lib"
|
||||
INCLUDEPATH += d:/prac/odb/libodb-2.4.0
|
||||
INCLUDEPATH += d:/prac/odb/libodb-qt-2.4.0
|
||||
INCLUDEPATH += d:/prac/odb/libodb-sqlite-2.4.0
|
||||
INCLUDEPATH += d:/prac/odb/sqlite
|
||||
}
|
||||
|
||||
win32 {
|
||||
CONFIG(debug, debug|release) {
|
||||
LIBS += -lodb-d -lodb-sqlite-d -lodb-qt-d
|
||||
}else {
|
||||
LIBS += -lodb -lodb-sqlite -lodb-qt
|
||||
}
|
||||
}
|
||||
|
||||
unix {
|
||||
LIBS += -lodb -lodb-sqlite -lodb-qt
|
||||
}
|
||||
|
||||
ODB_FLAGS = --database sqlite --profile qt --generate-schema --generate-query --generate-session --at-once --input-name $$TARGET --schema-format sql
|
||||
|
||||
win32 {
|
||||
ODB_PATH = d:\prac\odb\odb-2.4.0-i686-windows\bin\odb
|
||||
}
|
||||
unix {
|
||||
ODB_PATH = odb
|
||||
}
|
||||
|
||||
# Select the database we are going to use.
|
||||
#
|
||||
DEFINES += DATABASE_SQLITE
|
||||
|
||||
# Suppress unknown pragmas GCC warnings.
|
||||
#
|
||||
#QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CXXFLAGS_WARN_ON -Wno-unknown-pragmas
|
||||
|
||||
# ODB compilation rules. Normally you don't need to change anything here.
|
||||
#
|
||||
|
||||
# Add the Qt headers directory to the ODB include directory list.
|
||||
#
|
||||
ODB_FLAGS += -I $$[QT_INSTALL_HEADERS]
|
||||
ODB_FLAGS += -I $$[QT_INSTALL_HEADERS]/QtCore
|
||||
|
||||
win32 {
|
||||
ODB_FLAGS += -I d:/prac/odb/libodb-2.4.0
|
||||
}
|
||||
|
||||
# Newer versions of QtCreator do builds in a separate directory. As a
|
||||
# result, we need to append the source directory to ODB files.
|
||||
#
|
||||
for(dir, ODB_FILES) {
|
||||
ODB_PWD_FILES += $$PWD/$${dir}
|
||||
}
|
||||
|
||||
win32 {
|
||||
H_DIR ~= s,/,\\,g
|
||||
}
|
||||
export(H_DIR)
|
||||
|
||||
|
||||
odb.name = odb ${QMAKE_FILE_IN}
|
||||
odb.input = ODB_PWD_FILES
|
||||
odb.output = $$TARGET-odb.cxx
|
||||
odb.commands = $$ODB_PATH $$ODB_FLAGS ${QMAKE_FILE_IN}
|
||||
odb.depends = $$ODB_PWD_FILES
|
||||
odb.variable_out = SOURCES
|
||||
odb.CONFIG = target_predeps
|
||||
odb.clean = $$TARGET-odb.cxx $$TARGET-odb.hxx $$TARGET-odb.ixx $$TARGET.sql
|
||||
QMAKE_EXTRA_COMPILERS += odb
|
||||
|
||||
odbhc.target = odbhc
|
||||
odbhc.commands = $(COPY) $$H_DIR .
|
||||
QMAKE_EXTRA_TARGETS += odbhc
|
||||
|
||||
PRE_TARGETDEPS += odbhc
|
@ -0,0 +1,6 @@
|
||||
TEMPLATE = subdirs
|
||||
|
||||
SUBDIRS += \
|
||||
core \
|
||||
application \
|
||||
accommodation
|
Loading…
Reference in New Issue