openPilotLog
newflightdialog.h
1 /*
2  *openPilotLog - A FOSS Pilot Logbook Application
3  *Copyright (C) 2020-2021 Felix Turowsky
4  *
5  *This program is free software: you can redistribute it and/or modify
6  *it under the terms of the GNU General Public License as published by
7  *the Free Software Foundation, either version 3 of the License, or
8  *(at your option) any later version.
9  *
10  *This program is distributed in the hope that it will be useful,
11  *but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *GNU General Public License for more details.
14  *
15  *You should have received a copy of the GNU General Public License
16  *along with this program. If not, see <https://www.gnu.org/licenses/>.
17  */
18 #ifndef NewFlightDialog_H
19 #define NewFlightDialog_H
20 
21 #include <QDialog>
22 #include <QDebug>
23 #include <QLineEdit>
24 #include <QList>
25 #include <QBitArray>
26 
27 #include "src/functions/atime.h"
28 #include "src/database/database.h"
29 #include "src/database/dbcompletiondata.h"
30 #include "src/opl.h"
31 #include "src/database/row.h"
32 
37 enum ValidationItem {doft = 0, dept = 1, dest = 2, tofb = 3, tonb = 4, pic = 5, acft = 6};
38 
45 public:
46  ValidationState() = default;
47 
48  void validate(ValidationItem item) { validationArray[item] = true;};
49  void validate(int index) { validationArray[index] = true;};
50  void invalidate(ValidationItem item) { validationArray[item] = false;}
51  void invalidate(int index) { validationArray[index] = false;}
52  inline bool allValid() const { return validationArray.count(true) == 7;};
53  inline bool timesValid() const { return validationArray[ValidationItem::tofb] && validationArray[ValidationItem::tonb];}
54  inline bool locationsValid() const { return validationArray[ValidationItem::dept] && validationArray[ValidationItem::dest];}
55  inline bool nightDataValid() const { return timesValid() && locationsValid() && validationArray[ValidationItem::doft];}
56  inline bool acftValid() const { return validationArray[ValidationItem::acft];}
57  inline bool validAt(int index) const { return validationArray[index];}
58  inline bool validAt(ValidationItem item) const { return validationArray[item];}
59 
60  // Debug
61  void printValidationStatus() const {
62  QString deb_string("\033[mValidation State:\tdoft\tdept\tdest\ttofb\ttonb\tpic\tacft\n");
63  deb_string += "\t\t\t\t";
64  for (int i = 0; i < 7; i++) { //\033[32m
65  if (validationArray[i])
66  deb_string += "\t\033[32m" + QString::number(validationArray[i]);
67  else
68  deb_string += "\t\033[31m" + QString::number(validationArray[i]);
69  }
70  deb_string += QLatin1String("\u001b[38;5;75m"); // return to default DEB
71  qDebug().noquote() << deb_string;
72  }
73 private:
74  QBitArray validationArray = QBitArray(7);
75 };
76 
77 namespace Ui {
78 class NewFlightDialog;
79 }
105 class NewFlightDialog : public QDialog
106 {
107  Q_OBJECT
108 
109 public:
110 
115  explicit NewFlightDialog(OPL::DbCompletionData& completion_data, QWidget *parent = nullptr);
121  explicit NewFlightDialog(OPL::DbCompletionData& completion_data, int row_id, QWidget* parent = nullptr);
122  ~NewFlightDialog();
123 
124 private:
125  Ui::NewFlightDialog *ui;
126  OPL::DbCompletionData completionData;
127  ValidationState validationState;
128 
134  OPL::FlightEntry flightEntry;
135 
139  static const inline QList<QLineEdit*>* timeLineEdits;
143  static const inline QList<QLineEdit*>* locationLineEdits;
147  static const inline QList<QLineEdit*>* pilotNameLineEdits;
152  static const inline QList<QLineEdit*>* mandatoryLineEdits;
153  static const inline QLatin1String self = QLatin1String("self");
154 
155  void init();
156  void setupRawInputValidation();
157  void setupSignalsAndSlots();
158  void readSettings();
159  void fillWithEntryData();
160 
166  void onGoodInputReceived(QLineEdit *line_edit);
172  void onBadInputReceived(QLineEdit *line_edit);
173 
174  void updateBlockTimeLabel();
175  void updateNightCheckBoxes();
176  void setNightCheckboxes();
177 
178  bool addNewTail(QLineEdit& parent_line_edit);
179  bool addNewPilot(QLineEdit& parent_line_edit);
180 
181 
182  bool checkPilotFunctionsValid();
183  RowData_T prepareFlightEntryData();
184 
185 
186 private slots:
187  void toUpper(const QString& text);
188  void onTimeLineEdit_editingFinished();
189  void onPilotNameLineEdit_editingFinshed();
190  void onLocationLineEdit_editingFinished();
191  void on_acftLineEdit_editingFinished();
192  void on_doftLineEdit_editingFinished();
193  void on_buttonBox_accepted();
194  void on_pilotFlyingCheckBox_stateChanged(int arg1);
195  void on_approachComboBox_currentTextChanged(const QString &arg1);
196  void on_functionComboBox_currentIndexChanged(int index);
197 
198 protected:
199  bool eventFilter(QObject* object, QEvent* event) override;
200 };
201 
202 
203 #endif // NewFlightDialog_H
The NewFlightDialog is used to add or edit entries from the flights table in the database.
Definition: newflightdialog.h:106
bool eventFilter(QObject *object, QEvent *event) override
NewFlightDialog::eventFilter invalidates mandatory line edits on focus in.
Definition: newflightdialog.cpp:165
NewFlightDialog(OPL::DbCompletionData &completion_data, QWidget *parent=nullptr)
NewFlightDialog - Creates a NewFlightDialog that can be used to add a new flight entry to the logbook...
Definition: newflightdialog.cpp:34
Provides data for QCompleters and QHashs.
Definition: dbcompletiondata.h:33
Definition: row.h:81
The ValidationState class encapsulates a QBitArray that has a bit set (or unset) depending on wether ...
Definition: newflightdialog.h:44