Browse Source

Moved validation state into separate source file

Moved ValidationState
Added Airport Names to DatabasaCache
Felix Turowsky 2 years ago
parent
commit
2c534dc4e1

+ 1 - 0
CMakeLists.txt

@@ -75,6 +75,7 @@ set(PROJECT_SOURCES
     src/gui/widgets/settingswidget.h
     src/gui/widgets/settingswidget.ui
     # Verification
+    src/gui/verification/validationstate.h
     src/gui/verification/userinput.h
     src/gui/verification/userinput.cpp
     src/gui/verification/timeinput.h

+ 13 - 4
src/database/databasecache.cpp

@@ -32,6 +32,9 @@ const IdMap DatabaseCache::fetchMap(CompleterTarget target)
     case AirportsIATA:
         statement.append(QStringLiteral("SELECT ROWID, iata FROM airports WHERE iata NOT NULL"));
         break;
+    case AirportNames:
+        statement.append(QStringLiteral("SELECT ROWID, name FROM airports"));
+        break;
     case PilotNames:
         statement.append(QStringLiteral("SELECT ROWID, lastname||', '||firstname FROM pilots"));
         break;
@@ -71,7 +74,7 @@ const QStringList DatabaseCache::fetchList(CompleterTarget target)
                          "UNION "
                          "SELECT make||' '||model||'-'||variant FROM aircraft WHERE variant IS NOT NULL"));
         break;
-    case Airports:
+    case AirportsAny:
         statement.append(QStringLiteral("SELECT icao FROM airports UNION SELECT iata FROM airports"));
         break;
     case Tails:
@@ -116,9 +119,10 @@ void DatabaseCache::updateTails()
 
 void DatabaseCache::updateAirports()
 {
-    airportsMapIATA = fetchMap(AirportsIATA);
-    airportsMapICAO = fetchMap(AirportsICAO);
-    airportList = fetchList(Airports);
+    airportsMapIATA  = fetchMap(AirportsIATA);
+    airportsMapICAO  = fetchMap(AirportsICAO);
+    airportsMapNames = fetchMap(AirportNames);
+    airportList      = fetchList(AirportsAny);
 }
 
 void DatabaseCache::updateSimulators()
@@ -208,6 +212,11 @@ const IdMap &DatabaseCache::getAircraftMap() const
     return aircraftMap;
 }
 
+const IdMap &DatabaseCache::getAirportsMapNames() const
+{
+    return airportsMapNames;
+}
+
 const IdMap &DatabaseCache::getTailsMap() const
 {
     return tailsMap;

+ 4 - 1
src/database/databasecache.h

@@ -27,7 +27,7 @@ public:
     DatabaseCache(DatabaseCache const&) = delete;
     void operator=(DatabaseCache const&) = delete;
 
-    enum CompleterTarget {PilotNames, Tails, AircraftTypes, Airports, AirportsICAO, AirportsIATA, Companies};
+    enum CompleterTarget {PilotNames, Tails, AircraftTypes, AirportsAny, AirportsICAO, AirportNames, AirportsIATA, Companies};
 
     void init();
 
@@ -46,6 +46,8 @@ public:
 
     const IdMap &getAircraftMap() const;
 
+    const IdMap &getAirportsMapNames() const;
+
 private:
     Q_OBJECT
     DatabaseCache() {};
@@ -53,6 +55,7 @@ private:
     // Id Maps
     IdMap airportsMapICAO;
     IdMap airportsMapIATA;
+    IdMap airportsMapNames;
     IdMap pilotNamesMap;
     IdMap tailsMap;
     IdMap aircraftMap;

+ 19 - 29
src/gui/dialogues/newflightdialog.cpp

@@ -39,7 +39,6 @@ NewFlightDialog::NewFlightDialog(QWidget *parent)
       ui(new Ui::NewFlightDialog)
 {
     init();
-    //flightEntry = AFlightEntry();
     // Set up UI (New Flight)
     LOG << Settings::read(Settings::FlightLogging::Function);
     if(Settings::read(Settings::FlightLogging::Function).toInt() == static_cast<int>(OPL::PilotFunction::PIC)){
@@ -155,7 +154,6 @@ bool NewFlightDialog::eventFilter(QObject *object, QEvent *event)
         if (mandatoryLineEdits->contains(line_edit) && event->type() == QEvent::FocusIn) {
             // set verification bit to false when entering a mandatory line edit
             validationState.invalidate(mandatoryLineEdits->indexOf(line_edit));
-            DEB << "Invalidating: " << line_edit->objectName();
             return false;
         }
     }
@@ -311,7 +309,7 @@ bool NewFlightDialog::addNewTail(QLineEdit& parent_line_edit)
             DEB << "New Tail Entry added:";
             DEB << DB->getTailEntry(DB->getLastEntry(OPL::DbTable::Tails));
 
-            // update Line Edit
+            // update Line Edit with newly added tail
             parent_line_edit.setText(DBCache->getTailsMap().value(DB->getLastEntry(OPL::DbTable::Tails)));
             return true;
         } else {
@@ -345,7 +343,7 @@ bool NewFlightDialog::addNewPilot(QLineEdit& parent_line_edit)
             DEB << "New Pilot Entry added:";
             DEB << DB->getPilotEntry(DB->getLastEntry(OPL::DbTable::Pilots));
 
-            // update Line Edit
+            // update Line Edit with newly added pilot
             parent_line_edit.setText(DBCache->getPilotNamesMap().value(DB->getLastEntry(OPL::DbTable::Pilots)));
             return true;
         } else {
@@ -513,29 +511,12 @@ void NewFlightDialog::toUpper(const QString &text)
 void NewFlightDialog::onTimeLineEdit_editingFinished()
 {
     auto line_edit = this->findChild<QLineEdit*>(sender()->objectName());
-    DEB << line_edit->objectName() << "Editing finished -" << line_edit->text();
-
-    TimeInput user_in = TimeInput(line_edit->text());
-    if(!user_in.isValid()) {
-        QString fixed = user_in.fixup();
-        if(fixed == QString()) {
-            onBadInputReceived(line_edit);
-            return;
-        } else {
-            line_edit->setText(fixed);
-            onGoodInputReceived(line_edit);
-            return;
-        }
-    }
-
-    onGoodInputReceived(line_edit);
+    verifyUserInput(line_edit, TimeInput(line_edit->text()));
 }
 
 void NewFlightDialog::onPilotNameLineEdit_editingFinshed()
 {
     auto line_edit = this->findChild<QLineEdit*>(sender()->objectName());
-    DEB << line_edit->objectName() << "Editing Finished -" << line_edit->text();
-
     if(!verifyUserInput(line_edit, PilotInput(line_edit->text()))) {
         if(!addNewPilot(*line_edit))
             onBadInputReceived(line_edit);
@@ -546,15 +527,24 @@ void NewFlightDialog::onLocationLineEdit_editingFinished()
 {
     const QString& line_edit_name = sender()->objectName();
     const auto line_edit = this->findChild<QLineEdit*>(line_edit_name);
+    QLabel* name_label;
+    if (line_edit_name.contains(QLatin1String("dept")))
+        name_label = ui->deptNameLabel;
+    else
+        name_label = ui->destNameLabel;
 
-    if( verifyUserInput(line_edit, AirportInput(line_edit->text())) ) {
-        QLabel* name_label;
-        if (line_edit_name.contains(QLatin1String("dept")))
-            name_label = ui->deptNameLabel;
-        else
-            name_label = ui->destNameLabel;
-    name_label->setText("Lookup Airport ID and match");
+
+    if(verifyUserInput(line_edit, AirportInput(line_edit->text())) ) {
+        DEB << "verified: " << line_edit->text();
+        DEB << "Key: " << DBCache->getAirportsMapICAO().key(line_edit->text());
+        DEB << "Value: " << DBCache->getAirportsMapNames().value(2617);
+
+        name_label->setText(DBCache->getAirportsMapNames().value(
+                                DBCache->getAirportsMapICAO().key(
+                                    line_edit->text())));
     }
+    else
+        name_label->setText("Unknown Airport");
 }
 
 void NewFlightDialog::on_acftLineEdit_editingFinished()

+ 1 - 46
src/gui/dialogues/newflightdialog.h

@@ -27,52 +27,7 @@
 #include "src/gui/verification/userinput.h"
 #include "src/opl.h"
 #include "src/database/row.h"
-
-
-
-/*!
- * \brief The ValidationState class encapsulates a QBitArray that has a bit set (or unset) depending on wether the
- * input for the associated index has been verified. The indexes correspond to the mandatory items enumerated in the
- * ValidationItem enum.
- */
-class ValidationState {
-public:
-    ValidationState() = default;
-
-    /*!
-     * \brief The ValidationItem enum contains the items that are mandatory for logging a flight:
-     * Date of Flight, Departure, Destination, Time Off Blocks, Time On Blocks, Pilot in Command, Aircraft Registration
-     */
-    enum ValidationItem {doft = 0, dept = 1, dest = 2, tofb = 3, tonb = 4, pic = 5, acft = 6};
-
-    void validate(ValidationItem item)             { validationArray[item] = true;};
-    void validate(int index)                       { validationArray[index] = true;};
-    void invalidate(ValidationItem item)           { validationArray[item] = false;}
-    void invalidate(int index)                     { validationArray[index] = false;}
-    inline bool allValid() const                   { return validationArray.count(true) == 7;};
-    inline bool timesValid() const                 { return validationArray[ValidationItem::tofb] && validationArray[ValidationItem::tonb];}
-    inline bool locationsValid() const             { return validationArray[ValidationItem::dept] && validationArray[ValidationItem::dest];}
-    inline bool nightDataValid() const             { return timesValid() && locationsValid() && validationArray[ValidationItem::doft];}
-    inline bool acftValid() const                  { return validationArray[ValidationItem::acft];}
-    inline bool validAt(int index) const           { return validationArray[index];}
-    inline bool validAt(ValidationItem item) const { return validationArray[item];}
-
-    // Debug
-    void printValidationStatus() const {
-        QString deb_string("\033[mValidation State:\tdoft\tdept\tdest\ttofb\ttonb\tpic\tacft\n");
-        deb_string += "\t\t\t\t";
-        for (int i = 0; i < 7; i++) { //\033[32m
-            if (validationArray[i])
-                deb_string += "\t\033[32m" + QString::number(validationArray[i]);
-            else
-                deb_string += "\t\033[31m" + QString::number(validationArray[i]);
-        }
-        deb_string += QLatin1String("\u001b[38;5;75m"); // return to default DEB
-        qDebug().noquote() << deb_string;
-    }
-private:
-    QBitArray validationArray = QBitArray(7);
-};
+#include "src/gui/verification/validationstate.h"
 
 namespace Ui {
 class NewFlightDialog;

+ 49 - 0
src/gui/verification/validationstate.h

@@ -0,0 +1,49 @@
+#ifndef VALIDATIONSTATE_H
+#define VALIDATIONSTATE_H
+#include <QtCore>
+
+/*!
+ * \brief Holds information about whether mandatory components of a new flight entry have been validated.
+ * \details The ValidationState class encapsulates a QBitArray that has a bit set (or unset) depending on wether the
+ * input for the associated index has been verified. The indexes correspond to the mandatory items enumerated in the
+ * ValidationItem enum. It is used by the NewFlightDialog to keep track of validation states.
+ */
+class ValidationState {
+public:
+    ValidationState() = default;
+
+    /*!
+     * \brief The ValidationItem enum contains the items that are mandatory for logging a flight:
+     * Date of Flight, Departure, Destination, Time Off Blocks, Time On Blocks, Pilot in Command, Aircraft Registration
+     */
+    enum ValidationItem {doft = 0, dept = 1, dest = 2, tofb = 3, tonb = 4, pic = 5, acft = 6};
+
+    void validate(ValidationItem item)             { validationArray[item] = true;};
+    void validate(int index)                       { validationArray[index] = true;};
+    void invalidate(ValidationItem item)           { validationArray[item] = false;}
+    void invalidate(int index)                     { validationArray[index] = false;}
+    inline bool allValid() const                   { return validationArray.count(true) == 7;};
+    inline bool timesValid() const                 { return validationArray[ValidationItem::tofb] && validationArray[ValidationItem::tonb];}
+    inline bool locationsValid() const             { return validationArray[ValidationItem::dept] && validationArray[ValidationItem::dest];}
+    inline bool nightDataValid() const             { return timesValid() && locationsValid() && validationArray[ValidationItem::doft];}
+    inline bool acftValid() const                  { return validationArray[ValidationItem::acft];}
+    inline bool validAt(int index) const           { return validationArray[index];}
+    inline bool validAt(ValidationItem item) const { return validationArray[item];}
+
+    // Debug
+    void printValidationStatus() const {
+        QString deb_string("\033[mValidation State:\tdoft\tdept\tdest\ttofb\ttonb\tpic\tacft\n");
+        deb_string += "\t\t\t\t";
+        for (int i = 0; i < 7; i++) { //\033[32m
+            if (validationArray[i])
+                deb_string += "\t\033[32m" + QString::number(validationArray[i]);
+            else
+                deb_string += "\t\033[31m" + QString::number(validationArray[i]);
+        }
+        deb_string += QLatin1String("\u001b[38;5;75m"); // return to default DEB
+        qDebug().noquote() << deb_string;
+    }
+private:
+    QBitArray validationArray = QBitArray(7);
+};
+#endif // VALIDATIONSTATE_H