swift
swiftguistd.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef STDGUI_SWIFTGUISTD_H
7 #define STDGUI_SWIFTGUISTD_H
8 
9 #include <QMainWindow>
10 #include <QObject>
11 #include <QScopedPointer>
12 #include <QString>
13 
14 #include "core/actionbind.h"
20 #include "gui/guiactionbind.h"
21 #include "gui/mainwindowaccess.h"
22 #include "gui/managedstatusbar.h"
25 #include "misc/icons.h"
26 #include "misc/identifiable.h"
28 #include "misc/loghandler.h"
29 #include "misc/loghistory.h"
33 #include "misc/statusmessage.h"
34 #include "misc/variant.h"
35 
36 class QAction;
37 class QCloseEvent;
38 class QEvent;
39 class QMouseEvent;
40 class QTimer;
41 
42 namespace swift::misc::aviation
43 {
44  class CAltitude;
45 }
46 namespace swift::gui::components
47 {
48  class CDbLoadDataDialog;
49  class CAutoPublishDialog;
50  class CModelBrowserDialog;
51 } // namespace swift::gui::components
52 namespace Ui
53 {
54  class SwiftGuiStd;
55 }
56 
58 class SwiftGuiStd :
59  public QMainWindow,
63 {
64  Q_OBJECT
65  Q_INTERFACES(swift::gui::IMainWindowAccess)
66 
67 public:
71  {
72  MainPageInfoArea = 0,
73  MainPageLogin = 1,
74  MainPageInternals = 2,
75  MainPageInvisible = 3
76  };
77 
79  SwiftGuiStd(WindowMode windowMode, QWidget *parent = nullptr);
80 
82  virtual ~SwiftGuiStd() override;
83 
84 signals:
87  void currentMainInfoAreaChanged(const QWidget *currentWidget);
88 
89 protected:
92 
94  virtual void mouseMoveEvent(QMouseEvent *event) override;
95 
97  virtual void mousePressEvent(QMouseEvent *event) override;
98 
100  virtual void mouseReleaseEvent(QMouseEvent *event) override;
101 
103  virtual void closeEvent(QCloseEvent *event) override;
104 
106  virtual void changeEvent(QEvent *event) override;
108 
110 
113  QAction *getWindowMinimizeAction(QObject *parent);
114  QAction *getWindowNormalAction(QObject *parent);
115  QAction *getToggleWindowVisibilityAction(QObject *parent);
116  QAction *getToggleStayOnTopAction(QObject *parent);
118 
119 private:
120  QScopedPointer<Ui::SwiftGuiStd> ui;
121  QScopedPointer<swift::gui::components::CNavigatorDialog> m_navigator {
123  };
124  QScopedPointer<swift::gui::components::CDbLoadDataDialog> m_dbLoadDialog;
125  QScopedPointer<swift::gui::components::CAutoPublishDialog> m_autoPublishDialog;
126  QScopedPointer<swift::gui::components::CModelBrowserDialog> m_modelBrower;
127  QScopedPointer<swift::gui::components::CAircraftModelSetValidationDialog>
128  m_validationDialog;
130  swift::core::CActionBind m_actionPtt { swift::misc::input::pttHotkeyAction(),
131  swift::misc::CIcons::StandardIconRadio16, this, &SwiftGuiStd::onPttChanged };
132  swift::core::CActionBindings m_menuHotkeyHandlers;
133  swift::gui::CManagedStatusBar m_statusBar;
134  swift::misc::CLogHistoryReplica m_logHistoryForLogButtons { this };
135  swift::misc::CLogHistoryReplica m_logHistoryForOverlay { this };
137 
138  // contexts
139  static constexpr int MaxCoreFailures = 5;
140  int m_coreFailures = 0;
141  bool m_init = false;
142  bool m_coreAvailable = false;
143  bool m_contextNetworkAvailable = false;
144  bool m_contextAudioAvailable = false;
145  bool m_displayingDBusReconnect = false;
146  bool m_dbDataLoading = false;
147  QTimer m_timerContextWatchdog;
149 
151  void updateGuiStatusInformation();
152 
154  void initStyleSheet();
155 
157  void initialContextDataReads();
158 
160  void init();
161 
163  void initGuiSignals();
164 
166  void initMenus();
167 
169  void performGracefulShutdown();
170 
172  void setAudioDeviceLists();
173 
175  void setContextAvailability();
176 
181  void setTestPosition(const QString &wgsLatitude, const QString &wgsLongitude,
182  const swift::misc::aviation::CAltitude &altitude,
183  const swift::misc::aviation::CAltitude &pressureAltitude);
184 
187  bool isMainPageSelected(MainPageIndex mainPage) const;
188 
191  void stopAllTimers(bool disconnectSignalSlots);
192 
194  void playNotifcationSound(swift::misc::audio::CNotificationSounds::NotificationFlag notification) const;
195 
197  void displayLog();
198 
200  void displayNetworkSettings();
201 
203  void displayDBusReconnectDialog();
204 
206  void onPttChanged(bool enabled);
207 
208  //
209  // Data receiving related funtions
210  //
211 
213  bool reloadOwnAircraft();
214 
218  void onConnectionStatusChanged(const swift::misc::network::CConnectionStatus &from,
220 
221  //
222  // GUI related functions
223  //
224 
226  void setMainPageToInfoArea() { this->setMainPage(MainPageInfoArea); }
227 
229  void setMainPage(MainPageIndex mainPage);
230 
232  void setMainPageInfoArea(swift::gui::components::CMainInfoAreaComponent::InfoArea infoArea);
233 
235  void setSettingsPage(int settingsTabIndex = -1);
236 
238  void loginRequested();
239 
241  void onMenuClicked();
242 
244  void onKickedFromNetwork(const QString &kickMessage);
245 
247  void handleTimerBasedUpdates();
248 
250  void onChangedWindowOpacityTo50(bool) { onChangedWindowOpacity(50); }
251 
253  void onChangedWindowOpacityTo100(bool) { onChangedWindowOpacity(100); }
254 
256  void onChangedWindowOpacity(int opacity = -1);
257 
260  void toggleWindowStayOnTop();
261 
264  void toggleWindowVisibility();
265 
267  void onStyleSheetsChanged();
268 
270  void onToggledWindowsOnTop(bool onTop);
271 
273  void onCurrentMainWidgetChanged(int currentIndex);
274 
276  void onChangedMainInfoAreaFloating(bool floating);
277 
279  void onAudioClientFailure(const swift::misc::CStatusMessage &msg);
280 
282  void focusInMainEntryField();
283 
285  void focusInTextMessageEntryField();
286 
288  void showMinimized();
289 
291  void showNormal();
292 
294  void onNavigatorClosed();
295 
297  void verifyPrerequisites();
298 
300  void onValidatedModelSet(const swift::misc::simulation::CSimulatorInfo &simulator,
302  const swift::misc::simulation::CAircraftModelList &invalid, bool stopped,
303  const swift::misc::CStatusMessageList &msgs);
304 
306  void displayValidationDialog();
307 
309  void checkDbDataLoaded();
310 
312  int autoPublishDialog();
313 
315  bool triggerAutoPublishDialog();
316 
318  bool startModelBrowser();
319 
321  bool startAFVMap();
322 
325  void onShowOverlayVariant(const swift::misc::CVariant &variant, std::chrono::milliseconds duration);
326  void onShowOverlayInlineTextMessageTab(swift::gui::components::TextMessageTab tab);
327  void onShowOverlayInlineTextMessageCallsign(const swift::misc::aviation::CCallsign &callsign);
329 };
330 
331 #endif // STDGUI_SWIFTGUISTD_H
swift GUI
Definition: swiftguistd.h:63
virtual void mousePressEvent(QMouseEvent *event)
Definition: swiftguistd.cpp:96
virtual void mouseMoveEvent(QMouseEvent *event)
Definition: swiftguistd.cpp:91
void currentMainInfoAreaChanged(const QWidget *currentWidget)
Main info area has changed.
QAction * getToggleStayOnTopAction(QObject *parent)
Get a minimize action which minimizes the window.
SwiftGuiStd(WindowMode windowMode, QWidget *parent=nullptr)
Constructor.
Definition: swiftguistd.cpp:77
virtual ~SwiftGuiStd()
Destructor.
Definition: swiftguistd.cpp:89
QAction * getToggleWindowVisibilityAction(QObject *parent)
Get a minimize action which minimizes the window.
virtual void closeEvent(QCloseEvent *event)
MainPageIndex
Main page indexes.
Definition: swiftguistd.h:71
QAction * getWindowNormalAction(QObject *parent)
Get a minimize action which minimizes the window.
QAction * getWindowMinimizeAction(QObject *parent)
Get a minimize action which minimizes the window.
virtual void changeEvent(QEvent *event)
virtual void mouseReleaseEvent(QMouseEvent *event)
CActionBind binds a member function to an action.
Definition: actionbind.h:18
Main window which can be frameless.
Direct acccess to main window`s status bar, info bar and such.
Base class with a member CIdentifier to be inherited by a class which has an identity in the environm...
Definition: identifiable.h:24
Allows distributed access to the log messages of a central CLogHistory.
Definition: loghistory.h:50
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition: variant.h:66
Altitude as used in aviation, can be AGL or MSL altitude.
Definition: altitude.h:52
Value object encapsulating information of a callsign.
Definition: callsign.h:30
Value object encapsulating information about a connection status.
Value object encapsulating a list of aircraft models.
Comprehensive information of an aircraft.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
QList< CActionBinding > CActionBindings
List of bindings.
Definition: actionbind.h:81
High level reusable GUI components.
Definition: aboutdialog.cpp:13