openPilotLog
opl.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 OPLCONSTANTS_H
19 #define OPLCONSTANTS_H
20 
21 #include <QtCore>
22 #include <QMessageBox>
23 #include <QComboBox>
24 
39 namespace OPL {
40 
41 #define OPL_VERSION 0
42 #define OPL_SUBVERSION 1
43 #define OPL_VERSION_STRING QString(QString::number(OPL_VERSION) + "." + QString::number(OPL_SUBVERSION))
44 
45 #if defined(__GNUC__) || defined(__clang__)
46  #define FUNC_IDENT __PRETTY_FUNCTION__
47 #elif defined(_MSC_VER)
48  #define FUNC_IDENT __FUNCSIG__
49 #else
50  #define FUNC_IDENT __func__
51 #endif
52 
53 #define DEB qDebug() // Use for debugging
54 #define LOG qInfo() // Use for logging milestones (silently, will be written to log file and console out only)
55 #define TODO qCritical() << "TO DO:\t"
56 
57 #define INFO(msg) OPL::ANotificationHandler::info(msg, this) // Use for messages of interest to the user (will be displayed in GUI)
58 #define WARN(msg) OPL::ANotificationHandler::warn(msg, this) // Use for warnings (will be displayed in GUI)
59 #define CRIT(msg) OPL::ANotificationHandler::crit(msg, this) // Use for critical warnings (will be displayed in GUI)
60 
67 public:
68  static inline void info(const QString msg, QWidget *parent = nullptr){
69 
70  qInfo() << msg;
71  auto mb = QMessageBox(QMessageBox::Information, QStringLiteral("Info"), msg, QMessageBox::StandardButton::Ok, parent);
72  mb.exec();
73  };
74  static inline void warn(const QString msg, QWidget *parent = nullptr){
75  qWarning() << msg;
76  auto mb = QMessageBox(QMessageBox::Warning, QStringLiteral("Warning"), msg, QMessageBox::StandardButton::Ok, parent);
77  mb.exec();
78  };
79  static inline void crit(const QString msg, QWidget *parent = nullptr){
80  qCritical() << msg;
81  auto mb = QMessageBox(QMessageBox::Critical, QStringLiteral("Warning"), msg, QMessageBox::StandardButton::Ok, parent);
82  mb.exec();
83  };
84 }; // class ANotificationHandler
85 
86 using RowData_T = QHash<QString, QVariant>;
87 
92 enum class DateFormat {ISODate, DE, EN };
93 
94 enum class FlightTimeFormat {Default, Decimal};
95 
96 enum class DateTimeFormat {Default, Backup};
97 
102 enum class PilotFunction {PIC = 0, PICUS = 1, SIC = 2, DUAL = 3, FI = 4};
103 
107 enum class Translation {English, German, Spanish};
108 
112 enum class DbViewName {Default, DefaultWithSim, Easa, EasaWithSim, SimulatorOnly};
113 
117 enum class SimulatorType {FNPTI = 0, FNPTII = 1, FSTD = 2};
118 
122 enum class DbTable {Flights, Simulators, Pilots, Tails, Aircraft, Airports, Currencies, Changelog};
123 
127 enum class CurrencyName {Licence = 1, TypeRating = 2, LineCheck = 3, Medical = 4, Custom1 = 5, Custom2 = 6};
128 
134 class OplGlobals : public QObject {
135 public:
136  OplGlobals() = default;
137 
138  void fillLanguageComboBox(QComboBox *combo_box) const;
139  void fillViewNamesComboBox(QComboBox *combo_box) const;
140  void loadPilotFunctios(QComboBox *combo_box) const;
141  void loadSimulatorTypes(QComboBox *combo_box) const;
142  void loadApproachTypes(QComboBox *combo_box) const;
143 
144  inline const QStringList &getApproachTypes() const {return APPROACH_TYPES;}
145  inline const QString getLanguageFilePath(Translation language) const {return L10N_FilePaths.value(language);}
146  inline const QString getViewIdentifier(DbViewName view_name) const {return DATABASE_VIEWS.value(view_name);}
147  inline const QString getDbTableName(DbTable table_name) const {return DB_TABLES.value(table_name);}
148 
149 private:
150  Q_OBJECT
151 
152  const static inline QMap<Translation, QString> L10N_FilePaths {
153  {Translation::English, QStringLiteral("l10n/openpilotlog_en")},
154  {Translation::German, QStringLiteral("l10n/openpilotlog_de")},
155  {Translation::Spanish, QStringLiteral("l10n/openpilotlog_es")},
156  };
157  const static inline QMap<Translation, QString> L10N_DisplayNames {
158  {Translation::English, QStringLiteral("English")},
159  {Translation::German, QStringLiteral("Deutsch")},
160  {Translation::Spanish, QStringLiteral("EspaƱol")},
161  };
162  const static inline QMap<DbViewName, QString> DATABASE_VIEWS = {
163  {DbViewName::Default, QStringLiteral("viewDefault")},
164  {DbViewName::DefaultWithSim, QStringLiteral("viewDefaultSim")},
165  {DbViewName::Easa, QStringLiteral("viewEasa")},
166  {DbViewName::EasaWithSim, QStringLiteral("viewEasaSim")},
167  {DbViewName::SimulatorOnly, QStringLiteral("viewSimulators")},
168  };
169  const QMap<DbViewName, QString> DATABASE_VIEW_DISPLAY_NAMES = {
170  {DbViewName::Default, tr("Default")},
171  {DbViewName::DefaultWithSim, tr("Default with Simulator")},
172  {DbViewName::Easa, tr("EASA-FCL")},
173  {DbViewName::EasaWithSim, tr("EASA-FCL with Simulator")},
174  {DbViewName::SimulatorOnly, tr("Simulator Sessions Only")},
175  };
176  const static inline QMap<PilotFunction, QString> PILOT_FUNCTIONS = {
177  {PilotFunction::PIC, QStringLiteral("PIC")},
178  {PilotFunction::PICUS, QStringLiteral("PICUS")},
179  {PilotFunction::SIC, QStringLiteral("SIC")},
180  {PilotFunction::DUAL, QStringLiteral("DUAL")},
181  {PilotFunction::FI, QStringLiteral("FI")},
182  };
183  const static inline QMap<SimulatorType, QString> SIMULATOR_TYPES = {
184  {SimulatorType::FNPTI, QStringLiteral("FNPT I")},
185  {SimulatorType::FNPTII, QStringLiteral("FNPT II")},
186  {SimulatorType::FSTD, QStringLiteral("FSTD")},
187  };
188  const static inline QMap<DbTable, QString> DB_TABLES = {
189  //Flights, Simulators, Pilots, Tails, Aircraft, Airports
190  {DbTable::Flights, QStringLiteral("flights")},
191  {DbTable::Simulators, QStringLiteral("simulators")},
192  {DbTable::Pilots, QStringLiteral("pilots")},
193  {DbTable::Tails, QStringLiteral("tails")},
194  {DbTable::Aircraft, QStringLiteral("aircraft")},
195  {DbTable::Airports, QStringLiteral("airports")},
196  {DbTable::Currencies, QStringLiteral("currencies")},
197  };
198  const static inline QStringList APPROACH_TYPES = {
199  QStringLiteral("VISUAL"),
200  QStringLiteral("ILS CAT I"),
201  QStringLiteral("ILS CAT II"),
202  QStringLiteral("ILS CAT III"),
203  QStringLiteral("GLS"),
204  QStringLiteral("MLS"),
205  QStringLiteral("LOC"),
206  QStringLiteral("LOC/DME"),
207  QStringLiteral("RNAV"),
208  QStringLiteral("RNAV (LNAV)"),
209  QStringLiteral("RNAV (LNAV/VNAV)"),
210  QStringLiteral("RNAV (LPV)"),
211  QStringLiteral("RNAV (RNP)"),
212  QStringLiteral("RNAV (RNP-AR)"),
213  QStringLiteral("VOR"),
214  QStringLiteral("VOR/DME"),
215  QStringLiteral("NDB"),
216  QStringLiteral("NDB/DME"),
217  QStringLiteral("TACAN"),
218  QStringLiteral("SRA"),
219  QStringLiteral("PAR"),
220  QStringLiteral("OTHER")
221  };
222 };
223 //Make available as a global static
224 Q_GLOBAL_STATIC(OplGlobals, GLOBALS)
225 
226 
240 namespace Db {
241 
242 
243 // Table names
244 const inline auto TABLE_FLIGHTS = QStringLiteral("flights");
245 const inline auto TABLE_PILOTS = QStringLiteral("pilots");
246 const inline auto TABLE_TAILS = QStringLiteral("tails");
247 const inline auto TABLE_AIRCRAFT = QStringLiteral("aircraft");
248 const inline auto TABLE_AIRPORTS = QStringLiteral("airports");
249 const inline auto TABLE_CURRENCIES = QStringLiteral("currencies");
250 const inline auto TABLE_SIMULATORS = QStringLiteral("simulators");
251 
252 // Flights table columns
253 const inline auto FLIGHTS_ROWID = QStringLiteral("flight_id");
254 const inline auto FLIGHTS_DOFT = QStringLiteral("doft");
255 const inline auto FLIGHTS_DEPT = QStringLiteral("dept");
256 const inline auto FLIGHTS_DEST = QStringLiteral("dest");
257 const inline auto FLIGHTS_TOFB = QStringLiteral("tofb");
258 const inline auto FLIGHTS_TONB = QStringLiteral("tonb");
259 const inline auto FLIGHTS_PIC = QStringLiteral("pic");
260 const inline auto FLIGHTS_ACFT = QStringLiteral("acft");
261 const inline auto FLIGHTS_TBLK = QStringLiteral("tblk");
262 const inline auto FLIGHTS_TSPSE = QStringLiteral("tSPSE");
263 const inline auto FLIGHTS_TSPME = QStringLiteral("tSPME");
264 const inline auto FLIGHTS_TMP = QStringLiteral("tMP");
265 const inline auto FLIGHTS_TNIGHT = QStringLiteral("tNIGHT");
266 const inline auto FLIGHTS_TIFR = QStringLiteral("tIFR");
267 const inline auto FLIGHTS_TPIC = QStringLiteral("tPIC");
268 const inline auto FLIGHTS_TPICUS = QStringLiteral("tPICUS");
269 const inline auto FLIGHTS_TSIC = QStringLiteral("tSIC");
270 const inline auto FLIGHTS_TDUAL = QStringLiteral("tDUAL");
271 const inline auto FLIGHTS_TFI = QStringLiteral("tFI");
272 const inline auto FLIGHTS_TSIM = QStringLiteral("tSIM");
273 const inline auto FLIGHTS_PILOTFLYING = QStringLiteral("pilotFlying");
274 const inline auto FLIGHTS_TODAY = QStringLiteral("toDay");
275 const inline auto FLIGHTS_TONIGHT = QStringLiteral("toNight");
276 const inline auto FLIGHTS_LDGDAY = QStringLiteral("ldgDay");
277 const inline auto FLIGHTS_LDGNIGHT = QStringLiteral("ldgNight");
278 const inline auto FLIGHTS_AUTOLAND = QStringLiteral("autoland");
279 const inline auto FLIGHTS_SECONDPILOT = QStringLiteral("secondPilot");
280 const inline auto FLIGHTS_THIRDPILOT = QStringLiteral("thirdPilot");
281 const inline auto FLIGHTS_APPROACHTYPE = QStringLiteral("approachType");
282 const inline auto FLIGHTS_FLIGHTNUMBER = QStringLiteral("flightNumber");
283 const inline auto FLIGHTS_REMARKS = QStringLiteral("remarks");
284 
285 // tails table
286 
287 const inline auto TAILS_ROWID = QStringLiteral("tail_id");
288 const inline auto TAILS_REGISTRATION = QStringLiteral("registration");
289 const inline auto TAILS_COMPANY = QStringLiteral("company");
290 const inline auto TAILS_MAKE = QStringLiteral("make");
291 const inline auto TAILS_MODEL = QStringLiteral("model");
292 const inline auto TAILS_VARIANT = QStringLiteral("variant");
293 const inline auto TAILS_MULTIPILOT = QStringLiteral("multipilot");
294 const inline auto TAILS_MULTIENGINE = QStringLiteral("multiengine");
295 const inline auto TAILS_ENGINETYPE = QStringLiteral("engineType");
296 const inline auto TAILS_WEIGHTCLASS = QStringLiteral("weightClass");
297 
298 // pilots table
299 
300 const inline auto PILOTS_ROWID = QStringLiteral("pilot_id");
301 const inline auto PILOTS_LASTNAME = QStringLiteral("lastname");
302 const inline auto PILOTS_FIRSTNAME = QStringLiteral("firstname");
303 const inline auto PILOTS_ALIAS = QStringLiteral("alias");
304 const inline auto PILOTS_COMPANY = QStringLiteral("company");
305 const inline auto PILOTS_EMPLOYEEID = QStringLiteral("employeeid");
306 const inline auto PILOTS_PHONE = QStringLiteral("phone");
307 const inline auto PILOTS_EMAIL = QStringLiteral("email");
308 
309 // Currencies table
310 const inline auto CURRENCIES_EXPIRYDATE = QStringLiteral("expiryDate");
311 const inline auto CURRENCIES_CURRENCYNAME = QStringLiteral("currencyName");
312 
313 // Simulators table
314 const inline auto SIMULATORS_ROWID = QStringLiteral("session_id");
315 const inline auto SIMULATORS_DATE = QStringLiteral("date");
316 const inline auto SIMULATORS_TIME = QStringLiteral("totalTime");
317 const inline auto SIMULATORS_TYPE = QStringLiteral("deviceType");
318 const inline auto SIMULATORS_ACFT = QStringLiteral("aircraftType");
319 const inline auto SIMULATORS_REG = QStringLiteral("registration");
320 const inline auto SIMULATORS_REMARKS = QStringLiteral("remarks");
321 
322 // all tables
323 const inline auto ROWID = QStringLiteral("rowid");
324 const inline auto NULL_TIME_hhmm = QStringLiteral("00:00");
325 
326 } // namespace OPL::db
327 
328 namespace Assets {
329 
330 const inline auto DATABASE_SCHEMA = QStringLiteral(":/database/database_schema.sql");
331 const inline auto DATABASE_TEMPLATE_AIRCRAFT = QStringLiteral(":/database/templates/aircraft.json");
332 const inline auto DATABASE_TEMPLATE_AIRPORT = QStringLiteral(":/database/templates/airports.json");
333 const inline auto DATABASE_TEMPLATE_CHANGELOG = QStringLiteral(":/database/templates/changelog.json");
334 const inline auto DATABASE_TEMPLATE_CURRENCIES = QStringLiteral(":/database/templates/currencies.json");
335 
336 const inline auto LOGO = QStringLiteral(":/icons/opl-icons/logos/logo_text.png");
337 const inline auto ICON_MAIN = QStringLiteral(":/icons/opl-icons/app/icon_main.png");
338 const inline auto ICON_APPICON_LINUX = QStringLiteral(":/icons/opl-icons/app/icon_linux.svg");
339 const inline auto ICON_APPICON_IOS = QStringLiteral(":/icons/opl-icons/app/icon_ios.svg");
340 const inline auto ICON_APPICON_WIN = QStringLiteral(":/icons/opl-icons/app/icon_windows.ico");
341 
342 const inline auto ICON_TOOLBAR_HOME = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_home.svg");
343 const inline auto ICON_TOOLBAR_NEW_FLIGHT = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_new_flight.svg");
344 const inline auto ICON_TOOLBAR_LOGBOOK = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_logbook.svg");
345 const inline auto ICON_TOOLBAR_AIRCRAFT = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_airplane.svg");
346 const inline auto ICON_TOOLBAR_PILOT = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_pilot.svg");
347 const inline auto ICON_TOOLBAR_SETTINGS = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_settings.svg");
348 const inline auto ICON_TOOLBAR_QUIT = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_exit.svg");
349 
350 const inline auto ICON_TOOLBAR_BACKUP = QStringLiteral(":/icons/opl-icons/toolbar/thick/light/icon_backup.svg");
351 
352 const inline auto ICON_TOOLBAR_HOME_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_home_dm.svg");
353 const inline auto ICON_TOOLBAR_NEW_FLIGHT_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_new_flight_dm.svg");
354 const inline auto ICON_TOOLBAR_LOGBOOK_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_logbook_dm.svg");
355 const inline auto ICON_TOOLBAR_AIRCRAFT_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_airplane_dm.svg");
356 const inline auto ICON_TOOLBAR_PILOT_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_pilot_dm.svg");
357 const inline auto ICON_TOOLBAR_SETTINGS_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_settings_dm.svg");
358 const inline auto ICON_TOOLBAR_QUIT_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_exit_dm.svg");
359 
360 const inline auto ICON_TOOLBAR_BACKUP_DARK = QStringLiteral(":/icons/opl-icons/toolbar/thick/dark/icon_backup_dm.svg");
361 
362 }
363 
364 namespace Styles {
365 
366 const inline auto RED_BORDER = QStringLiteral("border: 1px solid red");
367 } // namespace Styles
368 
369 } // namespace opl
370 
371 #endif // OPLCONSTANTS_H
The ANotificationHandler class handles displaying of user-directed messages. It displays information ...
Definition: opl.h:66
The OplGlobals class encapsulates non-POD globals to avoid making them static. It is available as a g...
Definition: opl.h:134
A namespace to collect constants and enums used throughout the application.
Definition: database.cpp:25
SimulatorType
Enumerates the Simulator Types: Flight and Navigation Procedures Trainer 1/2, Flight Simulation Train...
Definition: opl.h:117
CurrencyName
Enumerates the currency names.
Definition: opl.h:127
PilotFunction
PilotFunction Pilot in Command, Pilot in Command under Supervision, Second in Command (Co-Pilot),...
Definition: opl.h:102
Translation
Enumerates the available translations.
Definition: opl.h:107
DbTable
Enumerates the tables in the database.
Definition: opl.h:122
DbViewName
Enumerates the available SQL views in the database.
Definition: opl.h:112
DateFormat
ADateFormats enumerates the accepted date formats for QDateEdits.
Definition: opl.h:92