-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmainwindow.h
183 lines (148 loc) · 5.08 KB
/
mainwindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
*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 <https://www.gnu.org/licenses/>.
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTime>
#include <QSqlTableModel>
#include <QTableView>
#include <chrono>
#include <QMessageBox>
#include <QDir>
#include <QFile>
#include <QKeyEvent>
#include <QToolBar>
#include <src/gui/widgets/logbooktableeditwidget.h>
#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 <ctrl + t>
* <Shift+Enter for a quick and dirty debug>
*/
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() / 14;
const auto toolBar = this->findChild<QToolBar*>();
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