Selaa lähdekoodia

Rework of NewFlight Dialog construction and setup

fiffty-50 4 vuotta sitten
vanhempi
commit
cc1a0cda1e
3 muutettua tiedostoa jossa 55 lisäystä ja 62 poistoa
  1. 8 4
      mainwindow.cpp
  2. 46 55
      newflight.cpp
  3. 1 3
      newflight.h

+ 8 - 4
mainwindow.cpp

@@ -119,9 +119,13 @@ void MainWindow::on_actionSettings_triggered()
 
 void MainWindow::on_actionNewFlight_triggered()
 {
-    auto locationList = dbAirport::retreiveIataIcaoList();
-    auto registrationList = dbAircraft::retreiveRegistrationList();
-    auto pilotList = dbPilots::retreivePilotList();
-    NewFlight nf(this, locationList, registrationList, pilotList);
+    QVector<QStringList> lineEdit_completionLists = {
+        QStringList(),//empty dummy list for TimeLineEdits
+        dbAirport::retreiveIataIcaoList(),
+        dbAircraft::retreiveRegistrationList(),
+        dbPilots::retreivePilotList()
+    };
+
+    NewFlight nf(this, lineEdit_completionLists);
     nf.exec();
 }

+ 46 - 55
newflight.cpp

@@ -59,14 +59,14 @@ QTime               tblk;
 QString             pic                 =   "-1";
 QString             acft                =   "-1";
 // extras
-QString             secondPilot         = "-1";
-QString             thirdPilot          = "-1";
-QString             pilotFunction       = "-1";
-QString             pilotTask           = "-1";
-QString             takeoff             = "0";
-QString             landing             = "0";
-QString             autoland            = "0";
-QString             approachType        = "-1";
+QString             secondPilot         =   "-1";
+QString             thirdPilot          =   "-1";
+QString             pilotFunction       =   "-1";
+QString             pilotTask           =   "-1";
+QString             takeoff             =   "0";
+QString             landing             =   "0";
+QString             autoland            =   "0";
+QString             approachType        =   "-1";
 // extra times
 QString             tSPSE               =   "00:00";
 QString             tSPME               =   "00:00";
@@ -76,22 +76,22 @@ QString             tMP                 =   "00:00";
 bool                hasOldInput         = dbFlight::checkScratchpad();
 
 /// Raw Input validation
-const QString TIME_REGEX_PATTERN        = "([01]?[0-9]?|2[0-3]):?[0-5][0-9]?";// We only want to allow inputs that make sense as a time, e.g. 99:99 is not a valid time
-const QString IATA                      = "[\\w]{3}";
-const QString ICAO                      = "[\\w0-9]{4}";
-const QString LOC_REGEX_PATTERN         = IATA + "|" + ICAO;
-const QString AIRCRAFT_REGEX_PATTERN    = "[\\w0-9]+-?([\\w0-9]?)+";
-const QString PILOT_NAME_REGEX_PATTERN  = "[\\w]+,? ?[\\w]+";
+const QString TIME_REGEX_PATTERN        =   "([01]?[0-9]?|2[0-3]):?[0-5][0-9]?";// We only want to allow inputs that make sense as a time, e.g. 99:99 is not a valid time
+const QString IATA                      =   "[a-zA-Z0-9]{3}";
+const QString ICAO                      =   "[a-zA-Z0-9]{4}";
+const QString LOC_REGEX_PATTERN         =   IATA + "|" + ICAO;
+const QString AIRCRAFT_REGEX_PATTERN    =   "[\\w0-9]+-?([\\w0-9]?)+";
+const QString PILOT_NAME_REGEX_PATTERN  =   "[\\w]+,? ?[\\w]+";
 
 /// Invalid characters (validators keep text even if it returns Invalid, see `onInputRejected` below)
-const QString TIME_INVALID_RGX          = "[^\\d:]";
-const QString LOC_INVALID_RGX           = "[^\\w0-9]";
-const QString AIRCRAFT_INVALID_RGX      = "[^A-Z0-9\\-]";
-const QString PILOT_NAME_INVALID_RGX    = "[^a-zA-Z, ]";
+const QString TIME_INVALID_RGX          =   "[^\\d:]";
+const QString LOC_INVALID_RGX           =   "[^a-zA-Z0-9]";
+const QString AIRCRAFT_INVALID_RGX      =   "[^A-Z0-9\\-]";
+const QString PILOT_NAME_INVALID_RGX    =   "[^a-zA-Z, ]";
 
 /// Input max lengths
 const qint8 TIME_MAX_LENGTH             = 5; //to allow for ':' e.g. "08:45"
-const qint8 LOC_MAX_LENGTH              = 4; //!
+const qint8 LOC_MAX_LENGTH              = 4;
 const qint8 AIRCRAFT_MAX_LENGTH         = 10;
 const qint8 PILOT_NAME_MAX_LENGTH       = 15;
 
@@ -100,16 +100,21 @@ const qint8 PILOT_NAME_MAX_LENGTH       = 15;
  * \brief setLineEditValidator set Validators for QLineEdits that end with Time, Loc,
  * Aircraft or Name
  */
-static inline void setupLineEdit(QLineEdit* line_edit)
+static inline void setupLineEdit(QLineEdit* line_edit, QVector<QStringList> completionLists)
 {
     auto line_edit_objectName = line_edit->objectName();
     DEBUG("Setting validators for " << line_edit_objectName);
     static const
-    QVector<std::tuple<QRegularExpression, QRegularExpression, qint8>> objectName_inputValidation_rgxs = {
-        {QRegularExpression("\\w+Time"),     QRegularExpression(TIME_REGEX_PATTERN),       TIME_MAX_LENGTH},
-        {QRegularExpression("\\w+Loc"),      QRegularExpression(LOC_REGEX_PATTERN),        LOC_MAX_LENGTH},
-        {QRegularExpression("\\w+Acft"),     QRegularExpression(AIRCRAFT_REGEX_PATTERN),   AIRCRAFT_MAX_LENGTH},
-        {QRegularExpression("\\w+Name"),     QRegularExpression(PILOT_NAME_REGEX_PATTERN), PILOT_NAME_MAX_LENGTH},
+    QVector<std::tuple<QRegularExpression, QRegularExpression,
+            qint8, QStringList>> objectName_inputValidation_rgxs = {
+        {QRegularExpression("\\w+Time"),    QRegularExpression(TIME_REGEX_PATTERN),
+         TIME_MAX_LENGTH,                   completionLists[0]},
+        {QRegularExpression("\\w+Loc"),     QRegularExpression(LOC_REGEX_PATTERN),
+         LOC_MAX_LENGTH,                    completionLists[1]},
+        {QRegularExpression("\\w+Acft"),    QRegularExpression(AIRCRAFT_REGEX_PATTERN),
+         AIRCRAFT_MAX_LENGTH,               completionLists[2]},
+        {QRegularExpression("\\w+Name"),    QRegularExpression(PILOT_NAME_REGEX_PATTERN),
+         PILOT_NAME_MAX_LENGTH,             completionLists[3]},
     };
 
     auto validator = new StrictRegularExpressionValidator();
@@ -118,11 +123,19 @@ static inline void setupLineEdit(QLineEdit* line_edit)
         auto objName_rgx = std::get<0>(tuple);
         auto input_rgx = std::get<1>(tuple);
         auto max_length = std::get<2>(tuple);
+        auto completer_list = std::get<3>(tuple);
         if(objName_rgx.match(line_edit_objectName).hasMatch())
         {
             validator->setRegularExpression(input_rgx);
             line_edit->setValidator(validator);
             line_edit->setMaxLength(max_length);
+            QCompleter* completer = new QCompleter(completer_list, line_edit);
+            completer->setCaseSensitivity(Qt::CaseInsensitive);
+            completer->setCompletionMode(QCompleter::PopupCompletion);
+            if(objName_rgx != QRegularExpression("\\w+Loc")){
+                completer->setFilterMode(Qt::MatchContains);
+            }
+            line_edit->setCompleter(completer);
             return;
         }
     }
@@ -175,41 +188,19 @@ void NewFlight::restoreSettings()
  * Window Construction
  */
 
-NewFlight::NewFlight(QWidget *parent, QStringList locationList,
-                                      QStringList registrationList,
-                                      QStringList pilotList) :
+NewFlight::NewFlight(QWidget *parent, QVector<QStringList> completionLists) :
     QDialog(parent),
     ui(new Ui::NewFlight)
 {
     ui->setupUi(this);
-    // Set up Line Edits with QValidators and set Max length
+    // Set up Line Edits with QValidators, QCompleters and set Max length
     auto line_edits = ui->flightDataTab->findChildren<QLineEdit*>() +
-            ui->extraTimes->findChildren<QLineEdit*>();
-    for(auto line_edit : line_edits)
-    {
-        setupLineEdit(line_edit);
-    }
-
-    // Airport Line Edits Auto Completion
-    auto *locationCompleter = new QCompleter(locationList);
-    locationCompleter->setCaseSensitivity(Qt::CaseInsensitive);
-    locationCompleter->setCompletionMode(QCompleter::PopupCompletion);
-    ui->newDeptLocLineEdit->setCompleter(locationCompleter);
-    ui->newDestLocLineEdit->setCompleter(locationCompleter);
-    // Aircraft Line Edits Auto Completion
-    auto *aircraftCompleter = new QCompleter(registrationList);
-    aircraftCompleter->setCaseSensitivity(Qt::CaseInsensitive);
-    aircraftCompleter->setCompletionMode(QCompleter::PopupCompletion);
-    aircraftCompleter->setFilterMode(Qt::MatchContains);
-    ui->newAcft->setCompleter(aircraftCompleter);
-    // Pilot Line Edits Auto Completion
-    auto *pilotCompleter = new QCompleter(pilotList);
-    pilotCompleter->setCaseSensitivity(Qt::CaseInsensitive);
-    pilotCompleter->setCompletionMode(QCompleter::PopupCompletion);
-    pilotCompleter->setFilterMode(Qt::MatchContains);
-    ui->newPicNameLineEdit->setCompleter(pilotCompleter);
-    ui->secondPilotNameLineEdit->setCompleter(pilotCompleter);;
-    ui->thirdPilotNameLineEdit->setCompleter(pilotCompleter);
+                ui->extraTimes->findChildren<QLineEdit*>();
+    DEBUG(line_edits);
+        for(auto line_edit : line_edits)
+        {
+            setupLineEdit(line_edit, completionLists);
+        }
 
 
     // Groups for CheckBoxes

+ 1 - 3
newflight.h

@@ -46,9 +46,7 @@ class NewFlight : public QDialog
     Q_OBJECT
 
 public:
-    explicit NewFlight(QWidget *parent, QStringList locationList,
-                                        QStringList registrationList,
-                                        QStringList pilotList);
+    explicit NewFlight(QWidget *parent, QVector<QStringList>);
     ~NewFlight();
 
 private slots: