newnewflightdialog.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #ifndef NEWNEWFLIGHTDIALOG_H
  2. #define NEWNEWFLIGHTDIALOG_H
  3. #include <QDialog>
  4. #include <QDebug>
  5. #include <QLineEdit>
  6. #include <QList>
  7. #include <QBitArray>
  8. #include "src/functions/atime.h"
  9. #include "src/classes/acompletiondata.h"
  10. #include "src/classes/aflightentry.h"
  11. #include "src/classes/apilotentry.h"
  12. #include "src/classes/atailentry.h"
  13. #include "src/database/adatabase.h"
  14. #include "src/opl.h"
  15. /*!
  16. * \brief The ValidationItem enum contains the items that are mandatory for logging a flight:
  17. * Date of Flight, Departure, Destination, Time Off Blocks, Time On Blocks, Pilot in Command, Aircraft Registration
  18. */
  19. enum ValidationItem {doft = 0, dept = 1, dest = 2, tofb = 3, tonb = 4, pic = 5, acft = 6};
  20. /*!
  21. * \brief The ValidationState class encapsulates a QBitArray that has a bit set (or unset) depending on wether the
  22. * input for the associated index has been verified. The indexes correspond to the mandatory items enumerated in the
  23. * ValidationItem enum.
  24. */
  25. class ValidationState {
  26. public:
  27. ValidationState() = default;
  28. void validate(ValidationItem item) { validationArray[item] = true;};
  29. void validate(int index) { validationArray[index] = true;};
  30. void invalidate(ValidationItem item) { validationArray[item] = false;}
  31. void invalidate(int index) { validationArray[index] = false;}
  32. inline bool allValid() { return validationArray.count(true) == 7;};
  33. inline bool timesValid() { return validationArray[ValidationItem::tofb] && validationArray[ValidationItem::tonb];}
  34. inline bool locationsValid() { return validationArray[ValidationItem::dept] && validationArray[ValidationItem::dest];}
  35. inline bool nightDataValid() { return timesValid() && locationsValid() && validationArray[ValidationItem::doft];}
  36. inline bool acftValid() { return validationArray[ValidationItem::acft];}
  37. inline bool validAt(int index) { return validationArray[index];}
  38. inline bool validAt(ValidationItem item) { return validationArray[item];}
  39. // Debug
  40. void printValidationStatus(){
  41. QString deb_string("\033[mValidation State:\tdoft\tdept\tdest\ttofb\ttonb\tpic\tacft\n");
  42. deb_string += "\t\t\t\t";
  43. for (int i = 0; i < 7; i++) { //\033[32m
  44. if (validationArray[i])
  45. deb_string += "\t\033[32m" + QString::number(validationArray[i]);
  46. else
  47. deb_string += "\t\033[31m" + QString::number(validationArray[i]);
  48. }
  49. deb_string += QLatin1String("\u001b[38;5;75m"); // return to default DEB
  50. qDebug().noquote() << deb_string;
  51. }
  52. private:
  53. QBitArray validationArray = QBitArray(7);
  54. };
  55. /*!
  56. * \brief The ValidationSetupData struct encapsulates the items required to initialise
  57. * the line edits with QValidators and QCompleters
  58. */
  59. struct ValidationSetupData
  60. {
  61. ValidationSetupData(const QStringList& completion_data, const QRegularExpression& validation_RegEx)
  62. : completionList(completion_data), validationRegEx(validation_RegEx){};
  63. ValidationSetupData(const QStringList& completion_data)
  64. : completionList(completion_data){
  65. };
  66. ValidationSetupData(const QRegularExpression& validation_RegEx)
  67. : completionList(nullptr), validationRegEx(validation_RegEx){};
  68. const QStringList completionList;
  69. const QRegularExpression validationRegEx;
  70. };
  71. namespace Ui {
  72. class NewNewFlightDialog;
  73. }
  74. class NewNewFlightDialog : public QDialog
  75. {
  76. Q_OBJECT
  77. public:
  78. explicit NewNewFlightDialog(ACompletionData& completion_data, QWidget *parent = nullptr);
  79. ~NewNewFlightDialog();
  80. private:
  81. Ui::NewNewFlightDialog *ui;
  82. ACompletionData completionData;
  83. ValidationState validationState;
  84. /*!
  85. * \brief a AFlightEntry object that is used to store either position data
  86. * from an old entry, is used to fill the form for editing an entry, or is
  87. * filled with new data for adding a new entry to the logbook.
  88. */
  89. AFlightEntry flightEntry;
  90. static const inline QList<QLineEdit*>* timeLineEdits;
  91. static const inline QList<QLineEdit*>* locationLineEdits;
  92. static const inline QList<QLineEdit*>* pilotNameLineEdits;
  93. static const inline QList<QLineEdit*>* mandatoryLineEdits;
  94. static const inline QLatin1String self = QLatin1String("self");
  95. void init();
  96. void setupRawInputValidation();
  97. void setupSignalsAndSlots();
  98. void readSettings();
  99. void onGoodInputReceived(QLineEdit *line_edit);
  100. void onBadInputReceived(QLineEdit *line_edit);
  101. void updateNightCheckBoxes();
  102. void setNightCheckboxes();
  103. void updateBlockTimeLabel();
  104. void addNewTail(QLineEdit& parent_line_edit);
  105. void addNewPilot(QLineEdit& parent_line_edit);
  106. RowData_T prepareFlightEntryData();
  107. private slots:
  108. void toUpper(const QString& text);
  109. void onTimeLineEdit_editingFinished();
  110. void onPilotNameLineEdit_editingFinshed();
  111. void onLocationLineEdit_editingFinished();
  112. void on_acftLineEdit_editingFinished();
  113. void on_doftLineEdit_editingFinished();
  114. void on_buttonBox_accepted();
  115. void on_pilotFlyingCheckBox_stateChanged(int arg1);
  116. void on_approachComboBox_currentTextChanged(const QString &arg1);
  117. void on_functionComboBox_currentIndexChanged(int index);
  118. };
  119. #endif // NEWNEWFLIGHTDIALOG_H