Browse Source

New Pilots Icon and monitoring of currencies improved

- Currencies are now colour-coded depending on their expiration dates. 
- Warnings can be enabled and the warning threshold can be set in the settingswidget
- New Icon for PilotsWidget
Felix Turo 4 years ago
parent
commit
8530b568dd

+ 1 - 0
assets/icons.qrc

@@ -12,5 +12,6 @@
         <file>ionicon-icons/settings-outline.png</file>
         <file>ionicon-icons/power.png</file>
         <file>ionicon-icons/power-outline.png</file>
+        <file>ionicon-icons/pilot.png</file>
     </qresource>
 </RCC>

BIN
assets/ionicon-icons/pilot.png


+ 1 - 1
mainwindow.cpp

@@ -32,7 +32,7 @@ MainWindow::MainWindow(QWidget *parent)
     ui->actionNewFlight->setIcon(QIcon(":/icons/ionicon-icons/airplane-outline.png"));
     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->actionPilots->setIcon(QIcon(":/icons/ionicon-icons/pilot.png"));
     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);

+ 2 - 0
src/classes/asettings.cpp

@@ -34,6 +34,8 @@ QMap<ASettings::UserData, QString> ASettings::userDataMap = {
     {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")},

+ 2 - 0
src/classes/asettings.h

@@ -41,6 +41,8 @@ public:
         PilotSortColumn,
         AcftAllowIncomplete,
         FtlWarningThreshold,
+        CurrWarningEnabled,
+        CurrWarningThreshold,
         ShowToLgdCurrency,
         ShowLicCurrency,
         ShowTrCurrency,

+ 2 - 0
src/gui/dialogues/firstrundialog.cpp

@@ -134,6 +134,8 @@ void FirstRunDialog::writeSettings()
     ASettings::write(ASettings::UserData::ShowToLgdCurrency, true);
     // To Do: UI option
     ASettings::write(ASettings::UserData::FtlWarningThreshold, 0.8);
+    ASettings::write(ASettings::UserData::CurrWarningEnabled, true);
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, 30);
 }
 
 bool FirstRunDialog::setupDatabase()

+ 42 - 34
src/gui/widgets/homewidget.cpp

@@ -35,6 +35,9 @@ HomeWidget::HomeWidget(QWidget *parent) :
     ui(new Ui::HomeWidget)
 {
     ui->setupUi(this);
+    today = QDate::currentDate();
+    currWarningThreshold = ASettings::read(ASettings::UserData::CurrWarningThreshold).toInt();
+    ftlWarningThreshold = ASettings::read(ASettings::UserData::FtlWarningThreshold).toDouble();
     ui->welcomeLabel->setText(tr("Welcome to openPilotLog, %1!").arg(userName()));
 
 
@@ -44,10 +47,9 @@ HomeWidget::HomeWidget(QWidget *parent) :
         ui->FlightTime12mDisplayLabel
     };
 
-    warningThreshold = ASettings::read(ASettings::UserData::FtlWarningThreshold).toDouble();
     DEB << "Filling Home Widget...";
     fillTotals();
-    fillCurrency();
+    fillCurrencies();
     fillLimitations();
 }
 
@@ -75,38 +77,44 @@ void HomeWidget::fillTotals()
     }
 }
 
-void HomeWidget::fillCurrency()
+void HomeWidget::fillCurrency(ASettings::UserData date, QLabel* display_label)
+{
+    auto currency_date = ASettings::read(date).toDate();
+    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() ?
-        ui->currLicDisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::LicCurrencyDate
-                                    ).toDate().toString(Qt::TextDate))
+                fillCurrency(ASettings::UserData::ShowLicCurrency, ui->currLicDisplayLabel)
               : hideLabels(ui->currLicLabel, ui->currLicDisplayLabel);
+
     ASettings::read(ASettings::UserData::ShowTrCurrency).toBool() ?
-                ui->currTrDisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::TrCurrencyDate
-                                    ).toDate().toString(Qt::TextDate))
+                fillCurrency(ASettings::UserData::TrCurrencyDate, ui->currTrDisplayLabel)
               : hideLabels(ui->currTrLabel, ui->currTrDisplayLabel);
+
     ASettings::read(ASettings::UserData::ShowLckCurrency).toBool() ?
-                ui->currLckDisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::LckCurrencyDate
-                                    ).toDate().toString())
+                fillCurrency(ASettings::UserData::LckCurrencyDate, ui->currLckDisplayLabel)
               : hideLabels(ui->currLckLabel, ui->currLckDisplayLabel);
+
     ASettings::read(ASettings::UserData::ShowMedCurrency).toBool() ?
-                ui->currMedDisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::MedCurrencyDate
-                                    ).toDate().toString())
+                fillCurrency(ASettings::UserData::MedCurrencyDate, ui->currMedDisplayLabel)
               : hideLabels(ui->currMedLabel, ui->currMedDisplayLabel);
+
     ASettings::read(ASettings::UserData::ShowCustom1Currency).toBool() ?
-                ui->currCustom1DisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::Custom1CurrencyDate
-                    ).toDate().toString())
+                fillCurrency(ASettings::UserData::Custom1CurrencyDate, ui->currCustom1DisplayLabel)
               : hideLabels(ui->currCustom1Label, ui->currCustom1DisplayLabel);
+
     ASettings::read(ASettings::UserData::ShowCustom2Currency).toBool() ?
-                ui->currCustom2DisplayLabel->setText(
-                    ASettings::read(ASettings::UserData::Custom2CurrencyDate
-                    ).toDate().toString())
+                fillCurrency(ASettings::UserData::Custom2CurrencyDate, ui->currCustom2DisplayLabel)
               : hideLabels(ui->currCustom2Label, ui->currCustom2DisplayLabel);
 }
 
@@ -116,15 +124,15 @@ void HomeWidget::fillCurrencyTakeOffLanding()
 
     ui->TakeOffDisplayLabel->setText(takeoff_landings[0].toString());
     if (takeoff_landings[0].toUInt() < 3)
-        setLabelColour(ui->TakeOffDisplayLabel, HomeWidget::Red);
+        setLabelColour(ui->TakeOffDisplayLabel, Colour::Red);
     ui->LandingsDisplayLabel->setText(takeoff_landings[1].toString());
     if (takeoff_landings[1].toUInt() < 3)
-        setLabelColour(ui->LandingsDisplayLabel, HomeWidget::Red);
+        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, HomeWidget::Red);
+        if (expiration_date <= QDate::currentDate())
+            setLabelColour(ui->currToLdgDisplayLabel, Colour::Red);
         ui->currToLdgDisplayLabel->setText(expiration_date.toString(Qt::TextDate));
     } else {
         ui->currToLdgLabel->hide();
@@ -137,25 +145,25 @@ void HomeWidget::fillLimitations()
     int minutes = AStat::totalTime(AStat::TimeFrame::Rolling28Days);
     ui->FlightTime28dDisplayLabel->setText(ATime::toString(minutes));
     if (minutes >= ROLLING_28_DAYS) {
-        setLabelColour(ui->FlightTime28dDisplayLabel, HomeWidget::Red);
-    } else if (minutes >= ROLLING_28_DAYS * warningThreshold) {
-        setLabelColour(ui->FlightTime28dDisplayLabel, HomeWidget::Orange);
+        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, HomeWidget::Red);
-    } else if (minutes >= ROLLING_12_MONTHS * warningThreshold) {
-        setLabelColour(ui->FlightTime12mDisplayLabel, HomeWidget::Orange);
+        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, HomeWidget::Red);
-    } else if (minutes >= CALENDAR_YEAR * warningThreshold) {
-        setLabelColour(ui->FlightTimeCalYearDisplayLabel, HomeWidget::Orange);
+        setLabelColour(ui->FlightTimeCalYearDisplayLabel, Colour::Red);
+    } else if (minutes >= CALENDAR_YEAR * ftlWarningThreshold) {
+        setLabelColour(ui->FlightTimeCalYearDisplayLabel, Colour::Orange);
     }
 }
 

+ 11 - 6
src/gui/widgets/homewidget.h

@@ -25,6 +25,7 @@
 #include <QSettings>
 #include "src/functions/astat.h"
 #include "src/database/adatabase.h"
+#include "src/classes/asettings.h"
 
 namespace Ui {
 class HomeWidget;
@@ -41,29 +42,32 @@ public:
 private:
     Ui::HomeWidget *ui;
 
+    QDate today;
+    int currWarningThreshold;
+    double ftlWarningThreshold;
+
     void fillTotals();
-    void fillCurrency();
+    void fillCurrencies();
     void fillCurrencyTakeOffLanding();
     void fillLimitations();
 
-    double warningThreshold;
+
 
     QList<QLabel*> limitationDisplayLabels;
-    QList<QPair<QLabel*, QLabel*>> currencyLabels;
     /*!
      * \brief Retreives the users first name from the database.
      */
     const QString userName();
 
-    enum Colour {Red, Orange};
+    enum class Colour {Red, Orange};
 
     inline void setLabelColour(QLabel* label, Colour colour)
     {
         switch (colour) {
-        case HomeWidget::Red:
+        case Colour::Red:
             label->setStyleSheet(QStringLiteral("color: red"));
             break;
-        case HomeWidget::Orange:
+        case Colour::Orange:
             label->setStyleSheet(QStringLiteral("color: orange"));
             break;
         default:
@@ -76,6 +80,7 @@ private:
         label1->hide();
         label2->hide();
     }
+    void fillCurrency(ASettings::UserData date, QLabel *display_label);
 public slots:
     void onHomeWidget_dataBaseUpdated();
 };

+ 23 - 0
src/gui/widgets/settingswidget.cpp

@@ -131,6 +131,9 @@ void SettingsWidget::readSettings()
     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());
+
 
     /*
      * Misc Tab
@@ -598,3 +601,23 @@ void SettingsWidget::on_currCustom2CheckBox_stateChanged(int arg1)
     }
     ASettings::write(ASettings::UserData::Custom2CurrencyDate, ui->currCustom2DateEdit->date());
 }
+
+void SettingsWidget::on_checkBox_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_spinBox_valueChanged(int arg1)
+{
+    ASettings::write(ASettings::UserData::CurrWarningThreshold, arg1);
+}

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

@@ -96,6 +96,10 @@ private slots:
 
     void on_currCustom2CheckBox_stateChanged(int arg1);
 
+    void on_checkBox_stateChanged(int arg1);
+
+    void on_spinBox_valueChanged(int arg1);
+
 private:
     Ui::SettingsWidget *ui;
 

+ 58 - 30
src/gui/widgets/settingswidget.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>731</width>
-    <height>411</height>
+    <width>1114</width>
+    <height>661</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -361,8 +361,8 @@
       <attribute name="title">
        <string>Currencies</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout_6">
-       <item row="0" column="1">
+      <layout class="QGridLayout" name="gridLayout_7">
+       <item row="0" column="2">
         <spacer name="verticalSpacer_2">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
@@ -391,7 +391,7 @@
          </property>
         </widget>
        </item>
-       <item row="1" column="2">
+       <item row="1" column="3">
         <widget class="QLabel" name="headerExpirationLabel">
          <property name="minimumSize">
           <size>
@@ -407,7 +407,7 @@
          </property>
         </widget>
        </item>
-       <item row="1" column="3">
+       <item row="1" column="4">
         <widget class="QLabel" name="headerShowLabel">
          <property name="minimumSize">
           <size>
@@ -423,14 +423,14 @@
          </property>
         </widget>
        </item>
-       <item row="2" column="0" colspan="4">
+       <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="3">
+       <item row="3" column="0" rowspan="2">
         <widget class="QLabel" name="currToLdgLabel">
          <property name="minimumSize">
           <size>
@@ -443,7 +443,7 @@
          </property>
         </widget>
        </item>
-       <item row="4" column="2" rowspan="2">
+       <item row="4" column="3" rowspan="2">
         <widget class="QDateEdit" name="currToLdgDateEdit">
          <property name="enabled">
           <bool>false</bool>
@@ -455,7 +455,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -472,7 +472,7 @@
          </property>
         </widget>
        </item>
-       <item row="5" column="3">
+       <item row="5" column="4">
         <widget class="QCheckBox" name="currToLdgCheckBox">
          <property name="minimumSize">
           <size>
@@ -501,7 +501,7 @@
          </property>
         </widget>
        </item>
-       <item row="6" column="2">
+       <item row="6" column="3">
         <widget class="QDateEdit" name="currLicDateEdit">
          <property name="minimumSize">
           <size>
@@ -510,7 +510,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -530,7 +530,7 @@
          </property>
         </widget>
        </item>
-       <item row="6" column="3">
+       <item row="6" column="4">
         <widget class="QCheckBox" name="currLicCheckBox">
          <property name="minimumSize">
           <size>
@@ -559,7 +559,7 @@
          </property>
         </widget>
        </item>
-       <item row="7" column="2">
+       <item row="7" column="3">
         <widget class="QDateEdit" name="currTrDateEdit">
          <property name="minimumSize">
           <size>
@@ -568,7 +568,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -588,7 +588,7 @@
          </property>
         </widget>
        </item>
-       <item row="7" column="3">
+       <item row="7" column="4">
         <widget class="QCheckBox" name="currTrCheckBox">
          <property name="minimumSize">
           <size>
@@ -617,7 +617,7 @@
          </property>
         </widget>
        </item>
-       <item row="8" column="2">
+       <item row="8" column="3">
         <widget class="QDateEdit" name="currLckDateEdit">
          <property name="minimumSize">
           <size>
@@ -626,7 +626,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -646,7 +646,7 @@
          </property>
         </widget>
        </item>
-       <item row="8" column="3">
+       <item row="8" column="4">
         <widget class="QCheckBox" name="currLckCheckBox">
          <property name="minimumSize">
           <size>
@@ -675,7 +675,7 @@
          </property>
         </widget>
        </item>
-       <item row="9" column="2">
+       <item row="9" column="3">
         <widget class="QDateEdit" name="currMedDateEdit">
          <property name="minimumSize">
           <size>
@@ -684,7 +684,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -704,7 +704,7 @@
          </property>
         </widget>
        </item>
-       <item row="9" column="3">
+       <item row="9" column="4">
         <widget class="QCheckBox" name="currMedCheckBox">
          <property name="minimumSize">
           <size>
@@ -736,7 +736,7 @@
          </property>
         </widget>
        </item>
-       <item row="10" column="2">
+       <item row="10" column="3">
         <widget class="QDateEdit" name="currCustom1DateEdit">
          <property name="minimumSize">
           <size>
@@ -745,7 +745,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -765,7 +765,7 @@
          </property>
         </widget>
        </item>
-       <item row="10" column="3">
+       <item row="10" column="4">
         <widget class="QCheckBox" name="currCustom1CheckBox">
          <property name="minimumSize">
           <size>
@@ -794,7 +794,7 @@
          </property>
         </widget>
        </item>
-       <item row="11" column="2">
+       <item row="11" column="3">
         <widget class="QDateEdit" name="currCustom2DateEdit">
          <property name="minimumSize">
           <size>
@@ -803,7 +803,7 @@
           </size>
          </property>
          <property name="currentSection">
-          <enum>QDateTimeEdit::YearSection</enum>
+          <enum>QDateTimeEdit::MonthSection</enum>
          </property>
          <property name="displayFormat">
           <string>MM/dd/yyyy</string>
@@ -823,7 +823,7 @@
          </property>
         </widget>
        </item>
-       <item row="11" column="3">
+       <item row="11" column="4">
         <widget class="QCheckBox" name="currCustom2CheckBox">
          <property name="minimumSize">
           <size>
@@ -839,7 +839,35 @@
          </property>
         </widget>
        </item>
-       <item row="12" column="1">
+       <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>