Browse Source

Dialogues created on the stack for display widgets

The logbook widget, pilotswidget and AircraftWidget used to create their children on the heap, now they do so on the stack.

The ui is now being disabled while an entry is being edited.
Felix Turowsky 2 years ago
parent
commit
15707697e5

+ 2 - 0
src/gui/dialogues/newflightdialog.cpp

@@ -311,6 +311,7 @@ bool NewFlightDialog::addNewTail(QLineEdit& parent_line_edit)
 
             // update Line Edit with newly added tail
             parent_line_edit.setText(DBCache->getTailsMap().value(DB->getLastEntry(OPL::DbTable::Tails)));
+            emit parent_line_edit.editingFinished();
             return true;
         } else {
             return false;
@@ -345,6 +346,7 @@ bool NewFlightDialog::addNewPilot(QLineEdit& parent_line_edit)
 
             // update Line Edit with newly added pilot
             parent_line_edit.setText(DBCache->getPilotNamesMap().value(DB->getLastEntry(OPL::DbTable::Pilots)));
+            emit parent_line_edit.editingFinished();
             return true;
         } else {
             return false;

+ 0 - 2
src/gui/dialogues/newpilotdialog.cpp

@@ -31,8 +31,6 @@ NewPilotDialog::NewPilotDialog(QWidget *parent) :
     ui(new Ui::NewPilot)
 {
     setup();
-
-    //pilotEntry = APilotEntry();
     ui->lastnameLineEdit->setFocus();
 }
 

+ 21 - 19
src/gui/widgets/aircraftwidget.cpp

@@ -99,19 +99,13 @@ void AircraftWidget::changeEvent(QEvent *event)
             ui->retranslateUi(this);
 }
 
-void AircraftWidget::onNewTailDialog_editingFinished()
-{
-    refreshView();
-}
-
 void AircraftWidget::on_newAircraftButton_clicked()
 {
     NewTailDialog nt(QString(), this);
-    QObject::connect(&nt,  &QDialog::accepted,
-                     this, &AircraftWidget::onNewTailDialog_editingFinished);
-    QObject::connect(&nt,  &QDialog::rejected,
-                     this, &AircraftWidget::onNewTailDialog_editingFinished);
+    setUiEnabled(false);
     nt.exec();
+    refreshView();
+    setUiEnabled(true);
 }
 
 /*!
@@ -130,16 +124,15 @@ void AircraftWidget::tableView_selectionChanged()
     }
 
     if(selectedTails.length() == 1) {
-        auto* nt = new NewTailDialog(selectedTails.first(), this);
-        QObject::connect(nt,   &QDialog::accepted,
-                         this, &AircraftWidget::onNewTailDialog_editingFinished);
-        QObject::connect(nt,   &QDialog::rejected,
-                         this, &AircraftWidget::onNewTailDialog_editingFinished);
-        ui->stackedWidget->addWidget(nt);
-        ui->stackedWidget->setCurrentWidget(nt);
-        nt->setWindowFlag(Qt::Widget);
-        nt->setAttribute(Qt::WA_DeleteOnClose);
-        nt->exec();
+        NewTailDialog nt(selectedTails.first(), this);
+        nt.setWindowFlag(Qt::Widget);
+        ui->stackedWidget->addWidget(&nt);
+        ui->stackedWidget->setCurrentWidget(&nt);
+
+        setUiEnabled(false);
+        nt.exec();
+        refreshView();
+        setUiEnabled(true);
     }
 }
 
@@ -246,6 +239,15 @@ void AircraftWidget::onDeleteUnsuccessful()
     }
 }
 
+void AircraftWidget::setUiEnabled(bool enabled)
+{
+    ui->newAircraftButton->setEnabled(enabled);
+    ui->deleteAircraftButton->setEnabled(enabled);
+    ui->tableView->setEnabled(enabled);
+    ui->aircraftSearchComboBox->setEnabled(enabled);
+    ui->aircraftSearchComboBox->setEnabled(enabled);
+}
+
 void AircraftWidget::repopulateModel()
 {
     // unset the current model and delete it to avoid leak

+ 2 - 2
src/gui/widgets/aircraftwidget.h

@@ -67,8 +67,6 @@ private slots:
 
     void on_newAircraftButton_clicked();
 
-    void onNewTailDialog_editingFinished();
-
     void on_aircraftSearchLineEdit_textChanged(const QString &arg1);
 
 public slots:
@@ -112,6 +110,8 @@ private:
 
     void onDeleteUnsuccessful();
 
+    void setUiEnabled(bool enabled);
+
     inline void refreshView(){model->select();}
 
 protected:

+ 1 - 1
src/gui/widgets/logbookwidget.cpp

@@ -308,7 +308,7 @@ void LogbookWidget::on_actionEdit_Flight_triggered()
 void LogbookWidget::on_actionEdit_Sim_triggered()
 {
     if (selectedEntries.length() == 1) {
-        NewSimDialog nsd((selectedEntries.first() * -1), this);
+        NewSimDialog nsd((selectedEntries.first() * -1), this); // simulator entries have inverse row ID's in the model
         ui->stackedWidget->addWidget(&nsd);
         ui->stackedWidget->setCurrentWidget(&nsd);
         nsd.setWindowFlag(Qt::Widget);

+ 22 - 24
src/gui/widgets/pilotswidget.cpp

@@ -76,6 +76,15 @@ void PilotsWidget::connectSignalsAndSlots()
                      this,                              &PilotsWidget::tableView_headerClicked);
 }
 
+void PilotsWidget::setUiEnabled(bool enabled)
+{
+   ui->tableView->setEnabled(enabled);
+   ui->newPilotButton->setEnabled(enabled);
+   ui->deletePilotButton->setEnabled(enabled);
+   ui->pilotSearchLineEdit->setEnabled(enabled);
+   ui->pilotsSearchComboBox->setEnabled(enabled);
+}
+
 void PilotsWidget::changeEvent(QEvent *event)
 {
     if (event != nullptr)
@@ -94,11 +103,6 @@ void PilotsWidget::onPilotsWidget_databaseUpdated()
     refreshView();
 }
 
-void PilotsWidget::onNewPilotDialog_editingFinished()
-{
-    refreshView();
-}
-
 void PilotsWidget::on_pilotSearchLineEdit_textChanged(const QString &arg1)
 {
     model->setFilter(QLatin1Char('\"') + ui->pilotsSearchComboBox->currentText()
@@ -112,7 +116,7 @@ void PilotsWidget::tableView_selectionChanged()
         delete this->findChild<NewPilotDialog*>();
     }
 
-    auto *selection = ui->tableView->selectionModel();
+    auto selection = ui->tableView->selectionModel();
     selectedPilots.clear();
 
     for (const auto& row : selection->selectedRows()) {
@@ -120,17 +124,15 @@ void PilotsWidget::tableView_selectionChanged()
         DEB << "Selected Tails(s) with ID: " << selectedPilots;
     }
     if(selectedPilots.length() == 1) {
-
-        NewPilotDialog* np = new NewPilotDialog(selectedPilots.first(), this);
-        QObject::connect(np,   &QDialog::accepted,
-                         this, &PilotsWidget::onNewPilotDialog_editingFinished);
-        QObject::connect(np,   &QDialog::rejected,
-                         this, &PilotsWidget::onNewPilotDialog_editingFinished);
-        np->setWindowFlag(Qt::Widget);
-        np->setAttribute(Qt::WA_DeleteOnClose);
-        ui->stackedWidget->addWidget(np);
-        ui->stackedWidget->setCurrentWidget(np);
-        np->exec();
+        NewPilotDialog np = NewPilotDialog(selectedPilots.first(), this);
+        np.setWindowFlag(Qt::Widget);
+        ui->stackedWidget->addWidget(&np);
+        ui->stackedWidget->setCurrentWidget(&np);
+
+        setUiEnabled(false);
+        np.exec();
+        refreshView();
+        setUiEnabled(true);
     }
 }
 
@@ -142,13 +144,9 @@ void PilotsWidget::tableView_headerClicked(int column)
 
 void PilotsWidget::on_newPilotButton_clicked()
 {
-    NewPilotDialog* np = new NewPilotDialog(this);
-    QObject::connect(np,   &QDialog::accepted,
-                     this, &PilotsWidget::onNewPilotDialog_editingFinished);
-    QObject::connect(np,   &QDialog::rejected,
-                     this, &PilotsWidget::onNewPilotDialog_editingFinished);
-    np->setAttribute(Qt::WA_DeleteOnClose);
-    np->exec();
+    NewPilotDialog np = NewPilotDialog(this);
+    np.exec();
+    refreshView();
 }
 
 void PilotsWidget::on_deletePilotButton_clicked()

+ 2 - 1
src/gui/widgets/pilotswidget.h

@@ -63,7 +63,6 @@ private slots:
     void on_newPilotButton_clicked();
     void on_deletePilotButton_clicked();
     void onDeleteUnsuccessful();
-    void onNewPilotDialog_editingFinished();
     void on_pilotSearchLineEdit_textChanged(const QString &arg1);
 
 public slots:
@@ -102,6 +101,8 @@ private:
 
     void connectSignalsAndSlots();
 
+    void setUiEnabled(bool enabled);
+
     inline void refreshView(){model->select();}
 
 protected: