Parcourir la source

Updates to User Interface

- Rework of User Interface
  - New Icons for toolbar
  - Added a Logo
  - Added an application icon
- The DebugWidget is now hidden by default. It can be accessed by pressing ctrl + t
- The former totalswidget is gone and replaced by the homewidget, which now includes the following:
  - Currencies: Here the expiration dates of licenses, medicals and currency is presented to the user. The currencies are customizable and selectable in a new tab in the SettingsWidget.
  - Limitations: Keeps track of monthly, yearly, and rolling 12 months flight time limitations (EASA FTL)
Felix Turowsky il y a 4 ans
Parent
commit
b0154046a4
55 fichiers modifiés avec 3144 ajouts et 1177 suppressions
  1. 1 3
      CMakeLists.txt
  2. 1 1
      assets/database/templates/changelog.csv
  3. 11 0
      assets/icons.qrc
  4. BIN
      assets/opl-icons/aircraft.png
  5. BIN
      assets/opl-icons/airplane_dark.png
  6. 1 0
      assets/opl-icons/appicon_round_gradient.svg
  7. 1 0
      assets/opl-icons/appicon_round_transparent.svg
  8. BIN
      assets/opl-icons/icon_about.png
  9. 0 0
      assets/opl-icons/icon_about.svg
  10. 0 0
      assets/opl-icons/icon_ios.svg
  11. 0 0
      assets/opl-icons/icon_linux.svg
  12. 0 0
      assets/opl-icons/icon_linux_light.svg
  13. 0 0
      assets/opl-icons/icon_main.svg
  14. BIN
      assets/opl-icons/new_flight.png
  15. BIN
      assets/opl-icons/new_flight_dark.png
  16. BIN
      assets/opl-icons/opl_logo.png
  17. 0 0
      assets/opl-icons/opl_logo.svg
  18. BIN
      assets/opl-icons/pilot.png
  19. BIN
      assets/opl-icons/pilot_dark.png
  20. 10 8
      main.cpp
  21. 12 24
      mainwindow.cpp
  22. 17 4
      mainwindow.h
  23. 0 1
      mainwindow.ui
  24. 2 4
      openPilotLog.pro
  25. 55 54
      src/classes/asettings.cpp
  26. 26 35
      src/classes/asettings.h
  27. 2 2
      src/classes/astandardpaths.cpp
  28. 20 10
      src/classes/astyle.cpp
  29. 12 12
      src/database/adatabase.cpp
  30. 1 1
      src/database/adatabase.h
  31. 0 1
      src/database/adatabasesetup.cpp
  32. 11 26
      src/functions/alog.h
  33. 79 42
      src/functions/astat.cpp
  34. 7 3
      src/functions/astat.h
  35. 142 16
      src/gui/dialogues/firstrundialog.cpp
  36. 23 1
      src/gui/dialogues/firstrundialog.h
  37. 719 220
      src/gui/dialogues/firstrundialog.ui
  38. 7 7
      src/gui/dialogues/newflight.ui
  39. 24 3
      src/gui/dialogues/newflightdialog.cpp
  40. 3 0
      src/gui/dialogues/newflightdialog.h
  41. 1 1
      src/gui/dialogues/newtaildialog.cpp
  42. 4 6
      src/gui/widgets/aircraftwidget.cpp
  43. 2 0
      src/gui/widgets/debugwidget.cpp
  44. 157 4
      src/gui/widgets/homewidget.cpp
  45. 43 8
      src/gui/widgets/homewidget.h
  46. 934 45
      src/gui/widgets/homewidget.ui
  47. 22 76
      src/gui/widgets/logbookwidget.cpp
  48. 0 2
      src/gui/widgets/logbookwidget.h
  49. 2 2
      src/gui/widgets/pilotswidget.cpp
  50. 216 15
      src/gui/widgets/settingswidget.cpp
  51. 35 0
      src/gui/widgets/settingswidget.h
  52. 530 5
      src/gui/widgets/settingswidget.ui
  53. 0 54
      src/gui/widgets/totalswidget.cpp
  54. 0 481
      src/gui/widgets/totalswidget.ui
  55. 11 0
      src/oplconstants.h

+ 1 - 3
CMakeLists.txt

@@ -47,7 +47,6 @@ set(PROJECT_SOURCES
     src/gui/widgets/logbookwidget.cpp
     src/gui/widgets/pilotswidget.cpp
     src/gui/widgets/settingswidget.cpp
-    src/gui/widgets/totalswidget.cpp
     src/testing/abenchmark.cpp
     src/testing/atimer.cpp
     
@@ -67,6 +66,7 @@ set(PROJECT_SOURCES
     src/database/adatabasetypes.h
     src/functions/acalc.h
     src/functions/adatetime.h
+    src/functions/alog.h
     src/functions/areadcsv.h
     src/functions/astat.h
     src/functions/atime.h
@@ -80,7 +80,6 @@ set(PROJECT_SOURCES
     src/gui/widgets/logbookwidget.h
     src/gui/widgets/pilotswidget.h
     src/gui/widgets/settingswidget.h
-    src/gui/widgets/totalswidget.h
     src/oplconstants.h
     src/testing/abenchmark.h
     src/testing/adebug.h
@@ -97,7 +96,6 @@ set(PROJECT_SOURCES
     src/gui/widgets/logbookwidget.ui
     src/gui/widgets/pilotswidget.ui
     src/gui/widgets/settingswidget.ui
-    src/gui/widgets/totalswidget.ui
 
     assets/icons.qrc
     assets/themes/stylesheets/breeze/breeze.qrc

+ 1 - 1
assets/database/templates/changelog.csv

@@ -5,7 +5,7 @@ revision,comment,date
 4,Added viewEASA for EASA logbook like display,2020-11-02
 5,Added Diamond Aircraft to aircraft table,2020-11-19
 6,Added icao/iata codes for Boeing in aircraft table,2020-11-19
-7,"Added autoincrement for flights, pilots and tails tables",2020-11-20
+7,Added autoincrement for flights pilots and tails tables,2020-11-20
 8,changed column tDual to tDUAL in table flights for consistency in naming,2020-11-23
 9,changed column id to flight_id in table flights for consistency in naming,2020-11-23
 10,added viewDefault as a copy of Logbook (deprecated),2020-11-23

+ 11 - 0
assets/icons.qrc

@@ -12,5 +12,16 @@
         <file>ionicon-icons/settings-outline.png</file>
         <file>ionicon-icons/power.png</file>
         <file>ionicon-icons/power-outline.png</file>
+        <file>opl-icons/opl_logo.svg</file>
+        <file>opl-icons/appicon_round_transparent.svg</file>
+        <file>opl-icons/appicon_round_gradient.svg</file>
+        <file>opl-icons/pilot.png</file>
+        <file>opl-icons/aircraft.png</file>
+        <file>opl-icons/new_flight.png</file>
+	<file>opl-icons/icon_main.svg</file>
+	<file>opl-icons/icon_ios.svg</file>
+	<file>opl-icons/icon_linux.svg</file>
+	<file>opl-icons/icon_linux_light.svg</file>
+	<file>opl-icons/icon_about.png</file>
     </qresource>
 </RCC>

BIN
assets/opl-icons/aircraft.png


BIN
assets/opl-icons/airplane_dark.png


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
assets/opl-icons/appicon_round_gradient.svg


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
assets/opl-icons/appicon_round_transparent.svg


BIN
assets/opl-icons/icon_about.png


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/icon_about.svg


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/icon_ios.svg


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/icon_linux.svg


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/icon_linux_light.svg


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/icon_main.svg


BIN
assets/opl-icons/new_flight.png


BIN
assets/opl-icons/new_flight_dark.png


BIN
assets/opl-icons/opl_logo.png


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
assets/opl-icons/opl_logo.svg


BIN
assets/opl-icons/pilot.png


BIN
assets/opl-icons/pilot_dark.png


+ 10 - 8
main.cpp

@@ -23,6 +23,8 @@
 #include "src/classes/astandardpaths.h"
 #include "src/classes/asettings.h"
 #include "src/classes/astyle.h"
+#include "src/oplconstants.h"
+#include "src/functions/alog.h"
 #include <QApplication>
 #include <QProcess>
 #include <QSettings>
@@ -42,7 +44,7 @@ int main(int argc, char *argv[])
     QCoreApplication::setApplicationName(APPNAME);
 
     if(!AStandardPaths::setup()){
-        DEB << "Standard paths not valid.";
+        LOG << "Unable to create directories.\n";
         return 1;
     }
 
@@ -51,27 +53,27 @@ int main(int argc, char *argv[])
     AStyle::setup();
 
     if (!aDB->connect()) {
-        DEB << "Error establishing database connection";
+        LOG << "Error establishing database connection\n";
         return 2;
     }
 
-    if (!ASettings::read(ASettings::Setup::SetupComplete).toBool()) {
+    if (!ASettings::read(ASettings::Main::SetupComplete).toBool()) {
         if(FirstRunDialog().exec() == QDialog::Rejected){
-            DEB << "First run not accepted. Exiting.";
+            LOG << "Initial setup incomplete or unsuccessfull. Exiting.\n";
             return 3;
         }
-        ASettings::write(ASettings::Setup::SetupComplete, true);
-        DEB << "Wrote setup_commplete?";
+        ASettings::write(ASettings::Main::SetupComplete, true);
+        DEB << "Wrote setup_commplete";
     }
 
     ARunGuard guard(QStringLiteral("opl_single_key"));
     if ( !guard.tryToRun() ){
-        DEB << "Another Instance of openPilotLog is already running. Exiting.";
+        LOG << "Another Instance of openPilotLog is already running. Exiting.\n";
         return 0;
     }
 
-
     MainWindow w;
+    w.setWindowIcon(QIcon(Opl::Assets::ICON_APPICON));
     //w.showMaximized();
     w.show();
     return openPilotLog.exec();

+ 12 - 24
mainwindow.cpp

@@ -19,21 +19,20 @@
 #include "ui_mainwindow.h"
 #include "src/testing/adebug.h"
 #include "src/database/adatabase.h"
+#include "src/classes/astyle.h"
 
 MainWindow::MainWindow(QWidget *parent)
     : QMainWindow(parent)
     , ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
-    readSettings();
 
     // Set up Toolbar
     ui->actionHome->setIcon(QIcon(":/icons/ionicon-icons/home-outline.png"));
-    ui->actionNewFlight->setIcon(QIcon(":/icons/ionicon-icons/airplane-outline.png"));
+    ui->actionNewFlight->setIcon(QIcon(Opl::Assets::ICON_NEW_FLIGHT));
     ui->actionLogbook->setIcon(QIcon(":/icons/ionicon-icons/book-outline.png"));
-    ui->actionAircraft->setIcon(QIcon(":/icons/ionicon-icons/airplane-outline.png"));
-    ui->actionPilots->setIcon(QIcon(":/icons/ionicon-icons/settings-outline.png"));
-    ui->actionDebug->setIcon(QIcon(":/icons/ionicon-icons/settings-outline.png"));
+    ui->actionAircraft->setIcon(QIcon(Opl::Assets::ICON_AIRCRAFT));
+    ui->actionPilots->setIcon(QIcon(Opl::Assets::ICON_PILOT));
     ui->actionSettings->setIcon(QIcon(":/icons/ionicon-icons/settings-outline.png"));
     ui->actionQuit->setIcon(QIcon(":/icons/ionicon-icons/power-outline.png"));
     ui->toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
@@ -44,12 +43,11 @@ MainWindow::MainWindow(QWidget *parent)
         button->setMinimumWidth(128);
     }
 
-    // Add spacer
+    // Add spacer in toolbar to separate left and right parts
     auto *spacer = new QWidget();
     spacer->setMinimumWidth(1);
     spacer->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-    spacer->setObjectName("spacer");
-    ui->toolBar->insertWidget(ui->actionDebug, spacer);
+    ui->toolBar->insertWidget(ui->actionSettings, spacer);
 
     // Construct Widgets
     homeWidget = new HomeWidget(this);
@@ -62,15 +60,14 @@ MainWindow::MainWindow(QWidget *parent)
     ui->stackedWidget->addWidget(settingsWidget);
     aircraftWidget = new AircraftWidget(this);
     ui->stackedWidget->addWidget(aircraftWidget);
+    debugWidget = new DebugWidget(this);
+    ui->stackedWidget->addWidget(debugWidget);
 
     connectWidgets();
 
     // Startup Screen (Home Screen)
-    // ui->stackedWidget->setCurrentWidget(homeWidget);
-    // Debup Widget for now
-    debugWidget = new DebugWidget(this);
-    ui->stackedWidget->addWidget(debugWidget);
-    ui->stackedWidget->setCurrentWidget(debugWidget);
+    ui->stackedWidget->setCurrentWidget(homeWidget);
+
 
     // check database version (Debug)
     int db_ver = checkDbVersion();
@@ -132,21 +129,12 @@ void MainWindow::connectWidgets()
                      pilotsWidget, &PilotsWidget::onDisplayModel_dataBaseUpdated);
     QObject::connect(aDB, &ADatabase::dataBaseUpdated,
                      aircraftWidget, &AircraftWidget::onDisplayModel_dataBaseUpdated);
+    QObject::connect(aDB, &ADatabase::dataBaseUpdated,
+                     homeWidget, &HomeWidget::onHomeWidget_dataBaseUpdated);
 
     QObject::connect(settingsWidget, &SettingsWidget::viewSelectionChanged,
                      logbookWidget, &LogbookWidget::onLogbookWidget_viewSelectionChanged);
 }
-#include <QFontDatabase>
-void MainWindow::readSettings()
-{
-    DEB << "Use system font?" << ASettings::read(ASettings::Main::UseSystemFont).toBool();
-    if (!ASettings::read(ASettings::Main::UseSystemFont).toBool()) {
-        QFont font(ASettings::read(ASettings::Main::Font).toString());
-        font.setPointSize(ASettings::read(ASettings::Main::FontSize).toUInt());
-        qApp->setFont(font);
-        DEB << "Font set:" << font;
-    }
-}
 
 void MainWindow::on_actionSettings_triggered()
 {

+ 17 - 4
mainwindow.h

@@ -26,6 +26,7 @@
 #include <QMessageBox>
 #include <QDir>
 #include <QFile>
+#include <QKeyEvent>
 
 #include "src/gui/widgets/homewidget.h"
 #include "src/gui/widgets/settingswidget.h"
@@ -35,6 +36,7 @@
 #include "src/gui/widgets/debugwidget.h"
 #include "src/gui/dialogues/newtaildialog.h"
 #include "src/gui/dialogues/newpilotdialog.h"
+#include "src/gui/dialogues/newflightdialog.h"
 #include "src/classes/arunguard.h"
 #include "src/testing/atimer.h"
 
@@ -54,8 +56,6 @@ public:
 
 private slots:
 
-    void nope();
-
     void on_actionQuit_triggered();
 
     void on_actionHome_triggered();
@@ -91,10 +91,23 @@ private:
 
     DebugWidget* debugWidget;
 
-    void connectWidgets();
+    void nope();
 
-    void readSettings();
+    void connectWidgets();
 
     int checkDbVersion();
+
+protected:
+    /*!
+     * \brief Shows the debug widget by pressing <ctrl + t>
+     */
+    void keyPressEvent(QKeyEvent* keyEvent) override
+    {
+        if(keyEvent->type() == QKeyEvent::KeyPress) {
+            if(keyEvent->matches(QKeySequence::AddTab)) {
+                on_actionDebug_triggered();
+            }
+        }
+    }
 };
 #endif // MAINWINDOW_H

+ 0 - 1
mainwindow.ui

@@ -73,7 +73,6 @@
    <addaction name="actionLogbook"/>
    <addaction name="actionAircraft"/>
    <addaction name="actionPilots"/>
-   <addaction name="actionDebug"/>
    <addaction name="actionSettings"/>
    <addaction name="actionQuit"/>
   </widget>

+ 2 - 4
openPilotLog.pro

@@ -45,7 +45,6 @@ SOURCES += \
     src/gui/widgets/logbookwidget.cpp \
     src/gui/widgets/pilotswidget.cpp \
     src/gui/widgets/settingswidget.cpp \
-    src/gui/widgets/totalswidget.cpp \
     src/testing/abenchmark.cpp \
     src/testing/atimer.cpp
 
@@ -66,6 +65,7 @@ HEADERS += \
     src/database/adatabasetypes.h \
     src/functions/acalc.h \
     src/functions/adatetime.h \
+    src/functions/alog.h \
     src/functions/areadcsv.h \
     src/functions/astat.h \
     src/functions/atime.h \
@@ -79,7 +79,6 @@ HEADERS += \
     src/gui/widgets/logbookwidget.h \
     src/gui/widgets/pilotswidget.h \
     src/gui/widgets/settingswidget.h \
-    src/gui/widgets/totalswidget.h \
     src/oplconstants.h \
     src/testing/abenchmark.h \
     src/testing/adebug.h \
@@ -96,8 +95,7 @@ FORMS += \
     src/gui/widgets/homewidget.ui \
     src/gui/widgets/logbookwidget.ui \
     src/gui/widgets/pilotswidget.ui \
-    src/gui/widgets/settingswidget.ui \
-    src/gui/widgets/totalswidget.ui
+    src/gui/widgets/settingswidget.ui
 
 # Default rules for deployment.
 qnx: target.path = /tmp/$${TARGET}/bin

+ 55 - 54
src/classes/asettings.cpp

@@ -20,27 +20,43 @@
 
 
 QMap<ASettings::Main, QString> ASettings::mainMap = {
+    {Main::SetupComplete,               QStringLiteral("setupComplete")},
     {Main::Style,                       QStringLiteral("style")},
     {Main::Font,                        QStringLiteral("font")},
     {Main::FontSize,                    QStringLiteral("fontSize")},
     {Main::UseSystemFont,               QStringLiteral("useSystemFont")},
-};
-
-QMap<ASettings::LogBook, QString> ASettings::logBookMap = {
-    {LogBook::View,                     QStringLiteral("view")},
+    {Main::LogbookView,                 QStringLiteral("logbookView")},
 };
 
 QMap<ASettings::UserData, QString> ASettings::userDataMap = {
     {UserData::DisplaySelfAs,           QStringLiteral("displayselfas")},
-    {UserData::AcftSortColumn,          QStringLiteral("acSortColumn")},  // [G]: inconsistent naming
-    {UserData::PilSortColumn,           QStringLiteral("pilSortColumn")},
-    {UserData::AcAllowIncomplete,       QStringLiteral("acAllowIncomplete")},
+    {UserData::TailSortColumn,          QStringLiteral("tailSortColumn")},
+    {UserData::PilotSortColumn,         QStringLiteral("pilotSortColumn")},
+    {UserData::AcftAllowIncomplete,     QStringLiteral("acftAllowIncomplete")},
+    {UserData::FtlWarningThreshold,     QStringLiteral("ftlWarningThreshold")},
+    {UserData::CurrWarningEnabled,      QStringLiteral("currWarningEnabled")},
+    {UserData::CurrWarningThreshold,    QStringLiteral("currWarningThreshold")},
+    {UserData::ShowToLgdCurrency,       QStringLiteral("showToLdgCurrency")},
+    {UserData::ShowLicCurrency,         QStringLiteral("showLicCurrency")},
+    {UserData::ShowTrCurrency,          QStringLiteral("showTrCurrency")},
+    {UserData::ShowLckCurrency,         QStringLiteral("showLckCurrency")},
+    {UserData::ShowMedCurrency,         QStringLiteral("showMedCurrency")},
+    {UserData::ShowCustom1Currency,     QStringLiteral("showCustom1Currency")},
+    {UserData::ShowCustom2Currency,     QStringLiteral("showCustom2Currency")},
+    {UserData::LicCurrencyDate,         QStringLiteral("licCurrencyDate")},
+    {UserData::TrCurrencyDate,          QStringLiteral("trCurrencyDate")},
+    {UserData::LckCurrencyDate,         QStringLiteral("lckCurrencyDate")},
+    {UserData::MedCurrencyDate,         QStringLiteral("medCurrencyDate")},
+    {UserData::Custom1CurrencyDate,     QStringLiteral("custom1CurrencyDate")},
+    {UserData::Custom2CurrencyDate,     QStringLiteral("custom2CurrencyDate")},
+    {UserData::Custom1CurrencyName,     QStringLiteral("custom1CurrencyName")},
+    {UserData::Custom2CurrencyName,     QStringLiteral("custom2CurrencyName")},
 };
 
 QMap<ASettings::FlightLogging, QString> ASettings::flightLoggingMap = {
     {FlightLogging::Function,           QStringLiteral("function")},
     {FlightLogging::Approach,           QStringLiteral("approach")},
-    {FlightLogging::NightLogging,       QStringLiteral("nightlogging")},
+    {FlightLogging::NightLoggingEnabled,QStringLiteral("nightLoggingEnabled")},
     {FlightLogging::LogIFR,             QStringLiteral("logIfr")},
     {FlightLogging::FlightNumberPrefix, QStringLiteral("flightnumberPrefix")},
     {FlightLogging::NumberTakeoffs,     QStringLiteral("numberTakeoffs")},
@@ -49,16 +65,9 @@ QMap<ASettings::FlightLogging, QString> ASettings::flightLoggingMap = {
     {FlightLogging::PilotFlying,        QStringLiteral("pilotFlying")},
     {FlightLogging::NightAngle,         QStringLiteral("nightangle")},
     {FlightLogging::Rules,              QStringLiteral("rules")},
-    {FlightLogging::FlightTimeFormat,   QStringLiteral("flightTimeFormat")}
-};
-
-QMap<ASettings::Setup, QString> ASettings::setupMap = {
-    {Setup::SetupComplete,              QStringLiteral("setupComplete")}
-};
-
-QMap<ASettings::NewFlight, QString> ASettings::newFlightMap = {
-    {NewFlight::FunctionComboBox,       QStringLiteral("FunctionComboBox")},  // inconsistent naming
-    {NewFlight::CalendarCheckBox,       QStringLiteral("calendarCheckBox")},
+    {FlightLogging::FlightTimeFormat,   QStringLiteral("flightTimeFormat")},
+    {FlightLogging::FunctionComboBox,   QStringLiteral("functionComboBox")},
+    {FlightLogging::CalendarCheckBox,   QStringLiteral("calendarCheckBox")},
 };
 
 void ASettings::setup()
@@ -67,6 +76,34 @@ void ASettings::setup()
     QSettings();
 }
 
+/*!
+ * \brief ASettings::resetToDefaults (Re-)sets all settings to the default value
+ */
+void ASettings::resetToDefaults()
+{
+    write(Main::Style, QStringLiteral("Fusion"));
+    write(Main::UseSystemFont, true);
+    write(Main::LogbookView, 0);
+
+    write(UserData::DisplaySelfAs, 0);
+    write(UserData::FtlWarningThreshold, 0.8); // To Do: UI Option
+    write(UserData::CurrWarningEnabled, true);
+    write(UserData::CurrWarningThreshold, 30);
+    write(UserData::ShowToLgdCurrency, true);
+    write(UserData::ShowLicCurrency, false);
+    write(UserData::ShowTrCurrency, false);
+    write(UserData::ShowLckCurrency, false);
+    write(UserData::ShowMedCurrency, false);
+    write(UserData::ShowCustom1Currency, false);
+    write(UserData::ShowCustom2Currency, false);
+
+    write(FlightLogging::NumberTakeoffs, 1);
+    write(FlightLogging::NumberLandings, 1);
+    write(FlightLogging::PopupCalendar, true);
+    write(FlightLogging::PilotFlying, true);
+    write(FlightLogging::NightAngle, -6);
+}
+
 //
 // Read/Write
 //
@@ -77,30 +114,12 @@ QVariant ASettings::read(const FlightLogging key)
 void ASettings::write(const FlightLogging key, const QVariant &val)
 { QSettings().setValue(groupOfKey(key), val); }
 
-QVariant ASettings::read(const LogBook key)
-{ return QSettings().value(groupOfKey(key)); }
-
-void ASettings::write(const LogBook key, const QVariant &val)
-{ QSettings().setValue(groupOfKey(key), val); }
-
 QVariant ASettings::read(const Main key)
 { return QSettings().value(groupOfKey(key)); }
 
 void ASettings::write(const Main key, const QVariant &val)
 { QSettings().setValue(groupOfKey(key), val); }
 
-QVariant ASettings::read(const Setup key)
-{ return QSettings().value(groupOfKey(key)); }
-
-void ASettings::write(const Setup key, const QVariant &val)
-{ QSettings().setValue(groupOfKey(key), val); }
-
-QVariant ASettings::read(const NewFlight key)
-{ return QSettings().value(groupOfKey(key)); }
-
-void ASettings::write(const NewFlight key, const QVariant &val)
-{ QSettings().setValue(groupOfKey(key), val); }
-
 QVariant ASettings::read(const UserData key)
 { return QSettings().value(groupOfKey(key)); }
 
@@ -113,18 +132,9 @@ void ASettings::write(const UserData key, const QVariant &val)
 QString ASettings::groupOfKey (const ASettings::FlightLogging key)
 { return QStringLiteral("flightlogging/") + flightLoggingMap[key]; }
 
-QString ASettings::groupOfKey (const ASettings::LogBook key)
-{ return QStringLiteral("logbook/") + logBookMap[key]; }
-
 QString ASettings::groupOfKey (const ASettings::Main key)
 { return QStringLiteral("main/") + mainMap[key]; }
 
-QString ASettings::groupOfKey (const ASettings::NewFlight key)
-{ return QStringLiteral("NewFlight/") + newFlightMap[key]; }
-
-QString ASettings::groupOfKey (const ASettings::Setup key)
-{ return QStringLiteral("setup/") + setupMap[key]; }
-
 QString ASettings::groupOfKey (const ASettings::UserData key)
 { return QStringLiteral("userdata/") + userDataMap[key]; }
 
@@ -134,17 +144,8 @@ QString ASettings::groupOfKey (const ASettings::UserData key)
 QString ASettings::stringOfKey (const ASettings::FlightLogging key)
 { return  flightLoggingMap[key]; }
 
-QString ASettings::stringOfKey (const ASettings::LogBook key)
-{ return  logBookMap[key]; }
-
 QString ASettings::stringOfKey (const ASettings::Main key)
 { return  mainMap[key]; }
 
-QString ASettings::stringOfKey (const ASettings::NewFlight key)
-{ return  newFlightMap[key]; }
-
-QString ASettings::stringOfKey (const ASettings::Setup key)
-{ return  setupMap[key]; }
-
 QString ASettings::stringOfKey (const ASettings::UserData key)
 { return  userDataMap[key]; }

+ 26 - 35
src/classes/asettings.h

@@ -26,32 +26,44 @@
  */
 class ASettings {
 public:
-    enum class Setup {
-        SetupComplete,
-    };
-
     enum class Main {
+        SetupComplete,
         Style,
         Font,
         FontSize,
         UseSystemFont,
-    };
-
-    enum class LogBook {
-        View,
+        LogbookView,
     };
 
     enum class UserData {
         DisplaySelfAs,
-        AcftSortColumn,
-        PilSortColumn,
-        AcAllowIncomplete,
+        TailSortColumn,
+        PilotSortColumn,
+        AcftAllowIncomplete,
+        FtlWarningThreshold,
+        CurrWarningEnabled,
+        CurrWarningThreshold,
+        ShowToLgdCurrency,
+        ShowLicCurrency,
+        ShowTrCurrency,
+        ShowLckCurrency,
+        ShowMedCurrency,
+        ShowCustom1Currency,
+        ShowCustom2Currency,
+        LicCurrencyDate,
+        TrCurrencyDate,
+        LckCurrencyDate,
+        MedCurrencyDate,
+        Custom1CurrencyDate,
+        Custom2CurrencyDate,
+        Custom1CurrencyName,
+        Custom2CurrencyName,
     };
 
     enum class FlightLogging {
         Function,
         Approach,
-        NightLogging,
+        NightLoggingEnabled,
         LogIFR,
         FlightNumberPrefix,
         NumberTakeoffs,
@@ -60,10 +72,7 @@ public:
         PilotFlying,
         NightAngle,
         Rules,
-        FlightTimeFormat
-    };
-
-    enum class NewFlight {
+        FlightTimeFormat,
         FunctionComboBox,
         CalendarCheckBox,
     };
@@ -72,12 +81,7 @@ public:
      * \brief Should be called after QCoreApplication::set...Name have been called.
      */
     static void setup();
-
-    static QVariant read(const Setup key);
-    static void write(const Setup key, const QVariant &val);
-
-    static QVariant read(const LogBook key);
-    static void write(const LogBook key, const QVariant &val);
+    static void resetToDefaults();
 
     static QVariant read(const Main key);
     static void write(const Main key, const QVariant &val);
@@ -88,39 +92,26 @@ public:
     static QVariant read(const UserData key);
     static void write(const FlightLogging key, const QVariant &val);
 
-    static QVariant read(const NewFlight key);
-    static void write(const NewFlight key, const QVariant &val);
-
     /*!
      * \brief Return string representation of group of key: "ini_header/key"
      */
     static QString groupOfKey(const Main key);
-    static QString groupOfKey(const LogBook key);
-    static QString groupOfKey(const NewFlight key);
     static QString groupOfKey(const FlightLogging key);
-    static QString groupOfKey(const Setup key);
     static QString groupOfKey(const UserData key);
 
     /*!
      * \brief Return string representation of key
      */
     static QString stringOfKey(const Main key);
-    static QString stringOfKey(const LogBook key);
-    static QString stringOfKey(const NewFlight key);
     static QString stringOfKey(const FlightLogging key);
-    static QString stringOfKey(const Setup key);
     static QString stringOfKey(const UserData key);
 
     static QSettings settings();
 
 private:
     static QMap<Main, QString> mainMap;
-    static QMap<LogBook, QString> logBookMap;
     static QMap<UserData, QString> userDataMap;
     static QMap<FlightLogging, QString> flightLoggingMap;
-    static QMap<Setup, QString> setupMap;
-    static QMap<NewFlight, QString> newFlightMap;
-
 };
 
 #endif // ASETTINGS_H

+ 2 - 2
src/classes/astandardpaths.cpp

@@ -25,9 +25,9 @@ bool AStandardPaths::setup()
     directories = {
         {Database, QDir(QStandardPaths::writableLocation(data_location))},
         {Templates, QDir(QStandardPaths::writableLocation(data_location)
-         + QStringLiteral("/templates"))},
+         + QLatin1String("/templates"))},
         {Backup, QDir(QStandardPaths::writableLocation(data_location)
-         + QStringLiteral("/backup"))}
+         + QLatin1String("/backup"))}
     };
     if (scan_directories())
         return true;

+ 20 - 10
src/classes/astyle.cpp

@@ -24,8 +24,10 @@
 #include <QStyle>
 #include <QStyleFactory>
 #include <QApplication>
+#include <QFont>
 #include "src/testing/adebug.h"
 #include "src/classes/asettings.h"
+#include "src/functions/alog.h"
 
 const QString AStyle::defaultStyle = QLatin1String("Fusion");
 
@@ -40,15 +42,24 @@ const QList<StyleSheet> AStyle::styleSheets = {
 QString AStyle::currentStyle = defaultStyle;
 
 /*!
- * \brief Setup style and stylesheet by reading from openPilotLog.ini
+ * \brief Setup Application style by reading from openPilotLog.ini
  */
 void AStyle::setup()
 {
-    QVariant style_setting = ASettings::read(ASettings::Main::Style);
-    if(!style_setting.toBool()){
-        //DEB << "Setting style to default:" << defaultStyle;
-        style_setting = defaultStyle;
+    // Set Font
+    if (!ASettings::read(ASettings::Main::UseSystemFont).toBool()) {
+        QFont font(ASettings::read(ASettings::Main::Font).toString());
+        font.setPointSize(ASettings::read(ASettings::Main::FontSize).toUInt());
+        qApp->setFont(font);
+        LOG << "Application Font set:\t" << font.toString().splitRef(',').first() << "\n";
+    }
+    // Set style, stylesheet or palette
+    QString style_setting = ASettings::read(ASettings::Main::Style).toString();
+
+    if (style_setting == QLatin1String("Dark-Palette")) {
+        AStyle::setStyle(AStyle::darkPalette());
         ASettings::write(ASettings::Main::Style, style_setting);
+        return;
     }
     for (const auto &style_name : styles) {
         if (style_setting == style_name) {
@@ -59,7 +70,7 @@ void AStyle::setup()
     }
     for (const auto &style_sheet : styleSheets) {
         if (style_setting == style_sheet.styleSheetName) {
-            setStyle(style_sheet.styleSheetName);
+            setStyle(style_sheet);
             currentStyle = style_sheet.styleSheetName;
             return;
         }
@@ -77,8 +88,7 @@ void AStyle::resetStyle()
 void AStyle::setStyle(const QString &style_key)
 {
     resetStyle();
-    DEB << "Setting style: " << style_key;
-    qApp->setStyleSheet(QString());
+    LOG << "Setting style:\t" << style_key << "\n";
     QApplication::setStyle(QStyleFactory::create(style_key));
     currentStyle = style_key;
 }
@@ -86,7 +96,7 @@ void AStyle::setStyle(const QString &style_key)
 void AStyle::setStyle(const StyleSheet &style_sheet)
 {
     resetStyle();
-    DEB << "Setting stylesheet: " << style_sheet.styleSheetName;
+    LOG << "Setting stylesheet:\t" << style_sheet.styleSheetName << "\n";
     qApp->setStyleSheet(read_stylesheet(style_sheet.fileName));
     currentStyle = style_sheet.styleSheetName;
 }
@@ -94,7 +104,7 @@ void AStyle::setStyle(const StyleSheet &style_sheet)
 void AStyle::setStyle(const QPalette &palette)
 {
     resetStyle();
-    DEB << "Setting Palette...";
+    LOG << "Setting Colour Palette...\n";
     qApp->setPalette(palette);
 }
 

+ 12 - 12
src/database/adatabase.cpp

@@ -19,6 +19,7 @@
 #include "src/testing/adebug.h"
 #include "src/classes/astandardpaths.h"
 #include "src/oplconstants.h"
+#include "src/functions/alog.h"
 
 
 ADatabaseError::ADatabaseError(QString msg_)
@@ -109,7 +110,7 @@ bool ADatabase::connect()
     if (!db.open())
         return false;
 
-    DEB << "Database connection established." << db.lastError().text();
+    LOG << "Database connection established.\n";
     // Enable foreign key restrictions
     QSqlQuery query(QStringLiteral("PRAGMA foreign_keys = ON;"));
     updateLayout();
@@ -120,7 +121,7 @@ void ADatabase::disconnect()
 {
     auto db = ADatabase::database();
     db.close();
-    DEB << "Database connection closed.";
+    LOG << "Database connection closed.\n";
 }
 
 QSqlDatabase ADatabase::database()
@@ -286,8 +287,8 @@ bool ADatabase::update(AEntry updated_entry)
     QSqlQuery query;
     query.prepare(statement);
     for (auto i = data.constBegin(); i != data.constEnd(); ++i) {
-        if (i.value() == QVariant(QString())) {
-            query.addBindValue(QVariant(QString()));
+        if (i.value() == QVariant(QString()) || i.value() == 0) {
+            query.addBindValue(QVariant(QVariant::String));
         } else {
             query.addBindValue(i.value());
         }
@@ -330,9 +331,9 @@ bool ADatabase::insert(AEntry new_entry)
     QSqlQuery query;
     query.prepare(statement);
 
-    for (i = data.begin(); i != data.end(); ++i) {
-        if (i.value() == QVariant(QString())) {
-            query.addBindValue(QVariant(QString()));
+    for (auto i = data.constBegin(); i != data.constEnd(); ++i) {
+        if (i.value() == QVariant(QString()) || i.value() == 0) {
+            query.addBindValue(QVariant(QVariant::String));
         } else {
             query.addBindValue(i.value());
         }
@@ -620,7 +621,7 @@ ATailEntry ADatabase::resolveForeignTail(RowId_T foreign_key)
     return aDB->getTailEntry(foreign_key);
 }
 
-QVector<QString> ADatabase::customQuery(QString statement, int return_values)
+QVector<QVariant> ADatabase::customQuery(QString statement, int return_values)
 {
     QSqlQuery query(statement);
     query.exec();
@@ -630,17 +631,16 @@ QVector<QString> ADatabase::customQuery(QString statement, int return_values)
         DEB << "Error: " << query.lastError().text();
         DEB << "Statement: " << statement;
         lastError = query.lastError().text();
-        return QVector<QString>();
+        return QVector<QVariant>();
     } else {
         query.first();
         query.previous();
-        QVector<QString> result;
+        QVector<QVariant> result;
         while (query.next()) {
             for (int i = 0; i < return_values ; i++) {
-                result.append(query.value(i).toString());
+                result.append(query.value(i));
             }
         }
-        emit dataBaseUpdated();
         lastError = QString();
         return result;
     }

+ 1 - 1
src/database/adatabase.h

@@ -131,7 +131,7 @@ public:
      * \param query - the full sql query statement
      * \param returnValues - the number of return values
      */
-    QVector<QString> customQuery(QString statement, int return_values);
+    QVector<QVariant> customQuery(QString statement, int return_values);
 
     /*!
      * \brief Checks if an entry exists in the database, based on position data

+ 0 - 1
src/database/adatabasesetup.cpp

@@ -297,7 +297,6 @@ bool ADataBaseSetup::downloadTemplates()
         QFileInfo downloaded_file(template_dir.filePath(table % QStringLiteral(".csv")));
         if (downloaded_file.size() == 0)
             return false; // ssl/network error
-
     }
     return true;
 }

+ 11 - 26
src/gui/widgets/totalswidget.h → src/functions/alog.h

@@ -15,31 +15,16 @@
  *You should have received a copy of the GNU General Public License
  *along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
-#ifndef TOTALSWIDGET_H
-#define TOTALSWIDGET_H
+#ifndef ALOG_H
+#define ALOG_H
 
-#include <QWidget>
-#include <QStackedLayout>
-#include <QLabel>
-#include <QLineEdit>
-#include <QSettings>
-#include "src/functions/astat.h"
-
-namespace Ui {
-class TotalsWidget;
-}
-
-class TotalsWidget : public QWidget
-{
-    Q_OBJECT
-
-public:
-    explicit TotalsWidget(QWidget *parent = nullptr);
-    ~TotalsWidget();
-
-private:
-    Ui::TotalsWidget *ui;
-    const QString userName();
-};
+/* Use QTextStream to print status messages. These messages
+ * are oriented towards end-users and will persist even when
+ * compiling a release without enabling qDebug. As such, LOG
+ * should be used to document "important" enough steps that
+ * the user would care about or that are "milestones" that
+ * the program runs through.
+ */
+#define LOG QTextStream(stdout) << "openPilotLog - "
 
-#endif // TOTALSWIDGET_H
+#endif // ALOG_H

+ 79 - 42
src/functions/astat.cpp

@@ -21,82 +21,82 @@
 
 /*!
  * \brief AStat::totalTime Looks up Total Blocktime in the flights database
- * \param yearType - Whether the calculation is based on total time, last
- * calendar year or the last rolling year
+ * \param TimeFrame - The timeframe used for the calculations.
  * \return Amount of Total Block Time in minutes
  */
-QString AStat::totalTime(yearType year_type)
+int AStat::totalTime(TimeFrame time_frame)
 {
     QString statement;
     QDate start;
     QString start_date;
 
-    switch (year_type) {
-    case AStat::allYears:
-        statement = "SELECT SUM(tblk) FROM flights";
+    switch (time_frame) {
+    case TimeFrame::AllTime:
+        statement = QStringLiteral("SELECT SUM(tblk) FROM flights");
         break;
-    case AStat::calendarYear:
+    case TimeFrame::CalendarYear:
         start.setDate(QDate::currentDate().year(), 1, 1);
         start_date = start.toString(Qt::ISODate);
         start_date.append(QLatin1Char('\''));
         start_date.prepend(QLatin1Char('\''));
-        statement = "SELECT SUM(tblk) FROM flights WHERE doft >= " + start_date;
+        statement = QLatin1String("SELECT SUM(tblk) FROM flights WHERE doft >= ") + start_date;
         break;
-    case AStat::rollingYear:
+    case TimeFrame::Rolling12Months:
         start = QDate::fromJulianDay(QDate::currentDate().toJulianDay() - 365);
         start_date = start.toString(Qt::ISODate);
         start_date.append(QLatin1Char('\''));
         start_date.prepend(QLatin1Char('\''));
-        statement = "SELECT SUM(tblk) FROM flights WHERE doft >= " + start_date;
+        statement = QLatin1String("SELECT SUM(tblk) FROM flights WHERE doft >= ") + start_date;
+        break;
+    case TimeFrame::Rolling28Days:
+        start = QDate::fromJulianDay(QDate::currentDate().toJulianDay() - 28);
+        start_date = start.toString(Qt::ISODate);
+        start_date.append(QLatin1Char('\''));
+        start_date.prepend(QLatin1Char('\''));
+        statement = QLatin1String("SELECT SUM(tblk) FROM flights WHERE doft >= ") + start_date;
         break;
     }
 
-    //QVector<QString> result = Db::customQuery(query, 1);
-    QSqlQuery query(statement);
+    auto db_return = aDB->customQuery(statement, 1);
 
-    if (!query.first()) {
-        DEB << "No result found. Check Query and Error.";
-        DEB << "Error: " << query.lastError().text();
-        return "00:00";
-    } else {
-        query.previous();
-        return query.value(0).toString();
-    }
+    if (!db_return.isEmpty())
+        return db_return.first().toInt();
+
+    return 0;
 }
 
 /*!
  * \brief AStat::currencyTakeOffLanding Returns the amount of Take Offs and
- * Landings performed in the last x days. Normally, 90 would be used. (EASA)
- * \param days Number of days to check
- * \return {TO,LDG}
+ * Landings performed in the last x days. If no vallue for days is provided, 90 is used,
+ * as per EASA regulations
+ * \return QVector<QString>{#TO,#LDG}
  */
-QVector<QString> AStat::currencyTakeOffLanding(int days)
+QVector<QVariant> AStat::countTakeOffLanding(int days)
 {
     QDate start = QDate::fromJulianDay(QDate::currentDate().toJulianDay() - days);
     QString startdate = start.toString(Qt::ISODate);
     startdate.append(QLatin1Char('\''));
     startdate.prepend(QLatin1Char('\''));
 
+    QString statement = QLatin1String("SELECT "
+                                      " SUM(IFNULL(flights.toDay,0) + IFNULL(flights.toNight,0)) AS 'TO', "
+                                      " SUM(IFNULL(flights.ldgDay,0) + IFNULL(flights.ldgNight,0)) AS 'LDG' "
+                                      " FROM flights "
+                                      " WHERE doft >=") + startdate;
 
-    QString statement = "SELECT "
-            "CAST(SUM(flights.TOday) + SUM(flights.TOnight) AS INTEGER) 'TO', "
-            "CAST(SUM(flights.LDGday) + SUM(flights.LDGnight) AS INTEGER) AS 'LDG' "
-            "FROM flights "
-            "WHERE doft >= \"" + startdate + "\"";
-
-    QVector<QString> result = aDB->customQuery(statement, 2);
-
-    if (!result.isEmpty()) {
-        return result;
-    } else {
-        return QVector<QString>();
+    QVector<QVariant> result = aDB->customQuery(statement, 2);
+    // make sure a value is returned instead of NULL
+    for (const auto &var : result) {
+        if (var.isNull())
+            result.replace(result.indexOf(var), 0);
     }
 
+    return result;
 }
 
 QVector<QPair<QString, QString>> AStat::totals()
 {
-    QString statement = "SELECT "
+    QString statement = QStringLiteral("SELECT "
             "printf('%02d',CAST(SUM(tblk) AS INT)/60)||':'||printf('%02d',CAST(SUM(tblk) AS INT)%60) AS 'TOTAL', "
             "printf('%02d',CAST(SUM(tSPSE) AS INT)/60)||':'||printf('%02d',CAST(SUM(tSPSE) AS INT)%60) AS 'SP SE', "
             "printf('%02d',CAST(SUM(tSPME) AS INT)/60)||':'||printf('%02d',CAST(SUM(tSPME) AS INT)%60) AS 'SP ME', "
@@ -111,10 +111,13 @@ QVector<QPair<QString, QString>> AStat::totals()
             "printf('%02d',CAST(SUM(tMP) AS INT)/60)||':'||printf('%02d',CAST(SUM(tMP) AS INT)%60) AS 'MultPilot', "
             "CAST(SUM(toDay) AS INT) AS 'TO Day', CAST(SUM(toNight) AS INT) AS 'TO Night', "
             "CAST(SUM(ldgDay) AS INT) AS 'LDG Day', CAST(SUM(ldgNight) AS INT) AS 'LDG Night' "
-            "FROM flights";
-    QVector<QString> columns = {"total", "spse", "spme", "night", "ifr",
-                                "pic", "picus", "sic", "dual", "fi", "sim", "multipilot",
-                                "today", "tonight", "ldgday", "ldgnight"
+            "FROM flights");
+    QVector<QString> columns = {QLatin1String("total"), QLatin1String("spse"), QLatin1String("spme"),
+                                QLatin1String("night"), QLatin1String("ifr"),  QLatin1String("pic"),
+                                QLatin1String("picus"), QLatin1String("sic"),  QLatin1String("dual"),
+                                QLatin1String("fi"),    QLatin1String("sim"),  QLatin1String("multipilot"),
+                                QLatin1String("today"), QLatin1String("tonight"), QLatin1String("ldgday"),
+                                QLatin1String("ldgnight")
                                };
     QSqlQuery query(statement);
     QVector<QPair<QString, QString>> output;
@@ -125,8 +128,42 @@ QVector<QPair<QString, QString>> AStat::totals()
         if (!value.isEmpty()) {
             output.append(QPair<QString, QString>{column, value});
         } else {
-            output.append(QPair<QString, QString>{column, QString("00:00")});
+            output.append(QPair<QString, QString>{column, QLatin1String("00:00")});
         }
     }
     return output;
 }
+
+/*!
+ * \brief Calculates the date of expiry for the take-off and landing currency.
+ *
+ * The default value for days is 90.
+ * \return
+ */
+QDate AStat::currencyTakeOffLandingExpiry(int expiration_days)
+{
+    int number_of_days = 0;
+    QVector<QVariant> takeoff_landings;
+
+    // Check if enough take-offs and landings exist within the expiration period, if that's not the case
+    // we are out of currency and we can stop right there.
+    takeoff_landings = countTakeOffLanding(expiration_days);
+    if (takeoff_landings[0].toInt() < 3 || takeoff_landings[1].toInt() < 3)
+        return QDate::currentDate();
+
+    // Go back in time to find a point at which number of Take-Offs and Landings >= 3
+    for (int i=0; i <= expiration_days; i++) {
+        takeoff_landings = countTakeOffLanding(i);
+        //DEB << takeoff_landings;
+        if (takeoff_landings[0].toInt() >= 3 && takeoff_landings[1].toInt() >= 3) {
+            number_of_days = i;
+            //DEB << "Loop position i =" << i;
+            break;
+        }
+    }
+    // The expiration date of currency is now currentDate - number of days + expiration_days (default 90)
+    QDate expiration_date = QDate::fromJulianDay(QDate::currentDate().toJulianDay() - number_of_days);
+    //DEB << expiration_date.addDays(expiration_days);
+
+    return expiration_date.addDays(expiration_days);;
+}

+ 7 - 3
src/functions/astat.h

@@ -30,11 +30,15 @@ namespace AStat {
  */
 
 
-    enum yearType {allYears, calendarYear, rollingYear};
+    enum class TimeFrame {AllTime, CalendarYear, Rolling12Months, Rolling28Days};
 
-    QString totalTime(yearType);
+    enum class ToLdg {Takeoff, Landing};
 
-    QVector<QString> currencyTakeOffLanding(int days);
+    int totalTime(TimeFrame time_frame);
+
+    QVector<QVariant> countTakeOffLanding(int days = 90);
+
+    QDate currencyTakeOffLandingExpiry(int expiration_days = 90);
 
     QVector<QPair<QString, QString>> totals();
 

+ 142 - 16
src/gui/dialogues/firstrundialog.cpp

@@ -25,6 +25,7 @@
 #include "src/classes/asettings.h"
 #include "src/oplconstants.h"
 #include <QErrorMessage>
+#include "src/classes/astyle.h"
 
 FirstRunDialog::FirstRunDialog(QWidget *parent) :
     QDialog(parent),
@@ -34,11 +35,21 @@ FirstRunDialog::FirstRunDialog(QWidget *parent) :
     ui->stackedWidget->setCurrentIndex(0);
     ui->lastnameLineEdit->setFocus();
     ui->previousPushButton->setEnabled(false);
-    ui->nightComboBox->setCurrentIndex(1);
+    ui->logoLabel->setPixmap(QPixmap(Opl::Assets::LOGO));
 
+    // approach Combo Box
     for (const auto &approach : Opl::ApproachTypes){
         ui->approachComboBox->addItem(approach);
     }
+    // Style combo box
+    const QSignalBlocker blocker_style(ui->styleComboBox);
+    ui->styleComboBox->addItems(AStyle::styles);
+    for (const auto &style_sheet : AStyle::styleSheets) {
+        ui->styleComboBox->addItem(style_sheet.styleSheetName);
+    }
+    ui->styleComboBox->addItem(QStringLiteral("Dark-Palette"));
+    ui->styleComboBox->model()->sort(0);
+    ui->styleComboBox->setCurrentText(AStyle::defaultStyle);
 }
 
 FirstRunDialog::~FirstRunDialog()
@@ -48,8 +59,8 @@ FirstRunDialog::~FirstRunDialog()
 
 void FirstRunDialog::on_previousPushButton_clicked()
 {
-    auto current_idx = ui->stackedWidget->currentIndex();
-    switch (current_idx) {
+    auto current_index = ui->stackedWidget->currentIndex();
+    switch (current_index) {
     case 0:
         return;
     case 1:
@@ -59,14 +70,14 @@ void FirstRunDialog::on_previousPushButton_clicked()
         ui->nextPushButton->setText(tr("Next"));
         break;
     }
-    ui->stackedWidget->setCurrentIndex(current_idx - 1);
+    ui->stackedWidget->setCurrentIndex(current_index - 1);
 
 }
 
 void FirstRunDialog::on_nextPushButton_clicked()
 {
-    auto current_idx = ui->stackedWidget->currentIndex();
-    switch (current_idx) {
+    auto current_index = ui->stackedWidget->currentIndex();
+    switch (current_index) {
     case 0:
         if(ui->firstnameLineEdit->text().isEmpty()
            || ui->lastnameLineEdit->text().isEmpty())
@@ -78,17 +89,17 @@ void FirstRunDialog::on_nextPushButton_clicked()
         }
         ui->previousPushButton->setEnabled(true);
         break;
-    case 1:
+    case 3:
         ui->nextPushButton->setText(tr("Done"));
         break;
-    case 2:
+    case 4:
         if(!finishSetup())
             QDialog::reject();
         else
             QDialog::accept();
         return;
     }
-    ui->stackedWidget->setCurrentIndex(current_idx + 1);
+    ui->stackedWidget->setCurrentIndex(current_index + 1);
 }
 
 bool FirstRunDialog::finishSetup()
@@ -118,18 +129,49 @@ bool FirstRunDialog::finishSetup()
 
 void FirstRunDialog::writeSettings()
 {
+    ASettings::resetToDefaults();
     ASettings::write(ASettings::FlightLogging::Function, ui->functionComboBox->currentText());
     ASettings::write(ASettings::FlightLogging::Approach, ui->approachComboBox->currentIndex());
-    ASettings::write(ASettings::FlightLogging::NightLogging, ui->nightComboBox->currentIndex());
+    switch (ui->nightComboBox->currentIndex()) {
+    case 0:
+        ASettings::write(ASettings::FlightLogging::NightLoggingEnabled, true);
+        break;
+    case 1:
+        ASettings::write(ASettings::FlightLogging::NightLoggingEnabled, false);
+        break;
+    default:
+        ASettings::write(ASettings::FlightLogging::NightLoggingEnabled, true);
+        break;
+    }
+    switch (ui->nightRulesComboBox->currentIndex()) {
+    case 0:
+        ASettings::write(ASettings::FlightLogging::NightAngle, 6);
+        break;
+    case 1:
+        ASettings::write(ASettings::FlightLogging::NightAngle, 0);
+        break;
+
+    }
     ASettings::write(ASettings::FlightLogging::LogIFR, ui->rulesComboBox->currentIndex());
     ASettings::write(ASettings::FlightLogging::FlightNumberPrefix, ui->prefixLineEdit->text());
-    ASettings::write(ASettings::FlightLogging::NumberTakeoffs, 1);
-    ASettings::write(ASettings::FlightLogging::NumberLandings, 1);
-    ASettings::write(ASettings::FlightLogging::PopupCalendar, true);
-    ASettings::write(ASettings::FlightLogging::PilotFlying, true);
     ASettings::write(ASettings::FlightLogging::FlightTimeFormat, Opl::Time::Default);
-    ASettings::write(ASettings::Main::UseSystemFont, true);
     ASettings::write(ASettings::UserData::DisplaySelfAs, ui->aliasComboBox->currentIndex());
+    ASettings::write(ASettings::Main::LogbookView, ui->logbookViewComboBox->currentIndex());
+
+    switch (ui->currWarningCheckBox->checkState()) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, ui->currWarningThresholdSpinBox->value());
+    ASettings::write(ASettings::Main::Style, ui->styleComboBox->currentText());
+    QSettings settings;
+    settings.sync();
 }
 
 bool FirstRunDialog::setupDatabase()
@@ -143,7 +185,7 @@ bool FirstRunDialog::setupDatabase()
 
     if (confirm.exec() == QMessageBox::Yes) {
         useLocalTemplates = false;
-        if (!ADataBaseSetup::downloadTemplates()) { // To do: return true only if size of dl != 0
+        if (!ADataBaseSetup::downloadTemplates()) {
             QMessageBox message_box(this);
             message_box.setText(tr("Downloading latest data has failed.<br><br>Using local data instead."));
             message_box.exec();
@@ -200,3 +242,87 @@ void FirstRunDialog::reject()
         QDialog::reject();
     }
 }
+
+void FirstRunDialog::on_styleComboBox_currentTextChanged(const QString &new_style_setting)
+{
+    DEB << "style selected:"<<new_style_setting;
+    if (new_style_setting == QLatin1String("Dark-Palette")) {
+        //DEB << "Palette";
+        AStyle::setStyle(AStyle::darkPalette());
+        return;
+    }
+    for (const auto &style_name : AStyle::styles) {
+        if (new_style_setting == style_name) {
+            //DEB << "style";
+            AStyle::setStyle(style_name);
+            return;
+        }
+    }
+    for (const auto &style_sheet : AStyle::styleSheets) {
+        if (new_style_setting == style_sheet.styleSheetName) {
+            //DEB << "stylesheet";
+            AStyle::setStyle(style_sheet);
+            return;
+        }
+    }
+}
+
+void FirstRunDialog::on_currWarningCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, arg1);
+}
+
+void FirstRunDialog::on_currWarningThresholdSpinBox_valueChanged(int arg1)
+{
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, arg1);
+}
+
+void FirstRunDialog::on_currLicDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::LicCurrencyDate, date);
+}
+
+void FirstRunDialog::on_currTrDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::TrCurrencyDate, date);
+}
+
+void FirstRunDialog::on_currLckDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::LckCurrencyDate, date);
+}
+
+void FirstRunDialog::on_currMedDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::MedCurrencyDate, date);
+}
+
+void FirstRunDialog::on_currCustom1DateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::Custom1CurrencyDate, date);
+}
+
+void FirstRunDialog::on_currCustom2DateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::Custom2CurrencyDate, date);
+}
+
+void FirstRunDialog::on_currCustom1LineEdit_editingFinished()
+{
+    ASettings::write(ASettings::UserData::Custom1CurrencyName, ui->currCustom1LineEdit->text());
+}
+
+void FirstRunDialog::on_currCustom2LineEdit_editingFinished()
+{
+    ASettings::write(ASettings::UserData::Custom2CurrencyName, ui->currCustom2LineEdit->text());
+}

+ 23 - 1
src/gui/dialogues/firstrundialog.h

@@ -41,7 +41,29 @@ private slots:
 
     void on_nextPushButton_clicked();
 
-private:    
+    void on_styleComboBox_currentTextChanged(const QString &new_style_setting);
+
+    void on_currWarningCheckBox_stateChanged(int arg1);
+
+    void on_currWarningThresholdSpinBox_valueChanged(int arg1);
+
+    void on_currLicDateEdit_userDateChanged(const QDate &date);
+
+    void on_currTrDateEdit_userDateChanged(const QDate &date);
+
+    void on_currLckDateEdit_userDateChanged(const QDate &date);
+
+    void on_currMedDateEdit_userDateChanged(const QDate &date);
+
+    void on_currCustom1DateEdit_userDateChanged(const QDate &date);
+
+    void on_currCustom2DateEdit_userDateChanged(const QDate &date);
+
+    void on_currCustom1LineEdit_editingFinished();
+
+    void on_currCustom2LineEdit_editingFinished();
+
+private:
     Ui::FirstRunDialog *ui;
     bool useLocalTemplates;
 

Fichier diff supprimé car celui-ci est trop grand
+ 719 - 220
src/gui/dialogues/firstrundialog.ui


+ 7 - 7
src/gui/dialogues/newflight.ui

@@ -17,7 +17,7 @@
    <item row="0" column="0" colspan="2">
     <widget class="QTabWidget" name="flightDataTabWidget">
      <property name="currentIndex">
-      <number>1</number>
+      <number>0</number>
      </property>
      <widget class="QWidget" name="flightDataTab">
       <attribute name="title">
@@ -177,7 +177,7 @@
         </widget>
        </item>
        <item row="1" column="3">
-        <widget class="QComboBox" name="deptTZ">
+        <widget class="QComboBox" name="deptTZComboBox">
          <property name="focusPolicy">
           <enum>Qt::NoFocus</enum>
          </property>
@@ -379,7 +379,7 @@
         </widget>
        </item>
        <item row="3" column="3">
-        <widget class="QComboBox" name="destTZ">
+        <widget class="QComboBox" name="destTZComboBox">
          <property name="focusPolicy">
           <enum>Qt::NoFocus</enum>
          </property>
@@ -863,7 +863,7 @@
       <zorder>autoPicusLabel</zorder>
       <zorder>tSICLabel</zorder>
       <zorder>tIFRLabel</zorder>
-      <zorder>deptTZ</zorder>
+      <zorder>deptTZComboBox</zorder>
       <zorder>tSPSELabel</zorder>
       <zorder>RemarksLineEdit</zorder>
       <zorder>picLabel</zorder>
@@ -881,7 +881,7 @@
       <zorder>thirdPilotNameLineEdit</zorder>
       <zorder>autoMPLabel</zorder>
       <zorder>picNameLineEdit</zorder>
-      <zorder>destTZ</zorder>
+      <zorder>destTZComboBox</zorder>
       <zorder>RemarksLabel</zorder>
       <zorder>tPICUSLabel</zorder>
       <zorder>autoNightLabel</zorder>
@@ -1374,7 +1374,7 @@
    <item row="1" column="0">
     <widget class="QPushButton" name="cancelButton">
      <property name="styleSheet">
-      <string notr="true">color: rgb(164, 0, 0);</string>
+      <string notr="true"/>
      </property>
      <property name="text">
       <string>Cancel</string>
@@ -1390,7 +1390,7 @@
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Add your flight to the logbook.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;You can only perform this action if all of the mandatory fields are filled.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
      <property name="styleSheet">
-      <string notr="true">color: rgb(78, 154, 6);</string>
+      <string notr="true"/>
      </property>
      <property name="text">
       <string>Submit</string>

+ 24 - 3
src/gui/dialogues/newflightdialog.cpp

@@ -137,11 +137,11 @@ NewFlightDialog::NewFlightDialog(QWidget *parent) :
     ui->setupUi(this);
     flightEntry = AFlightEntry();
     setup();
-    if (ASettings::read(ASettings::NewFlight::FunctionComboBox).toString() == QLatin1String("SIC")) {
+    if (ASettings::read(ASettings::FlightLogging::FunctionComboBox).toString() == QLatin1String("SIC")) {
         ui->picNameLineEdit->setText(QString());
         ui->secondPilotNameLineEdit->setText("self");
     }
-    if(ASettings::read(ASettings::NewFlight::FunctionComboBox).toString() == QLatin1String("PIC")){
+    if(ASettings::read(ASettings::FlightLogging::FunctionComboBox).toString() == QLatin1String("PIC")){
         ui->picNameLineEdit->setText(QStringLiteral("self"));
         emit ui->picNameLineEdit->editingFinished();
     }
@@ -1110,7 +1110,7 @@ void NewFlightDialog::onDoftLineEdit_entered()
 
 void NewFlightDialog::on_calendarCheckBox_stateChanged(int arg1)
 {
-    ASettings::write(ASettings::NewFlight::CalendarCheckBox, ui->calendarCheckBox->isChecked());
+    ASettings::write(ASettings::FlightLogging::CalendarCheckBox, ui->calendarCheckBox->isChecked());
     DEB << "Calendar check box state changed.";
     switch (arg1) {
     case 0: // unchecked
@@ -1361,3 +1361,24 @@ void NewFlightDialog::on_FunctionComboBox_currentIndexChanged(int)
     if (updateEnabled)
         fillDeductibleData();
 }
+
+
+// [F]: Not a priority right now.
+void NewFlightDialog::on_deptTZComboBox_currentIndexChanged(int index)
+{
+    if (index > 0) {
+        QMessageBox message_box(this);
+        message_box.setText(tr("Currently only logging in UTC time is supported."));
+        message_box.exec();
+        ui->deptTZComboBox->setCurrentIndex(0);
+    }
+}
+
+void NewFlightDialog::on_destTZComboBox_currentIndexChanged(int index)
+{
+    if (index > 0) {
+        QMessageBox message_box(this);
+        message_box.setText(tr("Currently only logging in UTC time is supported."));
+        message_box.exec();
+        ui->destTZComboBox->setCurrentIndex(0);}
+}

+ 3 - 0
src/gui/dialogues/newflightdialog.h

@@ -28,6 +28,7 @@
 #include <QBitArray>
 #include <QLineEdit>
 #include <QCalendarWidget>
+#include <QComboBox>
 #include <QTabWidget>
 #include <QKeyEvent>
 #include "src/functions/atime.h"
@@ -80,6 +81,8 @@ private slots:
     void on_deptLocLineEdit_editingFinished();
     void on_destLocLineEdit_editingFinished();
     void on_acftLineEdit_editingFinished();
+    void on_deptTZComboBox_currentIndexChanged(int index);
+    void on_destTZComboBox_currentIndexChanged(int index);
 
 private:
     Ui::NewFlight *ui;

+ 1 - 1
src/gui/dialogues/newtaildialog.cpp

@@ -266,7 +266,7 @@ void NewTailDialog::on_buttonBox_accepted()
     }
 
     if (!verify()) {
-        if (!ASettings::read(ASettings::UserData::AcAllowIncomplete).toInt()) {
+        if (!ASettings::read(ASettings::UserData::AcftAllowIncomplete).toInt()) {
             QMessageBox message_box(this);
             message_box.setIcon(QMessageBox::Warning);
             message_box.setText(tr("Some or all recommended fields are empty.<br>"

+ 4 - 6
src/gui/widgets/aircraftwidget.cpp

@@ -28,7 +28,6 @@ AircraftWidget::AircraftWidget(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::AircraftWidget)
 {
-    DEB << "New AircraftWidet";
     ui->setupUi(this);
     ui->stackedWidget->addWidget(this->findChild<QWidget*>("welcomePageTails"));
     ui->stackedWidget->setCurrentWidget(this->findChild<QWidget*>("welcomePageTails"));
@@ -38,7 +37,6 @@ AircraftWidget::AircraftWidget(QWidget *parent) :
 
 AircraftWidget::~AircraftWidget()
 {
-    DEB << "Deleting NewAircraftWidget";
     delete ui;
 }
 
@@ -48,7 +46,7 @@ AircraftWidget::~AircraftWidget()
 
 void AircraftWidget::setupModelAndView()
 {
-    sortColumn = ASettings::read(ASettings::UserData::AcftSortColumn).toInt();
+    sortColumn = ASettings::read(ASettings::UserData::TailSortColumn).toInt();
 
     model = new QSqlTableModel(this);
     model->setTable("viewTails");
@@ -140,9 +138,9 @@ void AircraftWidget::onDeleteUnsuccessful()
     } else {
         QString constrained_flights_string;
         for (int i=0; i<constrained_flights.length(); i++) {
-            constrained_flights_string.append(constrained_flights[i].summary() + QStringLiteral("&nbsp;&nbsp;&nbsp;&nbsp;<br>"));
+            constrained_flights_string.append(constrained_flights[i].summary() + QLatin1String("&nbsp;&nbsp;&nbsp;&nbsp;<br>"));
             if (i>10) {
-                constrained_flights_string.append("<br>[...]<br>");
+                constrained_flights_string.append(QLatin1String("<br>[...]<br>"));
                 break;
             }
         }
@@ -217,7 +215,7 @@ void AircraftWidget::tableView_selectionChanged()
 void AircraftWidget::tableView_headerClicked(int column)
 {
     sortColumn = column;
-    ASettings::write(ASettings::UserData::AcftSortColumn, column);
+    ASettings::write(ASettings::UserData::TailSortColumn, column);
 }
 
 void AircraftWidget::acft_editing_finished()

+ 2 - 0
src/gui/widgets/debugwidget.cpp

@@ -24,6 +24,7 @@
 #include "src/gui/dialogues/firstrundialog.h"
 #include <QtGlobal>
 #include "src/functions/atime.h"
+#include "src/functions/astat.h"
 
 DebugWidget::DebugWidget(QWidget *parent) :
     QWidget(parent),
@@ -184,6 +185,7 @@ void DebugWidget::on_importCsvPushButton_clicked()
 
 void DebugWidget::on_debugPushButton_clicked()
 {
+    DEB << "Expiration Date:" << AStat::currencyTakeOffLandingExpiry();
     // debug space
     //ASettings::write(ASettings::Setup::SetupComplete, false);
 }

+ 157 - 4
src/gui/widgets/homewidget.cpp

@@ -18,20 +18,173 @@
 #include "homewidget.h"
 #include "ui_homewidget.h"
 #include "src/testing/adebug.h"
+#include "src/database/adatabase.h"
+#include "src/functions/atime.h"
+#include "src/classes/asettings.h"
 
+// EASA FTL Limitations in minutes
+// 100 hours per 28 days
+static const int ROLLING_28_DAYS = 6000;
+// 900 hours per calendar year
+static const int CALENDAR_YEAR = 54000;
+// 1000 hours per rolling 12 months
+static const int ROLLING_12_MONTHS = 60000;
 
 HomeWidget::HomeWidget(QWidget *parent) :
     QWidget(parent),
     ui(new Ui::HomeWidget)
 {
     ui->setupUi(this);
-    totalsWidget = new TotalsWidget(this);
-    ui->stackedWidget->addWidget(totalsWidget);
-    ui->stackedWidget->setCurrentWidget(totalsWidget);
-    ui->stackedWidget->show();
+    today = QDate::currentDate();
+    currWarningThreshold = ASettings::read(ASettings::UserData::CurrWarningThreshold).toInt();
+    ftlWarningThreshold = ASettings::read(ASettings::UserData::FtlWarningThreshold).toDouble();
+    auto logo = QPixmap(Opl::Assets::LOGO);
+    ui->logoLabel->setPixmap(logo);
+    ui->welcomeLabel->setText(tr("Welcome to openPilotLog, %1!").arg(userName()));
+
+
+    limitationDisplayLabels = {
+        ui->TakeOffDisplayLabel,       ui->LandingsDisplayLabel,
+        ui->FlightTime28dDisplayLabel, ui->FlightTimeCalYearDisplayLabel,
+        ui->FlightTime12mDisplayLabel
+    };
+
+    DEB << "Filling Home Widget...";
+    fillTotals();
+    fillCurrencies();
+    fillLimitations();
 }
 
 HomeWidget::~HomeWidget()
 {
     delete ui;
 }
+
+void HomeWidget::onHomeWidget_dataBaseUpdated()
+{
+    for (const auto &label : limitationDisplayLabels)
+        label->setStyleSheet(QString());
+
+    fillTotals();
+    fillCurrencyTakeOffLanding();
+    fillLimitations();
+}
+
+void HomeWidget::fillTotals()
+{
+    auto data = AStat::totals();
+    for (const auto &field : data) {
+        auto line_edit = this->findChild<QLineEdit *>(field.first + QLatin1String("LineEdit"));
+        line_edit->setText(field.second);
+    }
+}
+
+void HomeWidget::fillCurrency(ASettings::UserData date, QLabel* display_label)
+{
+    auto currency_date = ASettings::read(date).toDate();
+
+    if (!currency_date.isValid())
+        return;
+
+    display_label->setText(currency_date.toString(Qt::TextDate));
+    if (today.addDays(currWarningThreshold) >= currency_date) { // expires less than 30 days from today
+        setLabelColour(display_label, Colour::Orange);
+    }
+    if (today >= currency_date) { // is expired
+        setLabelColour(display_label, Colour::Red);
+    }
+}
+
+void HomeWidget::fillCurrencies()
+{
+    fillCurrencyTakeOffLanding();
+
+    ASettings::read(ASettings::UserData::ShowLicCurrency).toBool() ?
+                fillCurrency(ASettings::UserData::ShowLicCurrency, ui->currLicDisplayLabel)
+              : hideLabels(ui->currLicLabel, ui->currLicDisplayLabel);
+
+    ASettings::read(ASettings::UserData::ShowTrCurrency).toBool() ?
+                fillCurrency(ASettings::UserData::TrCurrencyDate, ui->currTrDisplayLabel)
+              : hideLabels(ui->currTrLabel, ui->currTrDisplayLabel);
+
+    ASettings::read(ASettings::UserData::ShowLckCurrency).toBool() ?
+                fillCurrency(ASettings::UserData::LckCurrencyDate, ui->currLckDisplayLabel)
+              : hideLabels(ui->currLckLabel, ui->currLckDisplayLabel);
+
+    ASettings::read(ASettings::UserData::ShowMedCurrency).toBool() ?
+                fillCurrency(ASettings::UserData::MedCurrencyDate, ui->currMedDisplayLabel)
+              : hideLabels(ui->currMedLabel, ui->currMedDisplayLabel);
+
+    ASettings::read(ASettings::UserData::ShowCustom1Currency).toBool() ?
+                fillCurrency(ASettings::UserData::Custom1CurrencyDate, ui->currCustom1DisplayLabel)
+              : hideLabels(ui->currCustom1Label, ui->currCustom1DisplayLabel);
+    const QString custom1_text = ASettings::read(ASettings::UserData::Custom1CurrencyName).toString();
+    if (!custom1_text.isEmpty())
+        ui->currCustom1Label->setText(custom1_text);
+
+    ASettings::read(ASettings::UserData::ShowCustom2Currency).toBool() ?
+                fillCurrency(ASettings::UserData::Custom2CurrencyDate, ui->currCustom2DisplayLabel)
+              : hideLabels(ui->currCustom2Label, ui->currCustom2DisplayLabel);
+    const QString custom2_text = ASettings::read(ASettings::UserData::Custom2CurrencyName).toString();
+    if (!custom2_text.isEmpty())
+        ui->currCustom2Label->setText(custom2_text);
+}
+
+void HomeWidget::fillCurrencyTakeOffLanding()
+{
+    auto takeoff_landings = AStat::countTakeOffLanding();
+
+    ui->TakeOffDisplayLabel->setText(takeoff_landings[0].toString());
+    if (takeoff_landings[0].toUInt() < 3)
+        setLabelColour(ui->TakeOffDisplayLabel, Colour::Red);
+    ui->LandingsDisplayLabel->setText(takeoff_landings[1].toString());
+    if (takeoff_landings[1].toUInt() < 3)
+        setLabelColour(ui->LandingsDisplayLabel, Colour::Red);
+
+    if (ASettings::read(ASettings::UserData::ShowToLgdCurrency).toBool()) {
+        QDate expiration_date = AStat::currencyTakeOffLandingExpiry();
+        if (expiration_date <= QDate::currentDate())
+            setLabelColour(ui->currToLdgDisplayLabel, Colour::Red);
+        ui->currToLdgDisplayLabel->setText(expiration_date.toString(Qt::TextDate));
+    } else {
+        ui->currToLdgLabel->hide();
+        ui->currToLdgDisplayLabel->hide();
+    }
+}
+
+void HomeWidget::fillLimitations()
+{
+    int minutes = AStat::totalTime(AStat::TimeFrame::Rolling28Days);
+    ui->FlightTime28dDisplayLabel->setText(ATime::toString(minutes));
+    if (minutes >= ROLLING_28_DAYS) {
+        setLabelColour(ui->FlightTime28dDisplayLabel, Colour::Red);
+    } else if (minutes >= ROLLING_28_DAYS * ftlWarningThreshold) {
+        setLabelColour(ui->FlightTime28dDisplayLabel, Colour::Orange);
+    }
+
+    minutes = AStat::totalTime(AStat::TimeFrame::Rolling12Months);
+    ui->FlightTime12mDisplayLabel->setText(ATime::toString(minutes));
+    if (minutes >= ROLLING_12_MONTHS) {
+        setLabelColour(ui->FlightTime12mDisplayLabel, Colour::Red);
+    } else if (minutes >= ROLLING_12_MONTHS * ftlWarningThreshold) {
+        setLabelColour(ui->FlightTime12mDisplayLabel, Colour::Orange);
+    }
+
+    minutes = AStat::totalTime(AStat::TimeFrame::CalendarYear);
+    ui->FlightTimeCalYearDisplayLabel->setText(ATime::toString(minutes));
+    if (minutes >= CALENDAR_YEAR) {
+        setLabelColour(ui->FlightTimeCalYearDisplayLabel, Colour::Red);
+    } else if (minutes >= CALENDAR_YEAR * ftlWarningThreshold) {
+        setLabelColour(ui->FlightTimeCalYearDisplayLabel, Colour::Orange);
+    }
+}
+
+const QString HomeWidget::userName()
+{
+    auto statement = QStringLiteral("SELECT firstname FROM pilots WHERE ROWID=1");
+    auto name = aDB->customQuery(statement, 1);
+    if (!name.isEmpty())
+        return name.first().toString();
+
+    return QString();
+}

+ 43 - 8
src/gui/widgets/homewidget.h

@@ -22,15 +22,10 @@
 #include <QStackedLayout>
 #include <QLabel>
 #include <QLineEdit>
+#include <QSettings>
 #include "src/functions/astat.h"
-#include "src/functions/acalc.h"
-#include "src/gui/dialogues/newtaildialog.h"
-#include "src/gui/dialogues/newpilotdialog.h"
-#include "src/gui/widgets/totalswidget.h"
-#include "src/gui/dialogues/firstrundialog.h"
-#include "src/gui/dialogues/newflightdialog.h"
-
 #include "src/database/adatabase.h"
+#include "src/classes/asettings.h"
 
 namespace Ui {
 class HomeWidget;
@@ -47,7 +42,47 @@ public:
 private:
     Ui::HomeWidget *ui;
 
-    TotalsWidget* totalsWidget;
+    QDate today;
+    int currWarningThreshold;
+    double ftlWarningThreshold;
+
+    void fillTotals();
+    void fillCurrencies();
+    void fillCurrencyTakeOffLanding();
+    void fillLimitations();
+
+
+
+    QList<QLabel*> limitationDisplayLabels;
+    /*!
+     * \brief Retreives the users first name from the database.
+     */
+    const QString userName();
+
+    enum class Colour {Red, Orange};
+
+    inline void setLabelColour(QLabel* label, Colour colour)
+    {
+        switch (colour) {
+        case Colour::Red:
+            label->setStyleSheet(QStringLiteral("color: red"));
+            break;
+        case Colour::Orange:
+            label->setStyleSheet(QStringLiteral("color: orange"));
+            break;
+        default:
+            label->setStyleSheet(QString());
+            break;
+        }
+    }
+
+    inline void hideLabels(QLabel* label1, QLabel* label2) {
+        label1->hide();
+        label2->hide();
+    }
+    void fillCurrency(ASettings::UserData date, QLabel *display_label);
+public slots:
+    void onHomeWidget_dataBaseUpdated();
 };
 
 #endif // HOMEWIDGET_H

+ 934 - 45
src/gui/widgets/homewidget.ui

@@ -6,74 +6,963 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1280</width>
-    <height>720</height>
+    <width>1087</width>
+    <height>777</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="2">
-    <spacer name="verticalSpacer">
+  <layout class="QGridLayout" name="gridLayout_4">
+   <item row="3" column="0">
+    <widget class="Line" name="line_7">
      <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>205</height>
-      </size>
+      <enum>Qt::Horizontal</enum>
      </property>
-    </spacer>
+    </widget>
    </item>
-   <item row="1" column="1" colspan="2">
-    <widget class="QStackedWidget" name="stackedWidget">
-     <property name="currentIndex">
-      <number>1</number>
+   <item row="2" column="0">
+    <widget class="Line" name="line_2">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
      </property>
-     <widget class="QWidget" name="page"/>
-     <widget class="QWidget" name="page_2"/>
     </widget>
    </item>
-   <item row="1" column="3">
-    <spacer name="horizontalSpacer_2">
+   <item row="8" column="0">
+    <widget class="Line" name="line_4">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>414</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
+    </widget>
    </item>
-   <item row="2" column="2">
-    <spacer name="verticalSpacer_2">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
+   <item row="4" column="0">
+    <widget class="QLabel" name="totalsLabel">
+     <property name="font">
+      <font>
+       <weight>75</weight>
+       <bold>true</bold>
+      </font>
+     </property>
+     <property name="text">
+      <string>Your Totals</string>
      </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>205</height>
-      </size>
+     <property name="alignment">
+      <set>Qt::AlignBottom|Qt::AlignHCenter</set>
      </property>
-    </spacer>
+    </widget>
    </item>
    <item row="1" column="0">
-    <spacer name="horizontalSpacer">
+    <widget class="QLabel" name="welcomeLabel">
+     <property name="text">
+      <string>Welcome to openPilotLog!</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="7" column="0">
+    <widget class="QLabel" name="currencyLabel">
+     <property name="font">
+      <font>
+       <weight>75</weight>
+       <bold>true</bold>
+      </font>
+     </property>
+     <property name="text">
+      <string>Currency</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignBottom|Qt::AlignHCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0">
+    <widget class="Line" name="line">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>414</width>
-       <height>20</height>
-      </size>
+    </widget>
+   </item>
+   <item row="11" column="0">
+    <widget class="Line" name="line_3">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="12" column="0">
+    <layout class="QGridLayout" name="gridLayout_2">
+     <item row="0" column="0">
+      <widget class="QLabel" name="FlightTime28dLabel">
+       <property name="text">
+        <string>Flight Time (last 28 days)</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="FlightTime28dDisplayLabel">
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="FlightTimeCalYearLabel">
+       <property name="text">
+        <string>Flight Time (this calendar year)</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLabel" name="FlightTimeCalYearDisplayLabel">
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="FlightTime12mLabel">
+       <property name="text">
+        <string>Flight Time (last 12 calendar months)</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLabel" name="FlightTime12mDisplayLabel">
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="10" column="0">
+    <widget class="QLabel" name="limitationsLabel">
+     <property name="font">
+      <font>
+       <weight>75</weight>
+       <bold>true</bold>
+      </font>
+     </property>
+     <property name="text">
+      <string>Limitations</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignBottom|Qt::AlignHCenter</set>
      </property>
-    </spacer>
+    </widget>
+   </item>
+   <item row="9" column="0">
+    <layout class="QGridLayout" name="gridLayout_3">
+     <item row="0" column="0">
+      <widget class="QLabel" name="TakeOffLabel">
+       <property name="text">
+        <string>Take offs (last 90 days)</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLabel" name="TakeOffDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="LandingsLabel">
+       <property name="text">
+        <string>Landings (last 90 days)</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLabel" name="LandingsDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="currToLdgLabel">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Take-Off / Landing</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLabel" name="currToLdgDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QLabel" name="currLicLabel">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Licence</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QLabel" name="currLicDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="0">
+      <widget class="QLabel" name="currTrLabel">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Type Rating</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <widget class="QLabel" name="currTrDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="0">
+      <widget class="QLabel" name="currLckLabel">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Line Check</string>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="1">
+      <widget class="QLabel" name="currLckDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="0">
+      <widget class="QLabel" name="currMedLabel">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Medical</string>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="1">
+      <widget class="QLabel" name="currMedDisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="0">
+      <widget class="QLabel" name="currCustom1Label">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Custom1</string>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="1">
+      <widget class="QLabel" name="currCustom1DisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="8" column="0">
+      <widget class="QLabel" name="currCustom2Label">
+       <property name="font">
+        <font>
+         <italic>false</italic>
+        </font>
+       </property>
+       <property name="text">
+        <string>Custom2</string>
+       </property>
+      </widget>
+     </item>
+     <item row="8" column="1">
+      <widget class="QLabel" name="currCustom2DisplayLabel">
+       <property name="font">
+        <font>
+         <weight>75</weight>
+         <bold>true</bold>
+        </font>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="6" column="0">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="totalLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Total</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="totalLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="picusLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>PICus</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="3">
+      <widget class="QLineEdit" name="picusLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="spseLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>SP SE</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="spseLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="2">
+      <widget class="QLabel" name="ifrLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>IFR</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="3">
+      <widget class="QLineEdit" name="ifrLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="spmeLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>SP ME</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLineEdit" name="spmeLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <widget class="QLabel" name="nightLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Night</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="3">
+      <widget class="QLineEdit" name="nightLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QLabel" name="multipilotLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Multi Pilot</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QLineEdit" name="multipilotLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="2">
+      <widget class="QLabel" name="simLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>Simulator</string>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="3">
+      <widget class="QLineEdit" name="simLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="0">
+      <widget class="QLabel" name="piclabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>PIC</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <widget class="QLineEdit" name="picLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="2">
+      <widget class="QLabel" name="todayLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TO Day</string>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="3">
+      <widget class="QLineEdit" name="todayLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="0">
+      <widget class="QLabel" name="sicLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>SIC</string>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="1">
+      <widget class="QLineEdit" name="sicLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="2">
+      <widget class="QLabel" name="tonightLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TO Night</string>
+       </property>
+      </widget>
+     </item>
+     <item row="5" column="3">
+      <widget class="QLineEdit" name="tonightLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="0">
+      <widget class="QLabel" name="dualLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>DUAL</string>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="1">
+      <widget class="QLineEdit" name="dualLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="2">
+      <widget class="QLabel" name="ldgdayLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>LDG Day</string>
+       </property>
+      </widget>
+     </item>
+     <item row="6" column="3">
+      <widget class="QLineEdit" name="ldgdayLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="0">
+      <widget class="QLabel" name="fiLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>FI</string>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="2">
+      <widget class="QLabel" name="ldgnightLabel">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>LDG Night</string>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="3">
+      <widget class="QLineEdit" name="ldgnightLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+       <property name="text">
+        <string>0</string>
+       </property>
+      </widget>
+     </item>
+     <item row="7" column="1">
+      <widget class="QLineEdit" name="fiLineEdit">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::NoFocus</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="0">
+    <widget class="QLabel" name="logoLabel">
+     <property name="text">
+      <string/>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
    </item>
   </layout>
  </widget>

+ 22 - 76
src/gui/widgets/logbookwidget.cpp

@@ -23,6 +23,7 @@
 #include "src/classes/asettings.h"
 #include "src/gui/dialogues/newflightdialog.h"
 #include "src/testing/adebug.h"
+#include "src/functions/alog.h"
 
 const QMap<int, QString> FILTER_MAP = {
     {0, QStringLiteral("Date LIKE \"%")},
@@ -47,9 +48,13 @@ LogbookWidget::LogbookWidget(QWidget *parent) :
 
     //Initialise message Box
     messageBox = new QMessageBox(this);
+    // Initalise the display Model and view
+    displayModel = new QSqlTableModel(this);
+    view = ui->tableView;
 
-    prepareModelAndView(ASettings::read(ASettings::LogBook::View).toInt());
+    prepareModelAndView(ASettings::read(ASettings::Main::LogbookView).toInt());
     connectSignalsAndSlots();
+
 }
 
 LogbookWidget::~LogbookWidget()
@@ -65,44 +70,22 @@ void LogbookWidget::prepareModelAndView(int view_id)
 {
     switch (view_id) {
     case 0:
-        setupDefaultView();
+        LOG << "Loading Default View...\n";
+        displayModel->setTable(QStringLiteral("viewDefault"));
+        displayModel->select();
         break;
     case 1:
-        setupEasaView();
+        LOG << "Loading Default View...\n";
+        displayModel->setTable(QStringLiteral("viewEASA"));
+        displayModel->select();
         break;
     default:
-        setupDefaultView();
+        LOG << "Loading Default View...\n";
+        displayModel->setTable(QStringLiteral("viewDefault"));
+        displayModel->select();
     }
-}
-
-void LogbookWidget::connectSignalsAndSlots()
-{
-    selectionModel = view->selectionModel();
-    QObject::connect(view->selectionModel(), &QItemSelectionModel::selectionChanged,
-                     this, &LogbookWidget::flightsTableView_selectionChanged);
-}
 
-void LogbookWidget::setupDefaultView()
-{
-    DEB << "Loading Default View...";
-    displayModel = new QSqlTableModel(this);
-    displayModel->setTable(QStringLiteral("viewDefault"));
-    displayModel->select();
-
-    view = ui->tableView;
     view->setModel(displayModel);
-
-    view->setColumnWidth(1, 120);
-    view->setColumnWidth(2, 60);
-    view->setColumnWidth(3, 60);
-    view->setColumnWidth(4, 60);
-    view->setColumnWidth(5, 60);
-    view->setColumnWidth(6, 60);
-    view->setColumnWidth(7, 180);
-    view->setColumnWidth(8, 180);
-    view->setColumnWidth(9, 120);
-    view->setColumnWidth(10, 90);
-
     view->setSelectionBehavior(QAbstractItemView::SelectRows);
     view->setSelectionMode(QAbstractItemView::ExtendedSelection);
     view->setEditTriggers(QAbstractItemView::NoEditTriggers);
@@ -111,59 +94,21 @@ void LogbookWidget::setupDefaultView()
     view->verticalHeader()->hide();
     view->setAlternatingRowColors(true);
     view->hideColumn(0);
-
+    view->resizeColumnsToContents();
     view->show();
 }
 
-void LogbookWidget::setupEasaView()
+void LogbookWidget::connectSignalsAndSlots()
 {
-    DEB << "Loading EASA View...";
-    displayModel = new QSqlTableModel;
-    displayModel->setTable(QStringLiteral("viewEASA"));
-    displayModel->select();
-
-    view = ui->tableView;
-    view->setModel(displayModel);
-
-    view->setColumnWidth(1,120);
-    view->setColumnWidth(2,60);
-    view->setColumnWidth(3,60);
-    view->setColumnWidth(4,60);
-    view->setColumnWidth(5,60);
-    view->setColumnWidth(6,180);
-    view->setColumnWidth(7,120);
-    view->setColumnWidth(8,30);
-    view->setColumnWidth(9,30);
-    view->setColumnWidth(10,30);
-    view->setColumnWidth(11,30);
-    view->setColumnWidth(12,120);
-    view->setColumnWidth(13,15);
-    view->setColumnWidth(14,15);
-    view->setColumnWidth(15,60);
-    view->setColumnWidth(16,60);
-    view->setColumnWidth(17,60);
-    view->setColumnWidth(18,60);
-    view->setColumnWidth(19,60);
-    view->setColumnWidth(20,60);
-    view->setColumnWidth(21,120);
-
-    view->setSelectionBehavior(QAbstractItemView::SelectRows);
-    view->setSelectionMode(QAbstractItemView::ExtendedSelection);
-    view->setEditTriggers(QAbstractItemView::NoEditTriggers);
-    view->setContextMenuPolicy(Qt::CustomContextMenu);
-    view->horizontalHeader()->setStretchLastSection(QHeaderView::Stretch);
-    view->verticalHeader()->hide();
-    view->setAlternatingRowColors(true);
-    view->hideColumn(0);
-
-    view->show();
+    selectionModel = view->selectionModel();
+    QObject::connect(view->selectionModel(), &QItemSelectionModel::selectionChanged,
+                     this, &LogbookWidget::flightsTableView_selectionChanged);
 }
-
 /*
  * Slots
  */
 
-void LogbookWidget::flightsTableView_selectionChanged()//
+void LogbookWidget::flightsTableView_selectionChanged()
 {
     selectedFlights.clear();
     for (const auto& row : selectionModel->selectedRows()) {
@@ -302,6 +247,7 @@ void LogbookWidget::onDisplayModel_dataBaseUpdated()
 {
     //refresh view to reflect changes the user has made via a dialog.
     displayModel->select();
+    view->resizeColumnsToContents();
 }
 
 void LogbookWidget::onLogbookWidget_viewSelectionChanged(int view_id)

+ 0 - 2
src/gui/widgets/logbookwidget.h

@@ -72,8 +72,6 @@ private:
 
     void prepareModelAndView(int view_id);
     void connectSignalsAndSlots();
-    void setupDefaultView();
-    void setupEasaView();
 };
 
 #endif // LOGBOOKWIDGET_H

+ 2 - 2
src/gui/widgets/pilotswidget.cpp

@@ -37,7 +37,7 @@ PilotsWidget::~PilotsWidget()
 
 void PilotsWidget::setupModelAndView()
 {
-    sortColumn = ASettings::read(ASettings::UserData::PilSortColumn).toInt();
+    sortColumn = ASettings::read(ASettings::UserData::PilotSortColumn).toInt();
 
     model = new QSqlTableModel(this);
     model->setTable(QStringLiteral("viewPilots"));
@@ -114,7 +114,7 @@ void PilotsWidget::tableView_selectionChanged()//const QItemSelection &index, co
 void PilotsWidget::tableView_headerClicked(int column)
 {
     sortColumn = column;
-    ASettings::write(ASettings::UserData::PilSortColumn, column);
+    ASettings::write(ASettings::UserData::PilotSortColumn, column);
 }
 
 void PilotsWidget::on_newPilotButton_clicked()

+ 216 - 15
src/gui/widgets/settingswidget.cpp

@@ -104,30 +104,64 @@ void SettingsWidget::readSettings()
     ui->functionComboBox->setCurrentText(ASettings::read(ASettings::FlightLogging::Function).toString());
     ui->rulesComboBox->setCurrentText(ASettings::read(ASettings::FlightLogging::Rules).toString());
     ui->approachComboBox->setCurrentText(ASettings::read(ASettings::FlightLogging::Approach).toString());
-    ui->nightComboBox->setCurrentIndex(ASettings::read(ASettings::FlightLogging::NightLogging).toInt());
+    ui->nightComboBox->setCurrentIndex(ASettings::read(ASettings::FlightLogging::NightLoggingEnabled).toInt());
     ui->prefixLineEdit->setText(ASettings::read(ASettings::FlightLogging::FlightNumberPrefix).toString());
+    ui->logbookViewComboBox->setCurrentIndex(ASettings::read(ASettings::Main::LogbookView).toInt());
+
+    /*
+     * Currencies Tab
+     */
+    ui->currToLdgCheckBox->setChecked(ASettings::read(ASettings::UserData::ShowToLgdCurrency).toBool());
+
+    ui->currLicDateEdit->setDate(ASettings::read(ASettings::UserData::LicCurrencyDate).toDate());
+    ui->currLicCheckBox->setChecked(ASettings::read(ASettings::UserData::ShowLicCurrency).toBool());
+
+    ui->currTrDateEdit->setDate(ASettings::read(ASettings::UserData::TrCurrencyDate).toDate());
+    ui->currTrCheckBox->setChecked(ASettings::read(ASettings::UserData::ShowTrCurrency).toBool());
+
+    ui->currLckDateEdit->setDate(ASettings::read(ASettings::UserData::LckCurrencyDate).toDate());
+    ui->currLckCheckBox->setChecked(ASettings::read(ASettings::UserData::ShowLckCurrency).toBool());
+
+    ui->currMedDateEdit->setDate(ASettings::read(ASettings::UserData::MedCurrencyDate).toDate());
+    ui->currMedCheckBox->setChecked(ASettings::read(ASettings::UserData::ShowMedCurrency).toBool());
+
+    ui->currCustom1DateEdit->setDate(ASettings::read(ASettings::UserData::Custom1CurrencyDate).toDate());
+    ui->currCustom1CheckBox->setChecked(ASettings::read(ASettings::UserData::ShowCustom1Currency).toBool());
+
+    ui->currCustom2DateEdit->setDate(ASettings::read(ASettings::UserData::Custom2CurrencyDate).toDate());
+    ui->currCustom2CheckBox->setChecked(ASettings::read(ASettings::UserData::ShowCustom2Currency).toBool());
+
+    ui->currWarningCheckBox->setChecked(ASettings::read(ASettings::UserData::CurrWarningEnabled).toBool());
+    ui->currWarningThresholdSpinBox->setValue(ASettings::read(ASettings::UserData::CurrWarningThreshold).toInt());
+
 
-    ui->logbookViewComboBox->setCurrentIndex(ASettings::read(ASettings::LogBook::View).toInt());
     /*
      * Misc Tab
      */
-    ui->acSortComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::AcftSortColumn).toInt());
-    ui->pilotSortComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::PilSortColumn).toInt());
-    ui->acAllowIncompleteComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::AcAllowIncomplete).toInt());
-    ui->styleComboBox->setCurrentText(ASettings::read(ASettings::Main::Style).toString());
+    ui->acSortComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::TailSortColumn).toInt());
+    ui->pilotSortComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::PilotSortColumn).toInt());
+    ui->acAllowIncompleteComboBox->setCurrentIndex(ASettings::read(ASettings::UserData::AcftAllowIncomplete).toInt());
     {
+        // Block style widgets signals to not trigger style changes during UI setup
+        const QSignalBlocker style_blocker(ui->styleComboBox);
         const QSignalBlocker font_blocker1(ui->fontSpinBox);
         const QSignalBlocker font_blocker2(ui->fontComboBox);
         const QSignalBlocker font_blocker3(ui->fontCheckBox);
+        ui->styleComboBox->setCurrentText(ASettings::read(ASettings::Main::Style).toString());
         ui->fontSpinBox->setValue(ASettings::read(ASettings::Main::FontSize).toUInt());
         ui->fontComboBox->setCurrentFont(QFont(ASettings::read(ASettings::Main::Font).toString()));
-        ui->fontCheckBox->setChecked(ASettings::read(ASettings::Main::UseSystemFont).toBool());
+        bool use_system_font = ASettings::read(ASettings::Main::UseSystemFont).toBool();
+        ui->fontCheckBox->setChecked(use_system_font);
+        if (!use_system_font) {
+            ui->fontComboBox->setEnabled(true);
+            ui->fontSpinBox->setEnabled(true);
+        }
     }
 }
 
 void SettingsWidget::setupValidators()
 {
-    DEB << "Setting up Validators...";
+    // DEB << "Setting up Validators...";
     for(const auto& pair : LINE_EDIT_VALIDATORS){
         auto line_edit = parent()->findChild<QLineEdit*>(pair.first);
         if(line_edit != nullptr){
@@ -240,7 +274,7 @@ void SettingsWidget::on_approachComboBox_currentIndexChanged(const QString &arg1
 
 void SettingsWidget::on_nightComboBox_currentIndexChanged(int index)
 {
-    ASettings::write(ASettings::FlightLogging::NightLogging, index);
+    ASettings::write(ASettings::FlightLogging::NightLoggingEnabled, index);
     switch (index) {
     case 1:
         ASettings::write(ASettings::FlightLogging::NightAngle, -6);
@@ -265,22 +299,22 @@ void SettingsWidget::on_prefixLineEdit_textChanged(const QString &arg1)
 
 void SettingsWidget::on_logbookViewComboBox_currentIndexChanged(int index)
 {
-    ASettings::write(ASettings::LogBook::View, index);
+    ASettings::write(ASettings::Main::LogbookView, index);
     emit viewSelectionChanged(index);
 }
 void SettingsWidget::on_pilotSortComboBox_currentIndexChanged(int index)
 {
-    ASettings::write(ASettings::UserData::PilSortColumn, index);
+    ASettings::write(ASettings::UserData::PilotSortColumn, index);
 }
 
 void SettingsWidget::on_acSortComboBox_currentIndexChanged(int index)
 {
-    ASettings::write(ASettings::UserData::AcftSortColumn, index);
+    ASettings::write(ASettings::UserData::TailSortColumn, index);
 }
 
 void SettingsWidget::on_acAllowIncompleteComboBox_currentIndexChanged(int index)
 {
-    ASettings::write(ASettings::UserData::AcAllowIncomplete, index);
+    ASettings::write(ASettings::UserData::AcftAllowIncomplete, index);
     if (index) {
         QMessageBox::StandardButton reply;
         reply = QMessageBox::warning(this, tr("Warning"),
@@ -292,7 +326,7 @@ void SettingsWidget::on_acAllowIncompleteComboBox_currentIndexChanged(int index)
                                       "Are you sure you want to proceed?"),
                                       QMessageBox::Yes | QMessageBox::No);
         if (reply == QMessageBox::Yes) {
-            ASettings::write(ASettings::UserData::AcAllowIncomplete, index);
+            ASettings::write(ASettings::UserData::AcftAllowIncomplete, index);
         } else {
             ui->acAllowIncompleteComboBox->setCurrentIndex(0);
         }
@@ -307,12 +341,14 @@ void SettingsWidget::on_acAllowIncompleteComboBox_currentIndexChanged(int index)
 void SettingsWidget::on_aboutPushButton_clicked()
 {
     QMessageBox message_box(this);
+    QPixmap icon = QPixmap(Opl::Assets::ICON_ABOUT);
+    message_box.setIconPixmap(icon);
     QString SQLITE_VERSION = aDB->sqliteVersion();
     QString text = QMessageBox::tr(
 
                        "<h3><center>About openPilotLog</center></h3>"
                        "<br>"
-                       "(c) 2020-2021 Felix Turowsky"
+                       "&#169; 2020-2021 Felix Turowsky"
                        "<br>"
                        "<p>This is a collaboratively developed Free and Open Source Application. "
                        "Visit us <a href=\"https://%1/\">here</a> for more information.</p>"
@@ -349,6 +385,7 @@ void SettingsWidget::on_styleComboBox_currentTextChanged(const QString& new_styl
 {
     if (new_style_setting == QLatin1String("Dark-Palette")) {
         AStyle::setStyle(AStyle::darkPalette());
+        ASettings::write(ASettings::Main::Style, new_style_setting);
         return;
     }
     for (const auto &style_name : AStyle::styles) {
@@ -440,3 +477,167 @@ void SettingsWidget::on_resetStylePushButton_clicked()
     ui->styleComboBox->setCurrentText(AStyle::defaultStyle);
     ui->fontCheckBox->setChecked(true);
 }
+
+void SettingsWidget::on_currLicDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::LicCurrencyDate, date);
+}
+
+void SettingsWidget::on_currTrDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::TrCurrencyDate, date);
+}
+
+void SettingsWidget::on_currLckDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::LckCurrencyDate, date);
+}
+
+void SettingsWidget::on_currMedDateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::MedCurrencyDate, date);
+}
+
+void SettingsWidget::on_currCustom1DateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::Custom1CurrencyDate, date);
+}
+
+void SettingsWidget::on_currCustom2DateEdit_userDateChanged(const QDate &date)
+{
+    ASettings::write(ASettings::UserData::Custom2CurrencyDate, date);
+}
+
+void SettingsWidget::on_currToLdgCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowToLgdCurrency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowToLgdCurrency, false);
+        break;
+    default:
+        break;
+    }
+}
+
+void SettingsWidget::on_currLicCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowLicCurrency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowLicCurrency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::LicCurrencyDate, ui->currLicDateEdit->date());
+}
+
+void SettingsWidget::on_currTrCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowTrCurrency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowTrCurrency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::TrCurrencyDate, ui->currTrDateEdit->date());
+}
+
+void SettingsWidget::on_currLckCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowLckCurrency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowLckCurrency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::LckCurrencyDate, ui->currLckDateEdit->date());
+}
+
+void SettingsWidget::on_currMedCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowMedCurrency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowMedCurrency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::MedCurrencyDate, ui->currMedDateEdit->date());
+}
+
+void SettingsWidget::on_currCustom1CheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowCustom1Currency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowCustom1Currency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::Custom1CurrencyDate, ui->currCustom1DateEdit->date());
+}
+
+void SettingsWidget::on_currCustom2CheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::ShowCustom2Currency, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::ShowCustom2Currency, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::Custom2CurrencyDate, ui->currCustom2DateEdit->date());
+}
+
+void SettingsWidget::on_currWarningCheckBox_stateChanged(int arg1)
+{
+    switch (arg1) {
+    case Qt::CheckState::Checked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, true);
+        break;
+    case Qt::CheckState::Unchecked:
+        ASettings::write(ASettings::UserData::CurrWarningEnabled, false);
+        break;
+    default:
+        break;
+    }
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, arg1);
+}
+
+void SettingsWidget::on_currWarningThresholdSpinBox_valueChanged(int arg1)
+{
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, arg1);
+}
+
+void SettingsWidget::on_currCustom1LineEdit_editingFinished()
+{
+    ASettings::write(ASettings::UserData::Custom1CurrencyName, ui->currCustom1LineEdit->text());
+}
+
+void SettingsWidget::on_currCustom2LineEdit_editingFinished()
+{
+    ASettings::write(ASettings::UserData::Custom2CurrencyName, ui->currCustom2LineEdit->text());
+}

+ 35 - 0
src/gui/widgets/settingswidget.h

@@ -70,6 +70,40 @@ private slots:
 
     void on_resetStylePushButton_clicked();
 
+    void on_currLicDateEdit_userDateChanged(const QDate &date);
+
+    void on_currTrDateEdit_userDateChanged(const QDate &date);
+
+    void on_currLckDateEdit_userDateChanged(const QDate &date);
+
+    void on_currMedDateEdit_userDateChanged(const QDate &date);
+
+    void on_currCustom1DateEdit_userDateChanged(const QDate &date);
+
+    void on_currCustom2DateEdit_userDateChanged(const QDate &date);
+
+    void on_currToLdgCheckBox_stateChanged(int arg1);
+
+    void on_currLicCheckBox_stateChanged(int arg1);
+
+    void on_currTrCheckBox_stateChanged(int arg1);
+
+    void on_currLckCheckBox_stateChanged(int arg1);
+
+    void on_currMedCheckBox_stateChanged(int arg1);
+
+    void on_currCustom1CheckBox_stateChanged(int arg1);
+
+    void on_currCustom2CheckBox_stateChanged(int arg1);
+
+    void on_currWarningCheckBox_stateChanged(int arg1);
+
+    void on_currWarningThresholdSpinBox_valueChanged(int arg1);
+
+    void on_currCustom1LineEdit_editingFinished();
+
+    void on_currCustom2LineEdit_editingFinished();
+
 private:
     Ui::SettingsWidget *ui;
 
@@ -82,6 +116,7 @@ private:
     void updatePersonalDetails();
 
     bool usingStylesheet();
+
 signals:
     void viewSelectionChanged(int view_id);
 };

+ 530 - 5
src/gui/widgets/settingswidget.ui

@@ -6,15 +6,15 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>731</width>
-    <height>411</height>
+    <width>1114</width>
+    <height>661</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="1">
+   <item row="0" column="0">
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
       <number>2</number>
@@ -357,9 +357,534 @@
        </item>
       </layout>
      </widget>
-     <widget class="QWidget" name="miscTab">
+     <widget class="QWidget" name="currenciesTab">
       <attribute name="title">
-       <string>Misc</string>
+       <string>Currencies</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_7">
+       <item row="0" column="2">
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>35</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="headerCurrencyLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Currency</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="3">
+        <widget class="QLabel" name="headerExpirationLabel">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Expiration Date</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="4">
+        <widget class="QLabel" name="headerShowLabel">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Show on Home Page</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="5">
+        <widget class="Line" name="line">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" rowspan="2">
+        <widget class="QLabel" name="currToLdgLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Take-off / Landing (automatic)</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="3" rowspan="2">
+        <widget class="QDateEdit" name="currToLdgDateEdit">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="4">
+        <widget class="QCheckBox" name="currToLdgCheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QLabel" name="currLicLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Licence</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="3">
+        <widget class="QDateEdit" name="currLicDateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="4">
+        <widget class="QCheckBox" name="currLicCheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QLabel" name="currTrLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Type Rating</string>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="3">
+        <widget class="QDateEdit" name="currTrDateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="7" column="4">
+        <widget class="QCheckBox" name="currTrCheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="0">
+        <widget class="QLabel" name="currLckLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Line Check</string>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="3">
+        <widget class="QDateEdit" name="currLckDateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="4">
+        <widget class="QCheckBox" name="currLckCheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="9" column="0">
+        <widget class="QLabel" name="currMedLabel">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>Medical</string>
+         </property>
+        </widget>
+       </item>
+       <item row="9" column="3">
+        <widget class="QDateEdit" name="currMedDateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="9" column="4">
+        <widget class="QCheckBox" name="currMedCheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="10" column="0">
+        <widget class="QLineEdit" name="currCustom1LineEdit">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+         <property name="placeholderText">
+          <string>custom currency</string>
+         </property>
+        </widget>
+       </item>
+       <item row="10" column="3">
+        <widget class="QDateEdit" name="currCustom1DateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="10" column="4">
+        <widget class="QCheckBox" name="currCustom1CheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="11" column="0">
+        <widget class="QLineEdit" name="currCustom2LineEdit">
+         <property name="minimumSize">
+          <size>
+           <width>280</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="placeholderText">
+          <string>custom currency</string>
+         </property>
+        </widget>
+       </item>
+       <item row="11" column="3">
+        <widget class="QDateEdit" name="currCustom2DateEdit">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="currentSection">
+          <enum>QDateTimeEdit::MonthSection</enum>
+         </property>
+         <property name="displayFormat">
+          <string>MM/dd/yyyy</string>
+         </property>
+         <property name="calendarPopup">
+          <bool>true</bool>
+         </property>
+         <property name="timeSpec">
+          <enum>Qt::UTC</enum>
+         </property>
+         <property name="date">
+          <date>
+           <year>2020</year>
+           <month>1</month>
+           <day>1</day>
+          </date>
+         </property>
+        </widget>
+       </item>
+       <item row="11" column="4">
+        <widget class="QCheckBox" name="currCustom2CheckBox">
+         <property name="minimumSize">
+          <size>
+           <width>140</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::LeftToRight</enum>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="12" column="0" colspan="5">
+        <widget class="Line" name="line_2">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="13" column="1">
+        <layout class="QGridLayout" name="gridLayout_6">
+         <item row="0" column="0">
+          <widget class="QCheckBox" name="currWarningCheckBox">
+           <property name="text">
+            <string>Warn me about expiring currencies</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QSpinBox" name="currWarningThresholdSpinBox"/>
+         </item>
+         <item row="0" column="2">
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>days before expiry</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="14" column="1">
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>35</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="appearanceTab">
+      <attribute name="title">
+       <string>Appearance</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_5">
        <item row="0" column="0">

+ 0 - 54
src/gui/widgets/totalswidget.cpp

@@ -1,54 +0,0 @@
-/*
- *openPilotLog - A FOSS Pilot Logbook Application
- *Copyright (C) 2020-2021 Felix Turowsky
- *
- *This program is free software: you can redistribute it and/or modify
- *it under the terms of the GNU General Public License as published by
- *the Free Software Foundation, either version 3 of the License, or
- *(at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- *but WITHOUT ANY WARRANTY; without even the implied warranty of
- *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *GNU General Public License for more details.
- *
- *You should have received a copy of the GNU General Public License
- *along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
-#include "totalswidget.h"
-#include "ui_totalswidget.h"
-#include "src/testing/adebug.h"
-#include "src/database/adatabase.h"
-
-TotalsWidget::TotalsWidget(QWidget *parent) :
-    QWidget(parent),
-    ui(new Ui::TotalsWidget)
-{
-    ui->setupUi(this);
-    auto data = AStat::totals();
-    DEB << "Filling Totals Line Edits...";
-    for (const auto &field : data) {
-        auto line_edit = parent->findChild<QLineEdit *>(field.first + "LineEdit");
-        line_edit->setText(field.second);
-    }
-
-    QString salutation = tr("Welcome to openPilotLog");
-    salutation.append(QStringLiteral(", ") + userName() + QLatin1Char('!'));
-
-    ui->welcomeLabel->setText(salutation);
-}
-
-TotalsWidget::~TotalsWidget()
-{
-    delete ui;
-}
-
-const QString TotalsWidget::userName()
-{
-    auto namestring = aDB->getPilotEntry(1).name();
-    auto names = namestring.split(',');
-    if (!names.isEmpty())
-        return names[0];
-
-    return QString();
-}

+ 0 - 481
src/gui/widgets/totalswidget.ui

@@ -1,481 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>TotalsWidget</class>
- <widget class="QWidget" name="TotalsWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>634</width>
-    <height>382</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <item row="0" column="0">
-    <widget class="QLabel" name="welcomeLabel">
-     <property name="text">
-      <string>Welcome to openPilotLog!</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="0">
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="totalLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Total</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="totalLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLabel" name="picusLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>PICus</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3">
-      <widget class="QLineEdit" name="picusLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="spseLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>SP SE</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="QLineEdit" name="spseLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="2">
-      <widget class="QLabel" name="ifrLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>IFR</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="3">
-      <widget class="QLineEdit" name="ifrLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <widget class="QLabel" name="spmeLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>SP ME</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <widget class="QLineEdit" name="spmeLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="2">
-      <widget class="QLabel" name="nightLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Night</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="3">
-      <widget class="QLineEdit" name="nightLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="0">
-      <widget class="QLabel" name="multipilotLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Multi Pilot</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1">
-      <widget class="QLineEdit" name="multipilotLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="2">
-      <widget class="QLabel" name="simLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Simulator</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="3">
-      <widget class="QLineEdit" name="simLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="0">
-      <widget class="QLabel" name="piclabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>PIC</string>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="1">
-      <widget class="QLineEdit" name="picLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="2">
-      <widget class="QLabel" name="todayLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>TO Day</string>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="3">
-      <widget class="QLineEdit" name="todayLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="5" column="0">
-      <widget class="QLabel" name="sicLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>SIC</string>
-       </property>
-      </widget>
-     </item>
-     <item row="5" column="1">
-      <widget class="QLineEdit" name="sicLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="5" column="2">
-      <widget class="QLabel" name="tonightLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>TO Night</string>
-       </property>
-      </widget>
-     </item>
-     <item row="5" column="3">
-      <widget class="QLineEdit" name="tonightLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="0">
-      <widget class="QLabel" name="dualLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>DUAL</string>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="1">
-      <widget class="QLineEdit" name="dualLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="2">
-      <widget class="QLabel" name="ldgdayLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>LDG Day</string>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="3">
-      <widget class="QLineEdit" name="ldgdayLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="0">
-      <widget class="QLabel" name="fiLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>FI</string>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="2">
-      <widget class="QLabel" name="ldgnightLabel">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>LDG Night</string>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="3">
-      <widget class="QLineEdit" name="ldgnightLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="1">
-      <widget class="QLineEdit" name="fiLineEdit">
-       <property name="maximumSize">
-        <size>
-         <width>120</width>
-         <height>16777215</height>
-        </size>
-       </property>
-       <property name="focusPolicy">
-        <enum>Qt::NoFocus</enum>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="2" column="0">
-    <widget class="QLabel" name="totalsLabel">
-     <property name="font">
-      <font>
-       <weight>75</weight>
-       <bold>true</bold>
-      </font>
-     </property>
-     <property name="text">
-      <string>Your Totals</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignCenter</set>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="0">
-    <widget class="Line" name="line">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
-    <widget class="Line" name="line_2">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 11 - 0
src/oplconstants.h

@@ -170,6 +170,17 @@ static const auto DEFAULT_AIRCRAFT_POSITION = DataPosition(TABLE_AIRCRAFT, 0);
 
 } // namespace opl::db
 
+namespace Assets {
+
+static const auto LOGO = QLatin1String(":/icons/opl-icons/opl_logo.svg");
+static const auto ICON_APPICON = QLatin1String(":/icons/opl-icons/icon_main.svg");
+static const auto ICON_ABOUT = QLatin1String(":/icons/opl-icons/icon_about.png");
+static const auto ICON_PILOT = QLatin1String(":/icons/opl-icons/pilot.png");
+static const auto ICON_NEW_FLIGHT = QLatin1String(":/icons/opl-icons/new_flight.png");
+static const auto ICON_AIRCRAFT = QLatin1String(":/icons/opl-icons/aircraft.png");
+
+}
+
 } // namespace opl
 
 #endif // OPLCONSTANTS_H

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff