Browse Source

edited ui of aircraftWidget

fiffty-50 4 years ago
parent
commit
a1bde80a5b
3 changed files with 213 additions and 96 deletions
  1. 103 78
      src/gui/widgets/aircraftwidget.cpp
  2. 14 7
      src/gui/widgets/aircraftwidget.h
  3. 96 11
      src/gui/widgets/aircraftwidget.ui

+ 103 - 78
src/gui/widgets/aircraftwidget.cpp

@@ -27,7 +27,8 @@ AircraftWidget::AircraftWidget(QWidget *parent) :
     ui(new Ui::AircraftWidget)
 {
     ui->setupUi(this);
-    refreshView();
+    sortColumn = Settings::read("userdata/acSortColumn").toInt();
+    refreshModelAndView();
 }
 
 AircraftWidget::~AircraftWidget()
@@ -35,55 +36,88 @@ AircraftWidget::~AircraftWidget()
     delete ui;
 }
 
-void AircraftWidget::setSelectedAircraft(const qint32 &value)
-{
-    selectedAircraft = value;
-}
+/*
+ * Functions
+ */
 
-void AircraftWidget::tableView_selectionChanged(const QItemSelection &index, const QItemSelection &)
+void AircraftWidget::refreshModelAndView()
 {
-    setSelectedAircraft(index.indexes()[0].data().toInt());
-    DEB("Selected aircraft with ID#: " << selectedAircraft);
+    ui->stackedWidget->setCurrentIndex(0);
+
+    model->setTable("viewTails");
+    model->select();
+
+    QTableView *view = ui->tableView;
+    view->setModel(model);
+    view->setSelectionBehavior(QAbstractItemView::SelectRows);
+    view->setSelectionMode(QAbstractItemView::SingleSelection);
+    view->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    view->horizontalHeader()->setStretchLastSection(QHeaderView::Stretch);
+    view->hideColumn(0);
+    view->setColumnWidth(1, 180);
+    view->setColumnWidth(2, 180);
+    view->verticalHeader()->hide();
+    view->setAlternatingRowColors(true);
+    view->setSortingEnabled(true);
+    view->sortByColumn(sortColumn);
 
-    auto nt = new NewTail(Aircraft(selectedAircraft), Db::editExisting, this);
-    connect(nt, SIGNAL(accepted()), this, SLOT(acft_accepted()));
-    connect(nt, SIGNAL(rejected()), this, SLOT(acft_accepted()));
+    view->show();
 
-    nt->setWindowFlag(Qt::Widget);
-    ui->stackedWidget->addWidget(nt);
-    ui->stackedWidget->setCurrentWidget(nt);
+    connect(ui->tableView->selectionModel(),
+            SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
+            this,
+            SLOT(tableView_selectionChanged()));
+    connect(ui->tableView->horizontalHeader(),
+            SIGNAL(sectionClicked(int)),
+            this,
+            SLOT(tableView_headerClicked(int)));
 }
 
+/*
+ * Slots
+ */
 void AircraftWidget::on_deleteButton_clicked()
 {
-    if (selectedAircraft > 0) {
-
-        auto ac = new Aircraft(selectedAircraft);
-        if(!ac->remove()) {
-            QVector<QString> columns = {"doft","dept","dest"};
-            QVector<QString> details = Db::multiSelect(columns, "flights", "acft",
-                                                       QString::number(selectedAircraft), Db::exactMatch);
-            auto mb = new QMessageBox(this);
-            QString message = "\nUnable to delete. The following error has ocurred:\n\n";
-            if(!details.isEmpty()){
-                message += ac->error + QLatin1String("\n\n");
-                message += "This is most likely the case because a flight exists with the aircaft "
-                           "you are trying to delete. You have to change or remove this flight "
-                           "before being able to remove this aircraft.\n\n"
-                           "The following flight(s) with this tail have been found:\n\n";
-                auto space = QLatin1Char(' ');
-                for(int i = 0; i <= 30 && i <=details.length()-3; i+=3){
-                    message += details[i] + space
-                             + details[i+1] + space
-                             + details[i+2] + QLatin1String("\n");
+    if (selectedTails.length() > 0) {
+        for(const auto& selectedTail : selectedTails){
+            auto ac = Aircraft(selectedTail);
+            auto& warningMsg = "Deleting Aircraft with registration:<br><center><b>"
+                    + ac.data.value("registration")
+                    + "<br></center></b>Do you want to proceed?";
+            QMessageBox confirm;
+            confirm.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+            confirm.setDefaultButton(QMessageBox::No);
+            confirm.setIcon(QMessageBox::Question);
+            confirm.setWindowTitle("Delete Aircraft");
+            confirm.setText(warningMsg);
+            int reply = confirm.exec();
+            if(reply == QMessageBox::Yes) {
+                if(!ac.remove()) {
+                    QVector<QString> columns = {"doft","dept","dest"};
+                    QVector<QString> details = Db::multiSelect(columns, "flights", "acft",
+                                                               QString::number(selectedTail), Db::exactMatch);
+                    auto mb = new QMessageBox(this);
+                    QString message = "\nUnable to delete. The following error has ocurred:\n\n";
+                    if(!details.isEmpty()){
+                        message += ac.error + QLatin1String("\n\n");
+                        message += "This is most likely the case because a flight exists with the aircaft "
+                                   "you are trying to delete. In order to maintain database integrity, you have to\n"
+                                   "change or remove this flight before being able to remove this aircraft.\n\n"
+                                   "The following flight(s) with this tail have been found:\n\n";
+                        auto space = QLatin1Char(' ');
+                        for(int i = 0; i <= 30 && i <=details.length()-3; i+=3){
+                            message += details[i] + space
+                                     + details[i+1] + space
+                                     + details[i+2] + QLatin1String("\n");
+                        }
+                    }
+                    mb->setText(message);
+                    mb->setIcon(QMessageBox::Critical);
+                    mb->show();
                 }
             }
-            mb->setText(message);
-            mb->setIcon(QMessageBox::Critical);
-            mb->show();
         }
-        refreshView();
-
+        refreshModelAndView();
     } else {
         auto mb = new QMessageBox(this);
         mb->setText("No aircraft selected.");
@@ -94,53 +128,44 @@ void AircraftWidget::on_deleteButton_clicked()
 void AircraftWidget::on_newButton_clicked()
 {
     auto nt = new NewTail(QString(), Db::createNew, this);
-    connect(nt,
-            SIGNAL(accepted()), this,
-            SLOT(acft_accepted()));
+    connect(nt, SIGNAL(accepted()), this, SLOT(acft_editing_finished()));
+    connect(nt, SIGNAL(rejected()), this, SLOT(acft_editing_finished()));
     nt->show();
 }
 
-void AircraftWidget::acft_accepted()
+void AircraftWidget::on_searchLineEdit_textChanged(const QString &arg1)
 {
-    DEB("Refreshing View...");
-    refreshView();
+    if(ui->searchComboBox->currentIndex() == 0){
+        ui->searchLineEdit->setText(arg1.toUpper());
+    }
+    model->setFilter(ui->searchComboBox->currentText() + " LIKE \"%" + arg1 + "%\"");
 }
 
-void AircraftWidget::refreshView()
+void AircraftWidget::tableView_selectionChanged()
 {
-    QString welcomeMessage = "Select an Aircraft to show or edit details.";
-    QWidget *start = new QWidget();
-    start->setObjectName("welcomeAC");
-    QLabel *label = new QLabel(welcomeMessage);
-    label->setAlignment(Qt::AlignCenter);
-    QHBoxLayout *layout = new QHBoxLayout();
-    layout->addWidget(label);
-    start->setLayout(layout);
-    ui->stackedWidget->addWidget(start);
-    ui->stackedWidget->setCurrentWidget(start);
-
-    QSqlTableModel *model = new QSqlTableModel;
-    model->setTable("viewTails");
-    model->select();
+    auto *selection = ui->tableView->selectionModel();
+    selectedTails.clear();
 
-    QTableView *view = ui->tableView;
-    view->setModel(model);
-    view->setSelectionBehavior(QAbstractItemView::SelectRows);
-    view->setSelectionMode(QAbstractItemView::SingleSelection);
-    view->setEditTriggers(QAbstractItemView::NoEditTriggers);
-    view->horizontalHeader()->setStretchLastSection(QHeaderView::Stretch);
-    view->setColumnWidth(0, 60);
-    view->setColumnWidth(1, 120);
-    view->setColumnWidth(2, 180);
-    view->verticalHeader()->hide();
-    view->setAlternatingRowColors(true);
-    view->setSortingEnabled(true);
-
-    view->sortByColumn(Settings::read("userdata/acSortColumn").toInt(), Qt::AscendingOrder);
+    for (const auto& row : selection->selectedRows()) {
+        selectedTails << row.data().toInt();
+        DEB("Selected Tails(s) with ID: " << selectedTails);
+    }
+    if(selectedTails.length() == 1) {
+        auto nt = new NewTail(Aircraft(selectedTails.first()), Db::editExisting, this);
+        connect(nt, SIGNAL(accepted()), this, SLOT(acft_editing_finished()));
+        connect(nt, SIGNAL(rejected()), this, SLOT(acft_editing_finished()));
+        nt->setWindowFlag(Qt::Widget);
+        ui->stackedWidget->addWidget(nt);
+        ui->stackedWidget->setCurrentWidget(nt);
+    }
+}
 
-    view->show();
+void AircraftWidget::tableView_headerClicked(int column)
+{
+    sortColumn = column;
+}
 
-    connect(ui->tableView->selectionModel(),
-            SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
-            SLOT(tableView_selectionChanged(const QItemSelection &, const QItemSelection &)));
+void AircraftWidget::acft_editing_finished()
+{
+    refreshModelAndView();
 }

+ 14 - 7
src/gui/widgets/aircraftwidget.h

@@ -23,6 +23,7 @@
 #include <QSqlTableModel>
 #include <QDebug>
 #include <QLabel>
+#include <QHBoxLayout>
 
 #include "src/classes/settings.h"
 #include "src/gui/dialogues/newtail.h"
@@ -42,23 +43,29 @@ public:
     explicit AircraftWidget(QWidget *parent = nullptr);
     ~AircraftWidget();
 
-    qint32 selectedAircraft = 0;
-
-    void setSelectedAircraft(const qint32 &value);
-
 private slots:
-    void tableView_selectionChanged(const QItemSelection &index, const QItemSelection &);
+    void tableView_selectionChanged();
+
+    void tableView_headerClicked(int column);
 
     void on_deleteButton_clicked();
 
     void on_newButton_clicked();
 
-    void acft_accepted();
+    void acft_editing_finished();
+
+    void on_searchLineEdit_textChanged(const QString &arg1);
 
 private:
     Ui::AircraftWidget *ui;
 
-    void refreshView();
+    QSqlTableModel *model = new QSqlTableModel;
+
+    qint32 sortColumn;
+
+    QVector<qint32> selectedTails;
+
+    void refreshModelAndView();
 };
 
 #endif // AIRCRAFTWIDGET_H

+ 96 - 11
src/gui/widgets/aircraftwidget.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>911</width>
-    <height>370</height>
+    <width>1920</width>
+    <height>1080</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -24,6 +24,13 @@
      </property>
     </widget>
    </item>
+   <item row="2" column="0">
+    <widget class="QPushButton" name="deleteButton">
+     <property name="text">
+      <string>Delete Aircraft</string>
+     </property>
+    </widget>
+   </item>
    <item row="0" column="1">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
@@ -41,8 +48,93 @@
      </item>
      <item>
       <widget class="QStackedWidget" name="stackedWidget">
-       <widget class="QWidget" name="page"/>
-       <widget class="QWidget" name="page_2"/>
+       <property name="currentIndex">
+        <number>0</number>
+       </property>
+       <widget class="QWidget" name="welcomePage">
+        <layout class="QGridLayout" name="gridLayout_2">
+         <item row="0" column="1">
+          <spacer name="verticalSpacer">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>436</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item row="1" column="0">
+          <layout class="QFormLayout" name="formLayout">
+           <item row="0" column="0">
+            <widget class="QLabel" name="searchLabel">
+             <property name="text">
+              <string>Search:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLineEdit" name="searchLineEdit"/>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="label_2">
+             <property name="text">
+              <string>Search in:</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QComboBox" name="searchComboBox">
+             <item>
+              <property name="text">
+               <string>Registration</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string>Type</string>
+              </property>
+             </item>
+             <item>
+              <property name="text">
+               <string>Company</string>
+              </property>
+             </item>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="spacerLabel">
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="0" colspan="2">
+          <widget class="QLabel" name="welcomeLabel">
+           <property name="text">
+            <string>Select an Aircraft from the List to show or edit details.</string>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="1">
+          <spacer name="verticalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>410</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </widget>
       </widget>
      </item>
      <item>
@@ -67,13 +159,6 @@
      </property>
     </widget>
    </item>
-   <item row="2" column="0">
-    <widget class="QPushButton" name="deleteButton">
-     <property name="text">
-      <string>Delete Aircraft</string>
-     </property>
-    </widget>
-   </item>
   </layout>
  </widget>
  <resources/>