/* *openPilotLog - A FOSS Pilot Logbook Application *Copyright (C) 2020-2023 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 . */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include "src/gui/widgets/homewidget.h" #include "src/gui/widgets/settingswidget.h" #include "src/gui/widgets/tableeditwidget.h" #include "src/gui/widgets/debugwidget.h" #include "src/classes/style.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE /*! * \brief The MainWindow contains a QStackedWidget and a QToolBar as the main User Interface. * \details The Tool bar contains shortcuts to the different widgets, which are on selection set active on the stacked main widget. * For a detailed description of what each widget does, please refer to the documentation for each widget. This is only a short synopsis: * * ## HomeWidget * * The home widget displays the total amount of hours for all logged flights, seperated into different categories. It also enables keeping track * of currencies and license expiries * * ## New Flight * * Opens a NewFlightDialog which can be used to submit a new flight to the database. * * ## Logboook * * Shows a view of the logbook table in a QTableView and enables editing the entries by spawning a child NewFlightDialog with the details for a selected flight. * * ## Aircraft * * Shows a view of the tails table in a QTableView and enables editing the entries by spawning a child NewTailDialog with the details for a selected tail. * * ## Pilots * * Shows a view of the pilots table in a QTableView and enables editing the entries by spawning a child NewPilotDialog with the details for a selected pilot. * * ## Airports * * Enables viewing and editing the airports database * * ## Settings * * Enables changing application settings */ class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void onStyleChanged(SettingsWidget::SettingSignal signal){ if (signal == SettingsWidget::MainWindow) setActionIcons(OPL::Style::getStyleType()); } private slots: void on_actionHome_triggered(); void on_actionNewFlight_triggered(); void on_actionLogbook_triggered(); void on_actionAircraft_triggered(); void on_actionPilots_triggered(); void on_actionAirports_triggered(); void on_actionSettings_triggered(); void on_actionQuit_triggered(); void on_actionDebug_triggered(); void on_actionNewSim_triggered(); private: Ui::MainWindow *ui; HomeWidget* homeWidget; LogbookTableEditWidget* logbookWidget; // This widget has a slot not present in TableEditWidget TableEditWidget* tailsWidget; TableEditWidget* pilotsWidget; TableEditWidget* airportWidget; SettingsWidget* settingsWidget; DebugWidget* debugWidget; bool airportDbIsDirty = false; void init(); void setupToolbar(); void initialiseWidgets(); void connectDatabase(); void setActionIcons(OPL::Style::StyleType style = OPL::Style::StyleType::Light); void nope(); void connectWidgets(); // Prompts the user to fix a broken database or import a backup void onDatabaseInvalid(); // void doDebugStuff(); protected: /*! * \brief Shows the debug widget by pressing * */ void keyPressEvent(QKeyEvent* keyEvent) override { if(keyEvent->type() == QKeyEvent::KeyPress) { if(keyEvent->matches(QKeySequence::AddTab)) { on_actionDebug_triggered(); } else if (keyEvent->matches(QKeySequence::InsertLineSeparator)) { doDebugStuff(); } } } /*! * \brief resizeEvent Resize the Toolbar's icon size to match the window height */ void resizeEvent(QResizeEvent *event) override { const auto icon_size = this->height() / 16; const auto toolBar = this->findChild(); toolBar->setIconSize(QSize(icon_size, icon_size)); event->accept(); } signals: void addFlightEntryRequested(); void addSimulatorEntryRequested(); //void closeEvent(QCloseEvent *event) override; //TODO check and prompt for creation of backup? }; #endif // MAINWINDOW_H