opl.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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. #include <QtCore>
  21. #include <QMessageBox>
  22. #include "src/database/adatabasetypes.h"
  23. /*!
  24. * \brief A namespace to collect constants and enums used throughout the application.
  25. *
  26. * \details The opl namespace collects enums and constants that are used throughout
  27. * the application and provide uniform access.
  28. *
  29. * The date, time and datetime namespaces include enums used to differentiate
  30. * date and time formats for QDate, QTime and QDateTime that deviate from standard values
  31. * included in the Qt Framework like Qt::ISODate and are to be used in conjunction with the
  32. * .toString() members of these classes.
  33. *
  34. * The db namespace contains constants for programatically accessing the database in a fast
  35. * and uniform manner.
  36. */
  37. namespace Opl {
  38. #if defined(__GNUC__) || defined(__clang__)
  39. #define FUNC_IDENT __PRETTY_FUNCTION__
  40. #elif defined(_MSC_VER)
  41. #define FUNC_IDENT __FUNCSIG__
  42. #else
  43. #define FUNC_IDENT __func__
  44. #endif
  45. #define DEB qDebug() // Use for debugging
  46. #define LOG qInfo() // Use for logging milestones (silently, will be written to log file and console out only)
  47. #define TODO qCritical() << "TO DO:\t"
  48. #define INFO(msg) Opl::ANotificationHandler::info(msg, this) // Use for messages of interest to the user (will be displayed in GUI)
  49. #define WARN(msg) Opl::ANotificationHandler::warn(msg, this) // Use for warnings (will be displayed in GUI)
  50. #define CRIT(msg) Opl::ANotificationHandler::crit(msg, this) // Use for critical warnings (will be displayed in GUI)
  51. /*!
  52. * \brief The ANotificationHandler class handles displaying of user-directed messages. It displays
  53. * information to the user and forwards the displayed message to ALog so it is written
  54. * to the console and log files. The INFO, WARN and CRIT makros provide convenient access.
  55. */
  56. class ANotificationHandler {
  57. public:
  58. static inline void info(const QString msg, QWidget *parent = nullptr){
  59. qInfo() << msg;
  60. QMessageBox mb(parent);
  61. mb.setText(msg);
  62. mb.setIcon(QMessageBox::Information);
  63. mb.exec();
  64. };
  65. static inline void warn(const QString msg, QWidget *parent = nullptr){
  66. qWarning() << msg;
  67. QMessageBox mb(parent);
  68. mb.setText(msg);
  69. mb.setIcon(QMessageBox::Warning);
  70. mb.exec();
  71. };
  72. static inline void crit(const QString msg, QWidget *parent = nullptr){
  73. qCritical() << msg;
  74. QMessageBox mb(parent);
  75. mb.setText(msg);
  76. mb.setIcon(QMessageBox::Critical);
  77. mb.exec();
  78. };
  79. }; // class ANotificationHandler
  80. enum class Translations {English, German, Spanish};
  81. const static QMap<Opl::Translations, QString> L10N_FILES {
  82. {Opl::Translations::English, QStringLiteral("l10n/openpilotlog_en")},
  83. {Opl::Translations::German, QStringLiteral("l10n/openpilotlog_de")},
  84. {Opl::Translations::Spanish, QStringLiteral("l10n/openpilotlog_es")},
  85. };
  86. static const QMap<Translations, QString> L10N_NAMES {
  87. {Opl::Translations::English, QStringLiteral("English")},
  88. {Opl::Translations::German, QStringLiteral("Deutsch")},
  89. {Opl::Translations::Spanish, QStringLiteral("Español")},
  90. };
  91. static const auto ApproachTypes = QStringList{
  92. QLatin1String("VISUAL"),
  93. QLatin1String("ILS CAT I"),
  94. QLatin1String("ILS CAT II"),
  95. QLatin1String("ILS CAT III"),
  96. QLatin1String("GLS"),
  97. QLatin1String("MLS"),
  98. QLatin1String("LOC"),
  99. QLatin1String("LOC/DME"),
  100. QLatin1String("RNAV"),
  101. QLatin1String("RNAV (LNAV)"),
  102. QLatin1String("RNAV (LNAV/VNAV)"),
  103. QLatin1String("RNAV (LPV)"),
  104. QLatin1String("RNAV (RNP)"),
  105. QLatin1String("RNAV (RNP-AR)"),
  106. QLatin1String("VOR"),
  107. QLatin1String("VOR/DME"),
  108. QLatin1String("NDB"),
  109. QLatin1String("NDB/DME"),
  110. QLatin1String("TACAN"),
  111. QLatin1String("SRA"),
  112. QLatin1String("PAR"),
  113. QLatin1String("OTHER")
  114. };
  115. namespace Date {
  116. /*!
  117. * \brief ADateFormats enumerates the accepted date formats for QDateEdits
  118. */
  119. enum class ADateFormat {ISODate, DE, EN };
  120. } // namespace opl::date
  121. namespace Time {
  122. enum FlightTimeFormat {Default, Decimal};
  123. } // namespace opl::time
  124. namespace Datetime {
  125. enum DateTimeFormat {Default, Backup};
  126. } // namespace opl::datetime
  127. /*!
  128. * The opl::db namespace provides string literals to programatically access the database
  129. *
  130. * Example usage, do:
  131. * newData.insert(opl::db::FLIGHTS_DEP, ui->deptLocLineEdit->text());
  132. * newData.value(opl::db::AIRCRAFT_MULTIPILOT);
  133. *
  134. * instead of:
  135. * newData.insert("dept", ui->deptLocLineEdit->text());
  136. * newData.value("multipilot");
  137. *
  138. * Declaring these literals here avoids memory allocation at runtime for construction of temporary
  139. * qstrings like ("dept"). See https://doc.qt.io/qt-5/qstring.html#QStringLiteral and ensures
  140. * uniform use throughout the application.
  141. */
  142. namespace Db {
  143. // Table names
  144. static const auto TABLE_FLIGHTS = QLatin1String("flights");
  145. static const auto TABLE_PILOTS = QLatin1String("pilots");
  146. static const auto TABLE_TAILS = QLatin1String("tails");
  147. static const auto TABLE_AIRCRAFT = QLatin1String("aircraft");
  148. static const auto TABLE_AIRPORTS = QLatin1String("airports");
  149. static const auto TABLE_CURRENCIES = QLatin1String("currencies");
  150. // Flights table columns
  151. static const auto FLIGHTS_ROWID = QLatin1String("flight_id");
  152. static const auto FLIGHTS_DOFT = QLatin1String("doft");
  153. static const auto FLIGHTS_DEPT = QLatin1String("dept");
  154. static const auto FLIGHTS_DEST = QLatin1String("dest");
  155. static const auto FLIGHTS_TOFB = QLatin1String("tofb");
  156. static const auto FLIGHTS_TONB = QLatin1String("tonb");
  157. static const auto FLIGHTS_PIC = QLatin1String("pic");
  158. static const auto FLIGHTS_ACFT = QLatin1String("acft");
  159. static const auto FLIGHTS_TBLK = QLatin1String("tblk");
  160. static const auto FLIGHTS_TSPSE = QLatin1String("tSPSE");
  161. static const auto FLIGHTS_TSPME = QLatin1String("tSPME");
  162. static const auto FLIGHTS_TMP = QLatin1String("tMP");
  163. static const auto FLIGHTS_TNIGHT = QLatin1String("tNIGHT");
  164. static const auto FLIGHTS_TIFR = QLatin1String("tIFR");
  165. static const auto FLIGHTS_TPIC = QLatin1String("tPIC");
  166. static const auto FLIGHTS_TPICUS = QLatin1String("tPICUS");
  167. static const auto FLIGHTS_TSIC = QLatin1String("tSIC");
  168. static const auto FLIGHTS_TDUAL = QLatin1String("tDUAL");
  169. static const auto FLIGHTS_TFI = QLatin1String("tFI");
  170. static const auto FLIGHTS_TSIM = QLatin1String("tSIM");
  171. static const auto FLIGHTS_PILOTFLYING = QLatin1String("pilotFlying");
  172. static const auto FLIGHTS_TODAY = QLatin1String("toDay");
  173. static const auto FLIGHTS_TONIGHT = QLatin1String("toNight");
  174. static const auto FLIGHTS_LDGDAY = QLatin1String("ldgDay");
  175. static const auto FLIGHTS_LDGNIGHT = QLatin1String("ldgNight");
  176. static const auto FLIGHTS_AUTOLAND = QLatin1String("autoland");
  177. static const auto FLIGHTS_SECONDPILOT = QLatin1String("secondPilot");
  178. static const auto FLIGHTS_THIRDPILOT = QLatin1String("thirdPilot");
  179. static const auto FLIGHTS_APPROACHTYPE = QLatin1String("approachType");
  180. static const auto FLIGHTS_FLIGHTNUMBER = QLatin1String("flightNumber");
  181. static const auto FLIGHTS_REMARKS = QLatin1String("remarks");
  182. // tails table
  183. static const auto TAILS_ROWID = QLatin1String("tail_id");
  184. static const auto TAILS_REGISTRATION = QLatin1String("registration");
  185. static const auto TAILS_COMPANY = QLatin1String("company");
  186. static const auto TAILS_MAKE = QLatin1String("make");
  187. static const auto TAILS_MODEL = QLatin1String("model");
  188. static const auto TAILS_VARIANT = QLatin1String("variant");
  189. static const auto TAILS_MULTIPILOT = QLatin1String("multipilot");
  190. static const auto TAILS_MULTIENGINE = QLatin1String("multiengine");
  191. static const auto TAILS_ENGINETYPE = QLatin1String("engineType");
  192. static const auto TAILS_WEIGHTCLASS = QLatin1String("weightClass");
  193. // pilots table
  194. static const auto PILOTS_ROWID = QLatin1String("pilot_id");
  195. static const auto PILOTS_LASTNAME = QLatin1String("lastname");
  196. static const auto PILOTS_FIRSTNAME = QLatin1String("firstname");
  197. static const auto PILOTS_ALIAS = QLatin1String("alias");
  198. static const auto PILOTS_COMPANY = QLatin1String("company");
  199. static const auto PILOTS_EMPLOYEEID = QLatin1String("employeeid");
  200. static const auto PILOTS_PHONE = QLatin1String("phone");
  201. static const auto PILOTS_EMAIL = QLatin1String("email");
  202. // Currencies table
  203. static const auto CURRENCIES_EXPIRYDATE = QLatin1String("expiryDate");
  204. static const auto CURRENCIES_DESCRIPTION = QLatin1String("description");
  205. // all tables
  206. static const auto ROWID = QLatin1String("ROWID");
  207. static const auto NULL_TIME_hhmm = QLatin1String("00:00");
  208. static const auto DEFAULT_FLIGHT_POSITION = DataPosition(TABLE_FLIGHTS, 0);
  209. static const auto DEFAULT_PILOT_POSITION = DataPosition(TABLE_PILOTS, 0);
  210. static const auto DEFAULT_TAIL_POSITION = DataPosition(TABLE_TAILS, 0);
  211. static const auto DEFAULT_AIRCRAFT_POSITION = DataPosition(TABLE_AIRCRAFT, 0);
  212. } // namespace opl::db
  213. namespace Assets {
  214. static const auto LOGO = QLatin1String(":/icons/opl-icons/logos/logo_text.png");
  215. static const auto ICON_MAIN = QLatin1String(":/icons/opl-icons/app/icon_main.png");
  216. static const auto ICON_APPICON_LINUX = QLatin1String(":/icons/opl-icons/app/icon_linux.svg");
  217. static const auto ICON_APPICON_IOS = QLatin1String(":/icons/opl-icons/app/icon_ios.svg");
  218. static const auto ICON_APPICON_WIN = QLatin1String(":/icons/opl-icons/app/icon_windows.ico");
  219. static const auto ICON_TOOLBAR_HOME = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_home.svg");
  220. static const auto ICON_TOOLBAR_NEW_FLIGHT = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_new_flight.svg");
  221. static const auto ICON_TOOLBAR_LOGBOOK = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_logbook.svg");
  222. static const auto ICON_TOOLBAR_AIRCRAFT = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_airplane.svg");
  223. static const auto ICON_TOOLBAR_PILOT = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_pilot.svg");
  224. static const auto ICON_TOOLBAR_SETTINGS = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_settings.svg");
  225. static const auto ICON_TOOLBAR_QUIT = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_exit.svg");
  226. static const auto ICON_TOOLBAR_BACKUP = QLatin1String(":/icons/opl-icons/toolbar/thick/light/icon_backup.svg");
  227. static const auto ICON_TOOLBAR_HOME_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_home_dm.svg");
  228. static const auto ICON_TOOLBAR_NEW_FLIGHT_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_new_flight_dm.svg");
  229. static const auto ICON_TOOLBAR_LOGBOOK_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_logbook_dm.svg");
  230. static const auto ICON_TOOLBAR_AIRCRAFT_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_airplane_dm.svg");
  231. static const auto ICON_TOOLBAR_PILOT_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_pilot_dm.svg");
  232. static const auto ICON_TOOLBAR_SETTINGS_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_settings_dm.svg");
  233. static const auto ICON_TOOLBAR_QUIT_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_exit_dm.svg");
  234. static const auto ICON_TOOLBAR_BACKUP_DARK = QLatin1String(":/icons/opl-icons/toolbar/thick/dark/icon_backup_dm.svg");
  235. }
  236. } // namespace opl
  237. #endif // OPLCONSTANTS_H