|  | @@ -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
 |