From a6c080d36bcccc7e03b42c6067e8cd6b499fa467 Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Wed, 23 Dec 2020 03:17:06 +0700 Subject: [PATCH] Cargo edit dialog and VM --- sea_transport/cargoeditdialog.cpp | 24 ++++++--- sea_transport/cargoeditdialog.h | 15 ++++-- sea_transport/cargoeditdialog.ui | 33 +++++-------- sea_transport/viewmodels/cargoviewmodel.cpp | 54 +++++++++++++++++++++ sea_transport/viewmodels/cargoviewmodel.h | 24 +++++++++ 5 files changed, 118 insertions(+), 32 deletions(-) create mode 100644 sea_transport/viewmodels/cargoviewmodel.cpp create mode 100644 sea_transport/viewmodels/cargoviewmodel.h diff --git a/sea_transport/cargoeditdialog.cpp b/sea_transport/cargoeditdialog.cpp index b481bbf..67c9a1e 100644 --- a/sea_transport/cargoeditdialog.cpp +++ b/sea_transport/cargoeditdialog.cpp @@ -1,14 +1,26 @@ #include "cargoeditdialog.h" #include "ui_cargoeditdialog.h" -CargoEditDialog::CargoEditDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::CargoEditDialog) -{ +CargoEditDialog::CargoEditDialog(QWidget *parent) : QDialog(parent), ui(new Ui::CargoEditDialog) { ui->setupUi(this); } -CargoEditDialog::~CargoEditDialog() -{ +CargoEditDialog::~CargoEditDialog() { delete ui; } + +cargo_entity* CargoEditDialog::cargo() { + return this->_cargo; +} + +void CargoEditDialog::accept() { + bool emptyTitle = ui->et_title->text().trimmed().isEmpty(); + if (emptyTitle) { + QMessageBox::critical(this, "Error", "Title cannot be empty"); + return; + } + + this->_cargo = new cargo_entity(ui->et_title->text().trimmed(), ui->sb_volume->value()); + + QDialog::accept(); +} diff --git a/sea_transport/cargoeditdialog.h b/sea_transport/cargoeditdialog.h index 2da4b33..fcab6ea 100644 --- a/sea_transport/cargoeditdialog.h +++ b/sea_transport/cargoeditdialog.h @@ -2,21 +2,28 @@ #define CARGOEDITDIALOG_H #include +#include + +#include "entities/cargo_entity.h" namespace Ui { class CargoEditDialog; } -class CargoEditDialog : public QDialog -{ +class CargoEditDialog : public QDialog { Q_OBJECT + Ui::CargoEditDialog *ui; + + cargo_entity *_cargo; public: explicit CargoEditDialog(QWidget *parent = nullptr); ~CargoEditDialog(); -private: - Ui::CargoEditDialog *ui; + cargo_entity* cargo(); + +public slots: + void accept() Q_DECL_OVERRIDE; }; #endif // CARGOEDITDIALOG_H diff --git a/sea_transport/cargoeditdialog.ui b/sea_transport/cargoeditdialog.ui index a6b62e3..da14928 100644 --- a/sea_transport/cargoeditdialog.ui +++ b/sea_transport/cargoeditdialog.ui @@ -7,7 +7,7 @@ 0 0 318 - 279 + 127 @@ -19,12 +19,12 @@ - Cargo ID: + Title - + @@ -33,28 +33,17 @@ - Quantity: + Volume: - - - + + + 1 - - - - - - Destination: - - - - - - - Choose... + + 500 @@ -76,14 +65,14 @@ - + Discard - + Save diff --git a/sea_transport/viewmodels/cargoviewmodel.cpp b/sea_transport/viewmodels/cargoviewmodel.cpp new file mode 100644 index 0000000..ef6621a --- /dev/null +++ b/sea_transport/viewmodels/cargoviewmodel.cpp @@ -0,0 +1,54 @@ +#include "cargoviewmodel.h" + +CargoViewModel::CargoViewModel(QObject *parent) : QAbstractTableModel(parent) { + +} + +int CargoViewModel::rowCount(const QModelIndex &/*parent*/) const { + return this->_data.length(); +} + +int CargoViewModel::columnCount(const QModelIndex &/*parent*/) const { + return 3; +} + +QVariant CargoViewModel::headerData(int section, Qt::Orientation orientation, int role) const { + if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { + switch (section) { + case 0: + return QString("SID"); + case 1: + return QString("Title"); + case 2: + return QString("Volume"); + } + } + return QVariant(); +} + +QVariant CargoViewModel::data(const QModelIndex &index, int role) const { + if (role == Qt::DisplayRole) { + auto item = this->_data[index.row()]; + + int col = index.column(); + switch (col) { + case 0: + return QString::number(item.id()); + case 1: + return item.title(); + case 2: + return item.volume(); + } + + return "UNKNOWN FIELD"; + } + + return QVariant(); +} + +void CargoViewModel::set_data(const QVector &new_data) { + this->beginResetModel(); + this->_data.clear(); + this->_data += new_data; + this->endResetModel(); +} diff --git a/sea_transport/viewmodels/cargoviewmodel.h b/sea_transport/viewmodels/cargoviewmodel.h new file mode 100644 index 0000000..26db7b1 --- /dev/null +++ b/sea_transport/viewmodels/cargoviewmodel.h @@ -0,0 +1,24 @@ +#ifndef CARGOVIEWMODEL_H +#define CARGOVIEWMODEL_H + +#include +#include + +#include "entities/cargo_entity.h" + +class CargoViewModel : public QAbstractTableModel { + Q_OBJECT + + QVector _data; + +public: + CargoViewModel(QObject *parent); + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + + void set_data(const QVector &new_data); +}; + +#endif // CARGOVIEWMODEL_H