Browse Source

Streamlined UX

- Instead of using  pop-up widgets for new flights, pilots and aircraft, these dialogs are now shown in the same way edit dialogs are shown, that is embedded in the respective TableEditWidgets. Pop-up dialogs are only used when needed because another edit widget is already open.
Felix Turowsky 1 year ago
parent
commit
427f052568

+ 5 - 4
mainwindow.cpp

@@ -25,9 +25,7 @@
 #include "src/database/database.h"
 #include "src/classes/style.h"
 #include "src/gui/dialogues/firstrundialog.h"
-#include "src/gui/dialogues/newflightdialog.h"
 #include "src/gui/dialogues/newsimdialog.h"
-#include "src/gui/dialogues/newflightdialog.h"
 #include "src/database/databasecache.h"
 #include "src/classes/settings.h"
 // Quick and dirty Debug area
@@ -174,6 +172,9 @@ void MainWindow::connectWidgets()
 
     QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
                      this,           &MainWindow::onStyleChanged);
+
+    QObject::connect(this,			 &MainWindow::addFlightRequested,
+                     logbookWidget,  &LogbookTableEditWidget::addEntryRequested);
 }
 
 void MainWindow::onDatabaseInvalid()
@@ -226,8 +227,8 @@ void MainWindow::on_actionHome_triggered()
 
 void MainWindow::on_actionNewFlight_triggered()
 {
-    auto* nf = new NewFlightDialog(this);
-    nf->exec();
+    ui->stackedWidget->setCurrentWidget(logbookWidget);
+    emit addFlightRequested();
 }
 
 void MainWindow::on_actionLogbook_triggered()

+ 2 - 0
mainwindow.h

@@ -181,6 +181,8 @@ protected:
         event->accept();
     }
 
+signals:
+    void addFlightRequested();
     //void closeEvent(QCloseEvent *event) override; //TODO check and prompt for creation of backup?
 };
 #endif // MAINWINDOW_H

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

@@ -559,13 +559,13 @@ void NewFlightDialog::on_acftLineEdit_editingFinished()
         return;
     }
 
-    const QString input = line_edit->text(); // keep around for adding new tail if needed
+    const QString user_input = line_edit->text(); // keep around for adding new tail if needed
 
     if(!verifyUserInput(line_edit, TailInput(line_edit->text()))) {
         // re-populate user input to hand through to NewTailDialog
         {
             QSignalBlocker blocker(line_edit);
-            line_edit->setText(input);
+            line_edit->setText(user_input);
         }
         if(!addNewDatabaseElement(line_edit, OPL::DbTable::Tails)) {
             onBadInputReceived(line_edit);

+ 10 - 2
src/gui/widgets/logbooktableeditwidget.cpp

@@ -88,13 +88,21 @@ void LogbookTableEditWidget::addEntryRequested()
         }
     }
 
+    showEditWidget();
+
     auto nfd = NewFlightDialog(this);
+    m_stackedWidget->addWidget(&nfd);
+    m_stackedWidget->setCurrentWidget(&nfd);
     nfd.exec();
+
+    hideEditWidget();
+    // auto nfd = NewFlightDialog(this);
+    // nfd.exec();
 }
 
 void LogbookTableEditWidget::editEntryRequested(const QModelIndex &selectedIndex)
 {
-    m_stackedWidget->show();
+    showEditWidget();
     const auto idx = m_view->selectionModel()->currentIndex();
     const auto rowId = m_model->index(idx.row(), 0).data().toInt();
     if(rowId > 0) {
@@ -108,7 +116,7 @@ void LogbookTableEditWidget::editEntryRequested(const QModelIndex &selectedIndex
         m_stackedWidget->setCurrentWidget(&nsd);
         nsd.exec();
     }
-    m_stackedWidget->hide();
+    hideEditWidget();
 }
 
 void LogbookTableEditWidget::deleteEntryRequested()

+ 1 - 1
src/gui/widgets/logbooktableeditwidget.h

@@ -50,7 +50,7 @@ public:
 public slots:
     void viewSelectionChanged(SettingsWidget::SettingSignal widget);
 
-private slots:
+public slots:
     virtual void filterTextChanged(const QString &filterString) override;
     virtual void addEntryRequested() override;
     virtual void editEntryRequested(const QModelIndex &selectedIndex) override;

+ 40 - 23
src/gui/widgets/tableeditwidget.cpp

@@ -8,7 +8,8 @@ TableEditWidget::TableEditWidget(Orientation orientation, QWidget *parent)
     : QWidget{parent}, m_orientation(orientation)
 {}
 
-void TableEditWidget::init() {
+void TableEditWidget::init()
+{
     setupUI();
     setupSignalsAndSlots();
 }
@@ -139,34 +140,31 @@ void TableEditWidget::setupSignalsAndSlots()
 
 void TableEditWidget::addEntryRequested()
 {
-    getEntryEditDialog(this)->exec();
+    cleanUpOldEditDialog();
+
+    m_entryEditDialog = getEntryEditDialog(this);
+    m_stackedWidget->addWidget(m_entryEditDialog);
+    m_stackedWidget->setCurrentWidget(m_entryEditDialog);
+
+    showEditWidget();
+    m_entryEditDialog->exec();
+    hideEditWidget();
 }
 
 void TableEditWidget::editEntryRequested(const QModelIndex &selectedIndex)
 {
-    int rowId = m_model->index(selectedIndex.row(), 0).data().toInt();
+    int rowIdToEdit = m_model->index(selectedIndex.row(), 0).data().toInt();
 
-    // clean up old dialog
-    if(m_stackedWidget->indexOf(m_entryEditDialog) != -1) {
-        delete m_entryEditDialog;
-        m_entryEditDialog = getEntryEditDialog(this);
-        m_entryEditDialog->loadEntry(rowId);
-        m_stackedWidget->addWidget(m_entryEditDialog);
-        m_stackedWidget->setCurrentWidget(m_entryEditDialog);
-    }
+    cleanUpOldEditDialog();
 
-    switch (m_orientation) {
-    case Horizontal:
-        m_stackedWidget->show();
-        m_entryEditDialog->exec();
-        m_stackedWidget->hide();
-        break;
-    case Vertical:
-        m_entryEditDialog->exec();
-        m_stackedWidget->setCurrentWidget(m_filterWidget);
-    default:
-        break;
-    }
+    m_entryEditDialog = getEntryEditDialog(this);
+    m_entryEditDialog->loadEntry(rowIdToEdit);
+    m_stackedWidget->addWidget(m_entryEditDialog);
+    m_stackedWidget->setCurrentWidget(m_entryEditDialog);
+
+    showEditWidget();
+    m_entryEditDialog->exec();
+    hideEditWidget();
 }
 
 void TableEditWidget::deleteEntryRequested()
@@ -212,3 +210,22 @@ void TableEditWidget::databaseContentChanged()
     m_model->select();
     m_view->resizeColumnsToContents();
 }
+
+void TableEditWidget::showEditWidget()
+{
+    m_buttonWidget->hide();
+    m_stackedWidget->show();
+}
+
+void TableEditWidget::hideEditWidget()
+{
+    m_stackedWidget->hide();
+    m_buttonWidget->show();
+}
+
+void TableEditWidget::cleanUpOldEditDialog()
+{
+    if(m_stackedWidget->indexOf(m_entryEditDialog) != -1) {
+        delete m_entryEditDialog;
+    }
+}

+ 12 - 2
src/gui/widgets/tableeditwidget.h

@@ -93,7 +93,6 @@ public:
      * EntryEditDialog for the selected table.
      */
     virtual EntryEditDialog *getEntryEditDialog(QWidget *parent = nullptr) = 0;
-//    virtual EntryEditDialog getEntryEditDialog(QWidget *parent = nullptr) = 0;
 
 protected:
     Orientation m_orientation;
@@ -110,6 +109,14 @@ protected:
     QLineEdit *m_filterLineEdit = new QLineEdit(this);
     QComboBox *m_filterSelectionComboBox = new QComboBox(this);
 
+    virtual void showEditWidget();
+    virtual void hideEditWidget();
+    /*!
+     * \brief makes sure heap allocated widgets are destroyed when a user requests another add or edit before completing
+     * a proviously opened one.
+     */
+    void cleanUpOldEditDialog();
+
 private:
     void setupHorizontalUI();
     void setupVerticalUI();
@@ -125,7 +132,7 @@ private:
      */
     void setupButtonWidget();
 
-private slots:
+public slots:
     virtual void addEntryRequested();
     virtual void editEntryRequested(const QModelIndex &selectedIndex);
     virtual void deleteEntryRequested();
@@ -137,6 +144,9 @@ private slots:
     virtual void filterTextChanged(const QString &filterString) = 0;
 
 public slots:
+    /*!
+     * \brief refresh the view after a Database change
+     */
     void databaseContentChanged();
 
 };