From dcdcb6f3dd797c74a250523d797f6228df003372 Mon Sep 17 00:00:00 2001 From: giomba Date: Sun, 20 Sep 2020 01:18:10 +0200 Subject: [PATCH] tabbed UI --- argento/EditWindow.cpp | 6 +-- argento/EditWindow.h | 7 +--- argento/MainWindow.cpp | 80 ++++------------------------------------ argento/MainWindow.h | 21 +++-------- argento/MainWindow.ui | 69 +++++++++++++++------------------- argento/SociListTab.cpp | 82 +++++++++++++++++++++++++++++++++++++++++ argento/SociListTab.h | 31 ++++++++++++++++ argento/SociListTab.ui | 71 +++++++++++++++++++++++++++++++++++ argento/argento.pro | 11 +++--- argento/db.cpp | 3 -- argento/db.h | 12 ------ argento/main.cpp | 20 +++++++--- argento/status.cpp | 3 +- argento/status.h | 4 +- 14 files changed, 252 insertions(+), 168 deletions(-) create mode 100644 argento/SociListTab.cpp create mode 100644 argento/SociListTab.h create mode 100644 argento/SociListTab.ui delete mode 100644 argento/db.cpp delete mode 100644 argento/db.h diff --git a/argento/EditWindow.cpp b/argento/EditWindow.cpp index 095688f..1bc3947 100644 --- a/argento/EditWindow.cpp +++ b/argento/EditWindow.cpp @@ -1,10 +1,10 @@ #include "EditWindow.h" +#include "ui_EditWindow.h" EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) { ui->setupUi(this); - /* connect query with common global database */ - query = QSqlQuery(db); + QSqlQuery query; model = new QSqlRelationalTableModel(this); model->setTable("socio"); @@ -21,7 +21,7 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n if (! model->select()) { qDebug() << fullQuery(query); - qDebug() << db.lastError().text(); + qDebug() << query.lastError().text(); Ui::status(Ui::ERROR, "query error"); return; } diff --git a/argento/EditWindow.h b/argento/EditWindow.h index b994af5..6aa2f16 100644 --- a/argento/EditWindow.h +++ b/argento/EditWindow.h @@ -1,5 +1,4 @@ -#ifndef EDITWINDOW_H -#define EDITWINDOW_H +#pragma once #include #include @@ -13,7 +12,6 @@ #include "EditWindow.h" #include "fullQuery.h" #include "status.h" -#include "ui_EditWindow.h" namespace Ui { class EditWindow; @@ -37,6 +35,3 @@ private: Ui::EditWindow *ui; }; - -#endif - diff --git a/argento/MainWindow.cpp b/argento/MainWindow.cpp index 97b8433..6be8f8c 100644 --- a/argento/MainWindow.cpp +++ b/argento/MainWindow.cpp @@ -1,81 +1,15 @@ #include "MainWindow.h" +#include "ui_MainWindow.h" -MainWindow* mw; +QStatusBar* statusBar = nullptr; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); -} - -void MainWindow::connectDatabase(void) { - /* retrieve settings for this application, group database */ - QSettings settings("it.linux.golem", "argento"); - settings.beginGroup("database"); - - /* open database and attach query */ - db = QSqlDatabase::addDatabase("QMYSQL"); /* QMYSQL <-- database driver */ - db.setHostName(settings.value("hostname").toString()); - db.setDatabaseName(settings.value("database").toString()); - db.setUserName(settings.value("username").toString()); - db.setPassword(settings.value("password").toString()); - - status(Ui::INFO, QString("Connecting to %1...").arg(settings.value("hostname").toString())); - - if (! db.open()) - status(Ui::ERROR, db.lastError().text()); - else - status(Ui::INFO, QString("Connected to %1").arg(settings.value("hostname").toString())); -} - -MainWindow::~MainWindow() { - delete ui; -} - -void MainWindow::on_buttonCerca_clicked() { - if (!db.open()) connectDatabase(); - - QSqlQuery query; - query.prepare("SELECT id, nome, cognome FROM socio WHERE LOWER(nome) LIKE LOWER(:nome) AND LOWER(cognome) LIKE LOWER(:cognome)"); - query.bindValue( ":nome", QString("%%1%").arg(ui->lineNome->text()) ); - query.bindValue( ":cognome", QString("%%1%").arg(ui->lineCognome->text()) ); - - if (! query.exec()) { status(Ui::ERROR, fullQuery(query)); return; } - if ( query.size() == 0) { status(Ui::INFO, "no results found"); return; } - - model.setQuery(query); - - status(Ui::INFO, QString("%1 results found").arg(query.size())); - - ui->tableSoci->setModel(&model); - /* the signal is automagically added by some obscure qt build system, provided the function is named in a standard way */ - //QObject::connect(tableSoci, SIGNAL(clicked(const QModelIndex&)), this, SLOT(on_tableSoci_clicked(const QModelIndex&))); - ui->tableSoci->show(); -} - -void MainWindow::on_buttonNuovo_clicked() { - if (! db.open()) connectDatabase(); - - QSqlQuery query; - query.prepare("INSERT INTO socio (nome, cognome) VALUES (NULLIF(:nome, ''), NULLIF(:cognome, ''))"); - query.bindValue(":nome", ui->lineNome->text()); - query.bindValue(":cognome", ui->lineCognome->text()); - if (! query.exec()) { status(Ui::ERROR, fullQuery(query)); return; } - - if (! query.lastInsertId().isValid()) { status(Ui::ERROR, fullQuery(query)); return; } - - EditWindow*w = new EditWindow(query.lastInsertId().toInt(), this); - w->setAttribute(Qt::WA_DeleteOnClose); - w->show(); -} - -void MainWindow::on_tableSoci_clicked(const QModelIndex& index) { - if (index.isValid()) { - /* extracts id socio from first column of table view */ - int id = index.model()->data(index.sibling(index.row(), 0)).toInt(); - if (id != 0) { /* if click is not on other fields than id... */ - EditWindow* w = new EditWindow(id, this); - w->setAttribute(Qt::WA_DeleteOnClose); /* delete window at the end */ - w->show(); - } + QSqlDatabase db = QSqlDatabase::database(); + if (db.isOpen()) { + status(Ui::INFO, QString("Connected to %1").arg(db.hostName())); + } else { + status(Ui::ERROR, "Cannot connect to database: " + db.lastError().text()); } } diff --git a/argento/MainWindow.h b/argento/MainWindow.h index 5c51464..81b86f5 100644 --- a/argento/MainWindow.h +++ b/argento/MainWindow.h @@ -1,14 +1,12 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H +#pragma once #include #include #include #include +#include "SociListTab.h" #include "EditWindow.h" -#include "MainWindow.h" -#include "ui_MainWindow.h" namespace Ui { class MainWindow; @@ -21,20 +19,11 @@ private: Ui::MainWindow *ui; QSqlQueryModel model; - void connectDatabase(void); - public: - explicit MainWindow(QWidget *parent = nullptr); - ~MainWindow(); - - //void setStatus(Ui::StatusType type, QString message); + MainWindow(QWidget *parent = nullptr); private slots: - void on_buttonCerca_clicked(); - void on_buttonNuovo_clicked(); - void on_tableSoci_clicked(const QModelIndex& index); + }; -extern MainWindow* mw; - -#endif \ No newline at end of file +extern QStatusBar* statusBar; diff --git a/argento/MainWindow.ui b/argento/MainWindow.ui index d1922cd..40c285a 100644 --- a/argento/MainWindow.ui +++ b/argento/MainWindow.ui @@ -16,48 +16,30 @@ - - - - - Nome - - - - - - - Cognome - - - - - - - - - - - - - Cerca - - - - - - - Nuovo - - - - - - - + + + 0 + + + + Soci + + + + + + + + + + Rinnovi + + + + @@ -75,13 +57,20 @@ - Exit + + + SociListTab + QWidget +
SociListTab.h
+ 1 +
+
diff --git a/argento/SociListTab.cpp b/argento/SociListTab.cpp new file mode 100644 index 0000000..7ba1f71 --- /dev/null +++ b/argento/SociListTab.cpp @@ -0,0 +1,82 @@ +#include "SociListTab.h" +#include "ui_SociListTab.h" + +SociListTab::SociListTab(QWidget *parent) : + QWidget(parent), + ui(new Ui::SociListTab) +{ + ui->setupUi(this); +} +/* +void SociListTab::connectDatabase(void) { + // retrieve settings for this application, group database + QSettings settings("it.linux.golem", "argento"); + settings.beginGroup("database"); + + // open database and attach query + db = QSqlDatabase::addDatabase("QMYSQL"); // QMYSQL <-- database driver + db.setHostName(settings.value("hostname").toString()); + db.setDatabaseName(settings.value("database").toString()); + db.setUserName(settings.value("username").toString()); + db.setPassword(settings.value("password").toString()); + + status(Ui::INFO, QString("Connecting to %1...").arg(settings.value("hostname").toString())); + + if (! db.open()) + status(Ui::ERROR, db.lastError().text()); + else + status(Ui::INFO, QString("Connected to %1").arg(settings.value("hostname").toString())); +} +*/ + +void SociListTab::on_buttonCerca_clicked() { + QSqlQuery query; + query.prepare("SELECT id, nome, cognome FROM socio WHERE LOWER(nome) LIKE LOWER(:nome) AND LOWER(cognome) LIKE LOWER(:cognome)"); + query.bindValue( ":nome", QString("%%1%").arg(ui->lineNome->text()) ); + query.bindValue( ":cognome", QString("%%1%").arg(ui->lineCognome->text()) ); + + if (! query.exec()) { + qDebug() << "query not executed: " << query.lastError().text(); + status(Ui::ERROR, fullQuery(query)); + return; + } + if ( query.size() == 0) { + qDebug() << "size == 0"; + status(Ui::INFO, "no results found"); + return; + } + + model.setQuery(query); + + status(Ui::INFO, QString("%1 results found").arg(query.size())); + + ui->tableSoci->setModel(&model); + ui->tableSoci->show(); +} + +void SociListTab::on_buttonNuovo_clicked() { + QSqlQuery query; + query.prepare("INSERT INTO socio (nome, cognome) VALUES (NULLIF(:nome, ''), NULLIF(:cognome, ''))"); + query.bindValue(":nome", ui->lineNome->text()); + query.bindValue(":cognome", ui->lineCognome->text()); + if (! query.exec()) { status(Ui::ERROR, fullQuery(query)); return; } + + if (! query.lastInsertId().isValid()) { status(Ui::ERROR, fullQuery(query)); return; } + + EditWindow*w = new EditWindow(query.lastInsertId().toInt(), this); + w->setAttribute(Qt::WA_DeleteOnClose); + w->show(); +} + +void SociListTab::on_tableSoci_clicked(const QModelIndex& index) { + if (index.isValid()) { + /* extracts id socio from first column of table view */ + int id = index.model()->data(index.sibling(index.row(), 0)).toInt(); + if (id != 0) { /* if click is not on other fields than id... */ + EditWindow* w = new EditWindow(id, this); + w->setAttribute(Qt::WA_DeleteOnClose); /* delete window at the end */ + w->show(); + } + + } +} diff --git a/argento/SociListTab.h b/argento/SociListTab.h new file mode 100644 index 0000000..99ded14 --- /dev/null +++ b/argento/SociListTab.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "EditWindow.h" + +#include "status.h" + +namespace Ui { + class SociListTab; +} + +class SociListTab : public QWidget { + Q_OBJECT + +private: + Ui::SociListTab *ui; + QSqlQueryModel model; + +public: + SociListTab(QWidget *parent = nullptr); + +private slots: + void on_buttonCerca_clicked(); + void on_buttonNuovo_clicked(); + void on_tableSoci_clicked(const QModelIndex& index); +}; diff --git a/argento/SociListTab.ui b/argento/SociListTab.ui new file mode 100644 index 0000000..526ad03 --- /dev/null +++ b/argento/SociListTab.ui @@ -0,0 +1,71 @@ + + + SociListTab + + + + 0 + 0 + 623 + 421 + + + + Gestionale Argento + + + + + + + + + + Cognome + + + + + + + + + + Cerca + + + + + + + Nuovo + + + + + + + + + + Nome + + + + + + + + + + + + + + Exit + + + + + + diff --git a/argento/argento.pro b/argento/argento.pro index daafaba..e5c5485 100644 --- a/argento/argento.pro +++ b/argento/argento.pro @@ -24,25 +24,26 @@ DEFINES += QT_DEPRECATED_WARNINGS CONFIG += c++11 SOURCES += \ - db.cpp \ EditWindow.cpp \ main.cpp \ MainWindow.cpp \ status.cpp \ - fullQuery.cpp + fullQuery.cpp \ + SociListTab.cpp HEADERS += \ - db.h \ EditWindow.h \ MainWindow.h \ status.h \ - fullQuery.h + fullQuery.h \ + SociListTab.h FORMS += \ MainWindow.ui \ - EditWindow.ui + EditWindow.ui \ + SociListTab.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/argento/db.cpp b/argento/db.cpp deleted file mode 100644 index 4f80286..0000000 --- a/argento/db.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "db.h" - -QSqlDatabase db; diff --git a/argento/db.h b/argento/db.h deleted file mode 100644 index 49392cd..0000000 --- a/argento/db.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef DB_H -#define DB_H - -#include -#include -#include -#include - -extern QSqlDatabase db; -extern QSqlQuery query; - -#endif \ No newline at end of file diff --git a/argento/main.cpp b/argento/main.cpp index 2697ff8..dbfa5fa 100644 --- a/argento/main.cpp +++ b/argento/main.cpp @@ -10,12 +10,22 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - mw = new MainWindow; - mw->show(); + /* retrieve settings for this application, group database */ + QSettings settings("it.linux.golem", "argento"); + settings.beginGroup("database"); - int ret = a.exec(); + /* open database and attach query */ + QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); /* QMYSQL <-- database driver */ + db.setHostName(settings.value("hostname").toString()); + db.setDatabaseName(settings.value("database").toString()); + db.setUserName(settings.value("username").toString()); + db.setPassword(settings.value("password").toString()); - delete mw; + db.open(); - return ret; + MainWindow window; + statusBar = window.statusBar(); + window.show(); + + return a.exec(); } diff --git a/argento/status.cpp b/argento/status.cpp index 27fdd1c..78a2260 100644 --- a/argento/status.cpp +++ b/argento/status.cpp @@ -3,8 +3,7 @@ namespace Ui { void status(StatusType type, QString message) { - //QStatusBar* statusBar = mw->findChild("statusBar"); - QStatusBar* statusBar = mw->statusBar(); + //QStatusBar* statusBar = mw->statusBar(); QString prefix; int timeout = 0; diff --git a/argento/status.h b/argento/status.h index ed867d7..3c20a8a 100644 --- a/argento/status.h +++ b/argento/status.h @@ -1,5 +1,4 @@ -#ifndef STATUS_H -#define STATUS_H +#pragma once #include #include @@ -19,4 +18,3 @@ namespace Ui { } -#endif \ No newline at end of file