Bläddra i källkod

Refactored set up for QCompleters and QValidators

Refactored set up for QCompleters and QValidators to improve efficiency in the loop. Init Data now held in a struct instead of the previously used tuple to improve readability.
Felix Turo 3 år sedan
förälder
incheckning
27352357e0
2 ändrade filer med 53 tillägg och 32 borttagningar
  1. 35 32
      src/gui/dialogues/newflightdialog.cpp
  2. 18 0
      src/gui/dialogues/newflightdialog.h

+ 35 - 32
src/gui/dialogues/newflightdialog.cpp

@@ -149,46 +149,50 @@ void NewFlightDialog::setupButtonGroups()
 void NewFlightDialog::setupRawInputValidation()
 {
     // Define Regular Expressions
-    const auto time_valid_rx = QRegularExpression("([01]?[0-9]|2[0-3]):?[0-5][0-9]?");
-    const auto loc_valid_rx  = QRegularExpression("[a-zA-Z0-9]{1,4}");
-    const auto acft_valid_rx = QRegularExpression("\\w+\\-?(\\w+)?");
     const auto name_rx       = QLatin1String("((\\p{L}+)?('|\\-|,)?(\\p{L}+)?)");
     const auto add_name_rx   = QLatin1String("(\\s?(\\p{L}+('|\\-|,)?\\p{L}+?))?");
+    const auto time_valid_rx = QRegularExpression("([01]?[0-9]|2[0-3]):?[0-5][0-9]?");
+    const auto loc_valid_rx  = QRegularExpression("[a-zA-Z0-9]{1,4}");
+    const auto acft_valid_rx = QRegularExpression("\\w+\\-?(\\w+)?");   
     const auto name_valid_rx = QRegularExpression(
                 name_rx + add_name_rx + add_name_rx + add_name_rx + ",?\\s?" // up to 4 first names
-                + name_rx + add_name_rx + add_name_rx + add_name_rx );         // up to 4 last names
-    auto tempList = QStringList();
-    // define tuples
-    const std::tuple<QString, QStringList*, QRegularExpression>
-            location_line_edit_settings {QStringLiteral("Loc"), &completionData.airportList, loc_valid_rx};
-    const std::tuple<QString, QStringList*, QRegularExpression>
-            name_line_edit_settings {QStringLiteral("Name"), &completionData.pilotList, name_valid_rx};
-    const std::tuple<QString, QStringList*, QRegularExpression>
-            acft_line_edit_settings {QStringLiteral("acft"), &completionData.tailsList, acft_valid_rx};
-    const std::tuple<QString, QStringList*, QRegularExpression>
-            time_line_edit_settings {QStringLiteral("Time"), &tempList, time_valid_rx};
-    const QList<std::tuple<QString, QStringList*, QRegularExpression>> line_edit_settings = {
-        location_line_edit_settings,
-        name_line_edit_settings,
-        acft_line_edit_settings,
-        time_line_edit_settings
+              + name_rx + add_name_rx + add_name_rx + add_name_rx );         // up to 4 last names
+
+    // create the structs holding the inititalisation data and store them in a map
+    const auto location_data = ValidationSetupData(&completionData.airportList, &loc_valid_rx);
+    const auto pilot_data    = ValidationSetupData(&completionData.pilotList, &name_valid_rx);
+    const auto aircraft_data = ValidationSetupData(&completionData.tailsList, &acft_valid_rx);
+    const auto time_data     = ValidationSetupData(&time_valid_rx);
+
+    const QMap<QString, const ValidationSetupData*> init_data_map = {
+        {QStringLiteral("Loc"),  &location_data},
+        {QStringLiteral("Name"), &pilot_data},
+        {QStringLiteral("acft"), &aircraft_data},
+        {QStringLiteral("Time"), &time_data}
     };
-    //get line edits, set up completers and validators
-    const auto line_edits = ui->flightDataTab->findChildren<QLineEdit*>();
 
-    for (const auto &item : line_edit_settings) {
-        for (const auto &line_edit : line_edits) {
-            if(line_edit->objectName().contains(std::get<0>(item))) {
-                // DEB << "Setting up: " << line_edit->objectName();
+    //get and set up line edits
+    const QList<QLineEdit*> line_edits = ui->flightDataTab->findChildren<QLineEdit*>();
+    const QList<QString> keys_list = init_data_map.keys();
+
+    for (const auto &line_edit : line_edits) {
+        for (const auto &key : keys_list ) {
+            if (line_edit->objectName().contains(key)) {
+                // Fetch Data from the map and set up the line edit
+                const ValidationSetupData* init_data = init_data_map.value(key);
+                DEB << "Setting up: " << line_edit->objectName();
+
                 // Set Validator
-                auto validator = new QRegularExpressionValidator(std::get<2>(item), line_edit);
+                auto validator = new QRegularExpressionValidator(*init_data->validationRegEx, line_edit);
                 line_edit->setValidator(validator);
                 // Set Completer
-                auto completer = new QCompleter(*std::get<1>(item), line_edit);
-                completer->setCaseSensitivity(Qt::CaseInsensitive);
-                completer->setCompletionMode(QCompleter::PopupCompletion);
-                completer->setFilterMode(Qt::MatchContains);
-                line_edit->setCompleter(completer);
+                if (init_data->completionData) {
+                    auto completer = new QCompleter(*init_data->completionData, line_edit);
+                    completer->setCaseSensitivity(Qt::CaseInsensitive);
+                    completer->setCompletionMode(QCompleter::PopupCompletion);
+                    completer->setFilterMode(Qt::MatchContains);
+                    line_edit->setCompleter(completer);
+                }
             }
         }
     }
@@ -204,7 +208,6 @@ void NewFlightDialog::setupRawInputValidation()
         ui->picNameLineEdit,
         ui->acftLineEdit,
     };
-
     primaryTimeLineEdits = {
         ui->tofbTimeLineEdit,
         ui->tonbTimeLineEdit

+ 18 - 0
src/gui/dialogues/newflightdialog.h

@@ -39,7 +39,25 @@
 #include "src/database/adatabase.h"
 #include "src/classes/acompletiondata.h"
 
+
+/*!
+ * \brief The ValidationSetupData struct encapsulates the items required to initialise
+ * the line edits with QValidators and QCompleters
+ */
+struct ValidationSetupData
+{
+    ValidationSetupData(QStringList* completion_data, const QRegularExpression* validation_RegEx)
+        : completionData(completion_data), validationRegEx(validation_RegEx){};
+
+    ValidationSetupData(const QRegularExpression* validation_RegEx)
+        : completionData(nullptr), validationRegEx(validation_RegEx){};
+
+    const QStringList* completionData;
+    const QRegularExpression* validationRegEx;
+};
+
 namespace Ui {
+
 class NewFlight;
 }