diff --git a/sea_transport/skipperpanel.cpp b/sea_transport/skipperpanel.cpp index dcb5d5e..dccf3c9 100644 --- a/sea_transport/skipperpanel.cpp +++ b/sea_transport/skipperpanel.cpp @@ -1,14 +1,76 @@ #include "skipperpanel.h" #include "ui_skipperpanel.h" -SkipperPanel::SkipperPanel(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::SkipperPanel) -{ + +SkipperPanel::SkipperPanel(QWidget *parent) : QMainWindow(parent), ui(new Ui::SkipperPanel) { ui->setupUi(this); + + + connect(ui->pb_logout, &QPushButton::clicked, this, &SkipperPanel::on_logout_requested); + + cvm = new CargoViewModel(this); + ui->tv_cargo->setModel(this->cvm); } -SkipperPanel::~SkipperPanel() -{ +SkipperPanel::~SkipperPanel() { delete ui; + + delete cvm; +} + +SkipperPanel& SkipperPanel::set_user(const user_entity &user) { + this->user = user; + ui->lab_user->setText(tr("Hello, **%1**").arg(user.login())); + + emit user_set(); + + return *this; +} + +void SkipperPanel::on_user_set() { + UserRole urole = this->user.role(); + switch (urole) { + case UserRole::ADMINISTRATOR: + case UserRole::DISPATCHER: + QMessageBox::critical(this, "Error", "You shouldn't be here!"); + close(); + return; + case UserRole::SKIPPER: + break; + } + + bool success = false; + vessel_entity vessel; + foreach(auto _vessel, apparatus::instance()->get_object_subsystem()->vessels()) { + if (_vessel.skipper() == this->user.login()) { + success = true; + vessel = _vessel; + break; + } + } + + if (!success) { + QMessageBox::critical(this, "Error", "You are not assigned to vessel. \n" + "Ask you local dispatcher/administrator to do it. \n" + "System will now close."); + this->close(); + } + + ui->lab_vid->setText(QString::number(vessel.id())); + + bool h_success; + auto harbor = apparatus::instance()->get_object_subsystem()->get_dpoint(vessel.harbor(), h_success); + ui->lab_harbor->setText(h_success? harbor->title() : "#UNKNOWN#"); + + int cap_used = 0; + foreach (auto c, vessel.cargo()) { + cap_used += c.volume(); + } + ui->lab_capacity->setText(tr("%1/%2/%3").arg(cap_used, vessel.capacity(), vessel.capacity() + cap_used)); + + this->cvm->set_data(vessel.cargo()); +} + +void SkipperPanel::on_logout_requested() { + this->close(); } diff --git a/sea_transport/skipperpanel.h b/sea_transport/skipperpanel.h index 65a7b51..d82aa18 100644 --- a/sea_transport/skipperpanel.h +++ b/sea_transport/skipperpanel.h @@ -2,21 +2,41 @@ #define SKIPPERPANEL_H #include +#include +#include + +#include "system/apparatus.h" +#include "viewmodels/cargoviewmodel.h" +#include "entities/user_entity.h" +#include "entities/vessel_entity.h" namespace Ui { class SkipperPanel; } -class SkipperPanel : public QMainWindow -{ +class SkipperPanel : public QMainWindow { Q_OBJECT + user_entity user; + + CargoViewModel *cvm; + public: explicit SkipperPanel(QWidget *parent = nullptr); ~SkipperPanel(); + SkipperPanel& set_user(const user_entity &user); + +signals: + void user_set(); + +private slots: + void on_user_set(); + private: Ui::SkipperPanel *ui; + + void on_logout_requested(); }; #endif // SKIPPERPANEL_H diff --git a/sea_transport/skipperpanel.ui b/sea_transport/skipperpanel.ui index 315e473..30aad65 100644 --- a/sea_transport/skipperpanel.ui +++ b/sea_transport/skipperpanel.ui @@ -60,7 +60,7 @@ - #### + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -77,7 +77,7 @@ - Capacity (left/max): + Capacity (used/left/max): Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -87,7 +87,7 @@ - #### + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -114,7 +114,7 @@ - #### + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter