Added postregister plugin.

master
Josef Rokos 8 years ago
parent dbbf4a0a67
commit af9edeafae

@ -42,7 +42,7 @@ MainWindow::MainWindow(QWidget *parent) :
int i = 0;
foreach (IPlugin *plugin, Context::instance().plugins()) {
if (plugin->pluginId() != "CORE")
if (plugin->pluginId() != "CORE" && plugin->showIcon())
{
QToolButton *plugButton = new QToolButton(this);
plugButton->setText(plugin->pluginName());
@ -81,26 +81,16 @@ 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;
}
}
if (plugin->ui() != NULL)
{
ui->tabWidget->addTab(plugin->ui(), plugin->pluginIcon(), plugin->pluginName());
ui->tabWidget->widget(ui->tabWidget->count() - 1)->setObjectName(plugin->pluginId());
ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1);
}
openPlugin(plugin);
}
void MainWindow::on_actionOpen_database_triggered()
{
/*QFileDialog dialog(this);
dialog.setNameFilter(tr("Database Files (*.db)"));
dialog.setWindowTitle(tr("Open Database"));*/
int tabCount = ui->tabWidget->count();
for (int i = 0; i < tabCount; i++)
{
ui->tabWidget->removeTab(0);
}
QString dbFile = QFileDialog::getOpenFileName(this, "Open Database", "", "Database Files (*.db)");
if (!dbFile.isEmpty())
@ -118,6 +108,12 @@ void MainWindow::on_tabWidget_tabCloseRequested(int index)
void MainWindow::on_actionLogin_triggered()
{
int tabCount = ui->tabWidget->count();
for (int i = 0; i < tabCount; i++)
{
ui->tabWidget->removeTab(0);
}
QSharedPointer<User> u;
Context::instance().setCurrentUser(u);
m_lblUser->setText("");
@ -144,3 +140,30 @@ void MainWindow::on_actionSettings_triggered()
SettingsForm *settings = new SettingsForm(this);
settings->show();
}
void MainWindow::on_actionPost_register_triggered()
{
IPlugin *plugZipCodes = Context::instance().plugin("POSTREGISTER");
if (plugZipCodes != NULL)
{
openPlugin(plugZipCodes);
}
}
void MainWindow::openPlugin(IPlugin *plugin)
{
for (int i = 0; i < ui->tabWidget->count(); i++) {
if (ui->tabWidget->widget(i)->objectName() == plugin->pluginId()) {
ui->tabWidget->setCurrentIndex(i);
return;
}
}
if (plugin->ui() != NULL)
{
ui->tabWidget->addTab(plugin->ui(), plugin->pluginIcon(), plugin->pluginName());
ui->tabWidget->widget(ui->tabWidget->count() - 1)->setObjectName(plugin->pluginId());
ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1);
}
}

@ -9,6 +9,8 @@
#define PLUGIN_INDEX "plug_index"
class IPlugin;
namespace Ui {
class MainWindow;
}
@ -33,10 +35,13 @@ private slots:
void on_actionSettings_triggered();
void on_actionPost_register_triggered();
private:
Ui::MainWindow *ui;
LoginDialog *m_loginDialog;
QLabel *m_lblUser;
void openPlugin(IPlugin *plugin);
// QWidget interface
protected:

@ -60,7 +60,7 @@
<x>0</x>
<y>0</y>
<width>1000</width>
<height>19</height>
<height>20</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -72,7 +72,14 @@
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
<widget class="QMenu" name="menuRegisters">
<property name="title">
<string>&amp;Registers</string>
</property>
<addaction name="actionPost_register"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuRegisters"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
@ -116,6 +123,11 @@
<string>Settings</string>
</property>
</action>
<action name="actionPost_register">
<property name="text">
<string>Post register</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>

@ -45,11 +45,6 @@ H_DIR = $$PWD/data/*.h
ODB_OTHER_INCLUDES = -I $$PWD/../shop -I $$PWD/../addressbook/data -I $$PWD/../services/data
include(../odb.pri)
unix {
target.path = /usr/lib
INSTALLS += target
}
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lshop
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lshop
else:unix: LIBS += -L$$OUT_PWD/../plugins/ -lshop

@ -0,0 +1,76 @@
#include "postdata.h"
PostData::PostData(QObject *parent)
:QObject(parent)
{
}
QString PostData::townPart() const
{
return m_townPart;
}
void PostData::setTownPart(const QString &townPart)
{
m_townPart = townPart;
}
int PostData::id() const
{
return m_id;
}
void PostData::setId(int id)
{
m_id = id;
}
QString PostData::zipCode() const
{
return m_zipCode;
}
void PostData::setZipCode(const QString &zipCode)
{
m_zipCode = zipCode;
}
QString PostData::postName() const
{
return m_postName;
}
void PostData::setPostName(const QString &postName)
{
m_postName = postName;
}
QString PostData::code() const
{
return m_code;
}
void PostData::setCode(const QString &code)
{
m_code = code;
}
QString PostData::township() const
{
return m_township;
}
void PostData::setTownship(const QString &township)
{
m_township = township;
}
QString PostData::town() const
{
return m_town;
}
void PostData::setTown(const QString &town)
{
m_town = town;
}

@ -0,0 +1,55 @@
#ifndef POSTDATA_H
#define POSTDATA_H
#include <QString>
#include <QObject>
#include <odb/core.hxx>
#pragma db object
class PostData : public QObject
{
Q_OBJECT
Q_PROPERTY(QString townPart READ townPart WRITE setTownPart)
Q_PROPERTY(QString zipCode READ zipCode WRITE setZipCode)
Q_PROPERTY(QString postName READ postName WRITE setPostName)
Q_PROPERTY(QString code READ code WRITE setCode)
Q_PROPERTY(QString township READ township WRITE setTownship)
Q_PROPERTY(QString town READ town WRITE setTown)
public:
Q_INVOKABLE explicit PostData(QObject *parent = NULL);
QString townPart() const;
void setTownPart(const QString &townPart);
int id() const;
void setId(int id);
QString zipCode() const;
void setZipCode(const QString &zipCode);
QString postName() const;
void setPostName(const QString &postName);
QString code() const;
void setCode(const QString &code);
QString township() const;
void setTownship(const QString &township);
QString town() const;
void setTown(const QString &town);
private:
friend class odb::access;
#pragma db id auto
int m_id;
QString m_townPart;
QString m_zipCode;
QString m_postName;
QString m_code;
QString m_township;
QString m_town;
};
#endif // POSTDATA_H

@ -0,0 +1 @@
<?xml version="1.0" ?><svg clip-rule="evenodd" fill-rule="evenodd" image-rendering="optimizeQuality" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient gradientUnits="userSpaceOnUse" id="a" x1="250" x2="250" y1="284.547" y2="122.267"><stop offset="0" stop-color="#008BFF"/><stop offset="1" stop-color="#0af"/></linearGradient></defs><g><circle cx="250" cy="250" fill="none" r="210" stroke="#434242" stroke-width="30"/><rect fill="#434242" height="29.998" rx="10" ry="10" width="260" x="120" y="350"/><path d="M270 90l60 60c5 5 10 10 10 20s-10 20-20 20h-40v125c0 8-7 15-15 15h-30c-8 0-15-7-15-15v-125h-40c-10 0-20-10-20-20s5-15 10-20l60-60c13-13 27-13 40 0z" fill="url(#a)" stroke="#434242" stroke-width="10"/></g></svg>

After

Width:  |  Height:  |  Size: 820 B

@ -0,0 +1,46 @@
#include "importdialog.h"
#include "ui_importdialog.h"
#include <service.h>
#include <csvimporter.h>
#include <QDesktopWidget>
#include <QFileDialog>
#include "data/postdata.h"
#include "postregister-odb.hxx"
#include "importprogressform.h"
ImportDialog::ImportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ImportDialog)
{
ui->setupUi(this);
}
ImportDialog::~ImportDialog()
{
delete ui;
}
void ImportDialog::on_buttonBox_accepted()
{
QString fileName = ui->editFile->text();
Service<PostData> service;
PostData pd;
CsvImporter importer(pd.metaObject());
importer.setImportFile(fileName);
importer.setSeparator(ui->editSparator->text());
ImportProgressForm *progress = new ImportProgressForm();
progress->move(QApplication::desktop()->screen()->rect().center() - progress->rect().center());
progress->setWindowModality(Qt::ApplicationModal);
progress->show();
service.importData(&importer, progress);
}
void ImportDialog::on_btnFile_clicked()
{
QString file = QFileDialog::getOpenFileName(this, tr("Import file"), "", tr("All Files (*.*)"));
ui->editFile->setText(file);
}

@ -0,0 +1,27 @@
#ifndef IMPORTDIALOG_H
#define IMPORTDIALOG_H
#include <QDialog>
namespace Ui {
class ImportDialog;
}
class ImportDialog : public QDialog
{
Q_OBJECT
public:
explicit ImportDialog(QWidget *parent = 0);
~ImportDialog();
private slots:
void on_buttonBox_accepted();
void on_btnFile_clicked();
private:
Ui::ImportDialog *ui;
};
#endif // IMPORTDIALOG_H

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ImportDialog</class>
<widget class="QDialog" name="ImportDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>518</width>
<height>152</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>10</number>
</property>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>CSV file</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="editFile"/>
</item>
<item>
<widget class="QToolButton" name="btnFile">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Field separator</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="editSparator">
<property name="text">
<string>;</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ImportDialog</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>ImportDialog</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,34 @@
#include "importprogressform.h"
#include "ui_importprogressform.h"
ImportProgressForm::ImportProgressForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::ImportProgressForm)
{
ui->setupUi(this);
ui->progressBar->setRange(0, 100);
ui->progressBar->setValue(0);
m_terminate = false;
}
ImportProgressForm::~ImportProgressForm()
{
delete ui;
}
void ImportProgressForm::on_btnCancel_clicked()
{
m_terminate = true;
this->close();
}
void ImportProgressForm::updateProgress(int currentPos)
{
ui->progressBar->setValue(currentPos);
}
bool ImportProgressForm::terminate()
{
return m_terminate;
}

@ -0,0 +1,32 @@
#ifndef IMPORTPROGRESSFORM_H
#define IMPORTPROGRESSFORM_H
#include <QWidget>
#include <iimportprogress.h>
namespace Ui {
class ImportProgressForm;
}
class ImportProgressForm : public QWidget, public IImportProgress
{
Q_OBJECT
public:
explicit ImportProgressForm(QWidget *parent = 0);
~ImportProgressForm();
private slots:
void on_btnCancel_clicked();
private:
Ui::ImportProgressForm *ui;
bool m_terminate;
// IImportProgress interface
public:
void updateProgress(int currentPos);
bool terminate();
};
#endif // IMPORTPROGRESSFORM_H

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ImportProgressForm</class>
<widget class="QWidget" name="ImportProgressForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>369</width>
<height>134</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnCancel">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

@ -0,0 +1,18 @@
#include "postregister.h"
#include "postregistergrid.h"
PostRegister::PostRegister()
{
}
void PostRegister::initServiceUi()
{
m_service = new Service<PostData>();
m_ui = new PostRegisterGrid();
}
bool PostRegister::showIcon()
{
return false;
}

@ -0,0 +1,26 @@
#ifndef POSTREGISTER_H
#define POSTREGISTER_H
#include "postregister_global.h"
#include <QObject>
#include <imetadataplugin.h>
class POSTREGISTERSHARED_EXPORT PostRegister : public QObject, IMetaDataPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "postregister.json")
Q_INTERFACES(IPlugin)
public:
PostRegister();
// IMetaDataPlugin interface
protected:
void initServiceUi();
// IPlugin interface
public:
bool showIcon();
};
#endif // POSTREGISTER_H

@ -0,0 +1,34 @@
{
"id" : "POSTREGISTER",
"name" : {
"default" : "Post register",
"CZ" : "Číselník PSČ"
},
"descriptoin" : {
"default" : "",
"CZ" : ""
},
"schemaVersion" : 1,
"sql" : [
"CREATE TABLE \"PostData\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
\"townPart\" TEXT NULL,
\"zipCode\" TEXT NULL,
\"postName\" TEXT NULL,
\"code\" TEXT NULL,
\"township\" TEXT NULL,
\"town\" TEXT NULL);
"
],
"dependencies" : [ ],
"translations" : {
"CZ" : {
"townPart" : "Část obce",
"zipCode" : "PSČ",
"postName" : "Pošta",
"code" : "Kód",
"township" : "Okres",
"town" : "Obec"
}
}
}

@ -0,0 +1,52 @@
#-------------------------------------------------
#
# Project created by QtCreator 2017-04-21T08:14:36
#
#-------------------------------------------------
QT += widgets sql
TARGET = postregister
TEMPLATE = lib
DEFINES += POSTREGISTER_LIBRARY
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += postregister.cpp \
data/postdata.cpp \
postregistergrid.cpp \
importdialog.cpp \
importprogressform.cpp
HEADERS += postregister.h\
postregister_global.h \
data/postdata.h \
postregistergrid.h \
importdialog.h \
importprogressform.h
include(../config_plugin.pri)
ODB_FILES = postregister/data/postdata.h
H_DIR = $$PWD/data/*.h
include(../odb.pri)
DISTFILES += \
postregister.json
FORMS += \
importdialog.ui \
importprogressform.ui
RESOURCES += \
postregisterrc.qrc

@ -0,0 +1,12 @@
#ifndef POSTREGISTER_GLOBAL_H
#define POSTREGISTER_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(POSTREGISTER_LIBRARY)
# define POSTREGISTERSHARED_EXPORT Q_DECL_EXPORT
#else
# define POSTREGISTERSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // POSTREGISTER_GLOBAL_H

@ -0,0 +1,45 @@
#include "postregistergrid.h"
#include <QHBoxLayout>
#include <QToolButton>
#include "postregister-odb.hxx"
#include "importdialog.h"
PostRegisterGrid::PostRegisterGrid(QWidget *parent)
:GridForm<PostData>(parent)
{
setTableModel(new AutoTableModel<PostData>());
QHBoxLayout *tbLayout = qobject_cast<QHBoxLayout*>(this->toolbar()->layout());
if (tbLayout != NULL)
{
QToolButton *btnImport = new QToolButton(this->toolbar());
btnImport->setIcon(QIcon(":/icons/import.svg"));
btnImport->setAutoRaise(true);
btnImport->setIconSize(QSize(24, 24));
btnImport->setToolTip(tr("Import"));
tbLayout->insertWidget(tbLayout->count() - 1, btnImport);
connect(btnImport, &QToolButton::clicked, [this](){
ImportDialog *dlg = new ImportDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
});
}
}
bool PostRegisterGrid::canAddRecord()
{
return false;
}
bool PostRegisterGrid::canEditRecord()
{
return false;
}
bool PostRegisterGrid::canDeleteRecord()
{
return false;
}

@ -0,0 +1,19 @@
#ifndef POSTREGISTERGRID_H
#define POSTREGISTERGRID_H
#include <core.h>
#include "data/postdata.h"
class PostRegisterGrid : public GridForm<PostData>
{
public:
PostRegisterGrid(QWidget *parent = NULL);
// IGridForm interface
protected:
bool canAddRecord();
bool canEditRecord();
bool canDeleteRecord();
};
#endif // POSTREGISTERGRID_H

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>icons/import.svg</file>
</qresource>
</RCC>

@ -9,5 +9,6 @@ SUBDIRS += \
addressbook \
shop \
commodity \
camp
camp \
postregister

Loading…
Cancel
Save