Browse Source

Added NewSimulator Action to MainWindow

- action to add new Simulator Entry added to MainWindow and Toolbar
- Toolbar icons adjusted according to application style (dark/light)
Felix 3 years ago
parent
commit
0e35fecf14
7 changed files with 113 additions and 28 deletions
  1. 57 19
      mainwindow.cpp
  2. 17 4
      mainwindow.h
  3. 12 1
      mainwindow.ui
  4. 17 2
      src/classes/astyle.cpp
  5. 5 0
      src/classes/astyle.h
  6. 3 0
      src/gui/widgets/settingswidget.cpp
  7. 2 2
      src/gui/widgets/settingswidget.h

+ 57 - 19
mainwindow.cpp

@@ -39,6 +39,9 @@ MainWindow::MainWindow(QWidget *parent)
     , ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
+    setupToolbar();
+    setActionIcons(AStyle::getStyleType());
+
     // connect to the Database
     QFileInfo database_file(AStandardPaths::directory(AStandardPaths::Database).
                                          absoluteFilePath(QStringLiteral("logbook.db")));
@@ -84,42 +87,68 @@ MainWindow::MainWindow(QWidget *parent)
     // Startup Screen (Home Screen)
     ui->stackedWidget->setCurrentWidget(homeWidget);
 
+    // check database version (Debug)
+    if (aDB->dbRevision() < aDB->getMinimumDatabaseRevision()) {
+        QString message = tr("Your database is out of date."
+                             "Minimum required revision: %1<br>"
+                             "You have revision: %2<br>")
+                             .arg(aDB->getMinimumDatabaseRevision(), aDB->dbRevision());
+        WARN(message);
+    }
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::setupToolbar()
+{
     // Create and set up the toolbar
     auto *toolBar = new QToolBar(this);
 
-    ui->actionHome->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_HOME));
     toolBar->addAction(ui->actionHome);
-    ui->actionNewFlight->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_NEW_FLIGHT));
     toolBar->addAction(ui->actionNewFlight);
-    ui->actionLogbook->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_LOGBOOK));
+    toolBar->addAction(ui->actionNewSim);
     toolBar->addAction(ui->actionLogbook);
-    ui->actionAircraft->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_AIRCRAFT));
     toolBar->addAction(ui->actionAircraft);
-    ui->actionPilots->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_PILOT));
     toolBar->addAction(ui->actionPilots);
-    ui->actionBackup->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_BACKUP));
     toolBar->addAction(ui->actionBackup);
-    ui->actionSettings->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_SETTINGS));
     toolBar->addAction(ui->actionSettings);
-    ui->actionQuit->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_QUIT));
     toolBar->addAction(ui->actionQuit);
     toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
     toolBar->setMovable(false);
     addToolBar(Qt::ToolBarArea::LeftToolBarArea, toolBar);
-
-    // check database version (Debug)
-    if (aDB->dbRevision() < aDB->getMinimumDatabaseRevision()) {
-        QString message = tr("Your database is out of date."
-                             "Minimum required revision: %1<br>"
-                             "You have revision: %2<br>")
-                             .arg(aDB->getMinimumDatabaseRevision(), aDB->dbRevision());
-        WARN(message);
-    }
 }
 
-MainWindow::~MainWindow()
+void MainWindow::setActionIcons(StyleType style)
 {
-    delete ui;
+    switch (style){
+    case StyleType::Light:
+        LOG << "Setting Light Icon theme";
+        ui->actionHome->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_HOME));
+        ui->actionNewFlight->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_NEW_FLIGHT));
+        ui->actionNewSim->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_SETTINGS));
+        ui->actionLogbook->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_LOGBOOK));
+        ui->actionAircraft->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_AIRCRAFT));
+        ui->actionPilots->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_PILOT));
+        ui->actionBackup->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_BACKUP));
+        ui->actionSettings->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_SETTINGS));
+        ui->actionQuit->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_QUIT));
+        break;
+    case StyleType::Dark:
+        LOG << "Setting Dark Icon theme";
+        ui->actionHome->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_HOME_DARK));
+        ui->actionNewFlight->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_NEW_FLIGHT_DARK));
+        ui->actionNewSim->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_SETTINGS_DARK));
+        ui->actionLogbook->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_LOGBOOK_DARK));
+        ui->actionAircraft->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_AIRCRAFT_DARK));
+        ui->actionPilots->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_PILOT_DARK));
+        ui->actionBackup->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_BACKUP_DARK));
+        ui->actionSettings->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_SETTINGS_DARK));
+        ui->actionQuit->setIcon(QIcon(OPL::Assets::ICON_TOOLBAR_QUIT_DARK));
+        break;
+    }
 }
 
 void MainWindow::nope()
@@ -155,6 +184,8 @@ void MainWindow::connectWidgets()
                      pilotsWidget,   &PilotsWidget::onPilotsWidget_databaseUpdated);
     QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
                      pilotsWidget,   &PilotsWidget::onPilotsWidget_settingChanged);
+    QObject::connect(settingsWidget, &SettingsWidget::settingChanged,
+                     this,           &MainWindow::onStyleChanged);
 
     QObject::connect(aDB,             &ADatabase::connectionReset,
                      logbookWidget,   &LogbookWidget::repopulateModel);
@@ -255,3 +286,10 @@ void MainWindow::on_actionDebug_triggered()
 {
     ui->stackedWidget->setCurrentWidget(debugWidget);
 }
+
+void MainWindow::on_actionNewSim_triggered()
+{
+    auto nsd = NewSimDialog(this);
+    nsd.exec();
+}
+

+ 17 - 4
mainwindow.h

@@ -42,8 +42,9 @@
 #include "src/classes/arunguard.h"
 #include "src/classes/acompletiondata.h"
 #include "src/testing/atimer.h"
+#include "src/classes/astyle.h"
 
-
+enum Style {Light, Dark};
 QT_BEGIN_NAMESPACE
 namespace Ui {
 class MainWindow;
@@ -92,6 +93,12 @@ public:
     MainWindow(QWidget *parent = nullptr);
     ~MainWindow();
 
+public slots:
+    void onStyleChanged(SettingsWidget::SettingSignal signal){
+        if (signal == SettingsWidget::MainWindow)
+            setActionIcons(AStyle::getStyleType());
+    }
+
 private slots:
 
     void on_actionHome_triggered();
@@ -112,6 +119,8 @@ private slots:
 
     void on_actionDebug_triggered();
 
+    void on_actionNewSim_triggered();
+
 private:
     Ui::MainWindow *ui;
 
@@ -132,6 +141,9 @@ private:
     // Completion Data for QCompleters and Mapping
     ACompletionData completionData;
 
+    void setupToolbar();
+    void setActionIcons(StyleType style = StyleType::Light);
+
     void nope();
 
     void connectWidgets();
@@ -163,11 +175,12 @@ protected:
      */
     void resizeEvent(QResizeEvent *event) override
     {
+        LOG << "SIZE:" << this->size();
         int icon_size;
-        if (this->height() < 780)
-            icon_size = (this->height() / 13);
+        if (this->height() < 760)
+            icon_size = (this->height() / 16);
         else
-            icon_size = (this->height() / 12);
+            icon_size = (this->height() / 14);
 
         auto tool_bar = this->findChild<QToolBar*>();
         tool_bar->setIconSize(QSize(icon_size, icon_size));

+ 12 - 1
mainwindow.ui

@@ -48,7 +48,7 @@
   <widget class="QStatusBar" name="statusbar"/>
   <action name="actionNewFlight">
    <property name="text">
-    <string>NewFlight</string>
+    <string>New Flight</string>
    </property>
    <property name="toolTip">
     <string>Add a new flight to the logbook</string>
@@ -152,6 +152,17 @@
     <string>Ctrl+B</string>
    </property>
   </action>
+  <action name="actionNewSim">
+   <property name="text">
+    <string>New Sim</string>
+   </property>
+   <property name="toolTip">
+    <string>Add a new simulator sesion to the logbook</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+S</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections/>

+ 17 - 2
src/classes/astyle.cpp

@@ -45,7 +45,7 @@ const QList<StyleSheet> AStyle::styleSheets = {
 };
 
 QString AStyle::currentStyle = defaultStyle;
-
+QLatin1String AStyle::DARK_PALETTE = QLatin1String("Dark-Palette");
 /*!
  * \brief Setup Application style by reading from openPilotLog.ini
  */
@@ -63,7 +63,7 @@ void AStyle::setup()
     // Set style, stylesheet or palette
     QString style_setting = ASettings::read(ASettings::Main::Style).toString();
 
-    if (style_setting == QLatin1String("Dark-Palette")) {
+    if (style_setting == DARK_PALETTE) {
         AStyle::setStyle(AStyle::darkPalette());
         ASettings::write(ASettings::Main::Style, style_setting);
         return;
@@ -112,9 +112,24 @@ void AStyle::setStyle(const QPalette &palette)
 {
     resetStyle();
     LOG << "Setting Colour Palette...";
+    currentStyle = DARK_PALETTE;
     qApp->setPalette(palette);
 }
 
+StyleType AStyle::getStyleType()
+{
+    const QStringList darkStyles = {
+        QStringLiteral("Breeze-Dark"),
+        QStringLiteral("QDarkStyle"),
+        DARK_PALETTE,
+    };
+
+    if (darkStyles.contains(currentStyle))
+        return StyleType::Dark;
+    else
+        return StyleType::Light;
+}
+
 QPalette AStyle::darkPalette()
 {
     auto palette = QPalette();

+ 5 - 0
src/classes/astyle.h

@@ -23,6 +23,8 @@
 #include <QTextStream>
 #include <QComboBox>
 
+enum class StyleType {Light, Dark};
+
 /*!
  * \brief The StyleSheet struct holds the Display Name and File Name (in the
  * resource system) for the available stylesheets.
@@ -51,6 +53,7 @@ class AStyle
 {
 private:
     static QString currentStyle;
+    static QLatin1String DARK_PALETTE;
     static void resetStyle();
 public:
     static const QStringList styles;
@@ -61,6 +64,8 @@ public:
     static void setStyle(const QString &style_key);
     static void setStyle(const StyleSheet &style_sheet);
     static void setStyle(const QPalette &palette);
+    static QString getCurrentStyle() {return currentStyle;}
+    static StyleType getStyleType();
     static QPalette darkPalette();
     static const QString& style();
 

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

@@ -372,12 +372,14 @@ 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);
+        emit settingChanged(MainWindow);
         return;
     }
     for (const auto &style_name : AStyle::styles) {
         if (new_style_setting == style_name) {
             AStyle::setStyle(style_name);
             ASettings::write(ASettings::Main::Style, new_style_setting);
+            emit settingChanged(MainWindow);
             return;
         }
     }
@@ -386,6 +388,7 @@ void SettingsWidget::on_styleComboBox_currentTextChanged(const QString& new_styl
         if (new_style_setting == style_sheet.styleSheetName) {
             AStyle::setStyle(style_sheet);
             ASettings::write(ASettings::Main::Style, new_style_setting);
+            emit settingChanged(MainWindow);
             return;
         }
     }

+ 2 - 2
src/gui/widgets/settingswidget.h

@@ -48,7 +48,7 @@ public:
     /*!
      * \brief enumerates Widgets that need to receive a signal when a setting is updated.
      */
-    enum SettingSignal {LogbookWidget, HomeWidget, AircraftWidget, PilotsWidget};
+    enum SettingSignal {LogbookWidget, HomeWidget, AircraftWidget, PilotsWidget, MainWindow};
 
 private slots:
 
@@ -111,7 +111,7 @@ signals:
      * \brief settingChanged is emitted when a setting change occurs that needs to trigger
      * an update (repaint) to another widget.
      */
-    void settingChanged(SettingSignal widget);
+    void settingChanged(SettingsWidget::SettingSignal widget);
 
 protected:
     /*!