/* *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 . */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #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/logbookwidget.h" #include "src/gui/widgets/aircraftwidget.h" #include "src/gui/widgets/backupwidget.h" #include "src/gui/widgets/pilotswidget.h" #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/classes/acompletiondata.h" #include "src/testing/atimer.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. * * # Backup * * Enables backing up and restoring the database. * * # Settings * * Enables changing application settings */ class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_actionHome_triggered(); void on_actionNewFlight_triggered(); void on_actionLogbook_triggered(); void on_actionAircraft_triggered(); void on_actionPilots_triggered(); void on_actionBackup_triggered(); void on_actionSettings_triggered(); void on_actionQuit_triggered(); void on_actionDebug_triggered(); private: Ui::MainWindow *ui; HomeWidget* homeWidget; LogbookWidget* logbookWidget; AircraftWidget* aircraftWidget; PilotsWidget* pilotsWidget; BackupWidget* backupWidget; SettingsWidget* settingsWidget; DebugWidget* debugWidget; // Completion Data for QCompleters and Mapping ACompletionData completionData; 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 { int icon_size; if (this->height() < 780) icon_size = (this->height() / 13); else icon_size = (this->height() / 12); auto tool_bar = this->findChild(); tool_bar->setIconSize(QSize(icon_size, icon_size)); } }; #endif // MAINWINDOW_H