swift
guiapplication.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2016 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_GUI_GUIAPPLICATION_H
7 #define SWIFT_GUI_GUIAPPLICATION_H
8 
9 #include <QCommandLineOption>
10 #include <QDialog>
11 #include <QEvent>
12 #include <QObject>
13 #include <QPixmap>
14 #include <QScopedPointer>
15 #include <QScreen>
16 #include <QString>
17 #include <Qt>
18 
19 #include "core/application.h"
21 #include "gui/mainwindowaccess.h"
24 #include "gui/splashscreen.h"
25 #include "gui/stylesheetutility.h"
26 #include "gui/swiftguiexport.h"
27 #include "misc/icons.h"
28 #include "misc/statusmessage.h"
29 
30 class QMenu;
31 class QWidget;
32 class QMainWindow;
33 
34 namespace swift::misc
35 {
36  class CLogCategoryList;
37 }
38 namespace swift::gui::components
39 {
40  class CApplicationCloseDialog;
41  class CUpdateInfoDialog;
42 } // namespace swift::gui::components
43 namespace swift::gui
44 {
58  {
59  Q_OBJECT
60  Q_INTERFACES(swift::gui::IMainWindowAccess)
61 
62  public:
64  static CGuiApplication *instance();
65 
67  static const QStringList &getLogCategories();
68 
70  static const QString &settingsOrganization();
71 
73  static bool removeAllWindowsSwiftRegistryEntries();
74 
76  explicit CGuiApplication(
77  const QString &applicationName = executable(),
78  swift::misc::CApplicationInfo::Application application = swift::misc::CApplicationInfo::Unknown,
79  const QPixmap &icon = swift::misc::CIcons::swift64());
80 
82  ~CGuiApplication() override;
83 
85  void addWindowStateOption();
86 
88  void addWindowModeOption();
89 
91  void addWindowResetSizeOption();
92 
94  Qt::WindowState getWindowState() const;
95 
97  CEnableForFramelessWindow::WindowMode getWindowMode() const;
98 
100  void processEventsToRefreshGui() const;
101 
104  void initMainApplicationWidget(QWidget *mainWidget);
105 
107  void addWindowFlags(Qt::WindowFlags flags);
108 
110  QString setExtraWindowTitle(const QString &extraInfo,
111  QWidget *mainWindowWidget = mainApplicationWidget()) const;
112 
115  void cmdLineErrorMessage(const QString &text, const QString &informativeText) const override;
116  void cmdLineErrorMessage(const swift::misc::CStatusMessageList &msgs) const override;
118 
120  bool isCmdWindowSizeResetSet() const;
121 
124  bool displayInStatusBar(const swift::misc::CStatusMessage &message) override;
125  bool displayInOverlayWindow(const swift::misc::CStatusMessage &message,
126  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
127  bool displayInOverlayWindow(const swift::misc::CStatusMessageList &messages,
128  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
129  bool displayInOverlayWindow(const QString &html,
130  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
132 
133  // -------- Splash screen related ---------
135  void splashScreen(const QPixmap &pixmap);
136 
137  // -------- Splash screen related ---------
138 
140  void addMenuForSettingsAndCache(QMenu &menu);
141 
143  void addMenuForStyleSheets(QMenu &menu);
144 
146  void addMenuFile(QMenu &menu);
147 
149  void addMenuInternals(QMenu &menu);
150 
152  void addMenuWindow(QMenu &menu);
153 
155  void openUrl(const swift::misc::network::CUrl &url);
156 
158  void addMenuHelp(QMenu &menu);
159 
161  void showHelp(const QString &subpath = {}) const;
162 
164  const CStyleSheetUtility &getStyleSheetUtility() const;
165 
167  QString getWidgetStyle() const;
168 
170  bool reloadStyleSheets();
171 
173  bool openStandardWidgetStyleSheet();
174 
176  bool openStandardLogDirectory();
177 
179  bool openStandardCrashDumpDirectory();
180 
182  bool updateFont(const QString &fontFamily, const QString &fontSize, const QString &fontStyle,
183  const QString &fontWeight, const QString &fontColor);
184 
186  bool updateFont(const QString &qss);
187 
189  bool resetFont();
190 
193  void setMinimumSizeInCharacters(int widthChars, int heightChars);
194 
196  void displaySetupLoadFailure(swift::misc::CStatusMessageList msgs) override;
197 
200  QDialog::DialogCode showCloseDialog(QMainWindow *mainWindow, QCloseEvent *closeEvent);
201 
203  void triggerNewVersionCheck(int delayedMs);
204 
206  void gracefulShutdown() override;
207 
209  bool toggleStayOnTop();
210 
213  void windowToFront();
214  void windowToBack();
215  void windowToFrontBackToggle();
217 
219  void windowMinimizeNormalToggle();
220 
222  void setSaveMainWidgetState(bool save) { m_saveMainWidgetState = save; }
223 
225  bool saveWindowGeometryAndState(const QMainWindow *window = CGuiApplication::mainApplicationWindow()) const;
226 
228  void resetWindowGeometryAndState();
229 
231  bool restoreWindowGeometryAndState(QMainWindow *window = CGuiApplication::mainApplicationWindow());
232 
235  static void setWindowIcon(const QPixmap &icon);
236 
238  static QWidget *mainApplicationWidget();
239 
241  void registerMainApplicationWidget(QWidget *mainWidget);
242 
244  bool hasMinimumMappingVersion() const override;
245 
247  static QMainWindow *mainApplicationWindow();
248 
250  static swift::gui::IMainWindowAccess *mainWindowAccess();
251 
253  static void exit(int retcode = 0);
254 
256  static QScreen *currentScreen();
257 
260  static QRect currentScreenGeometry();
261 
263  static void modalWindowToFront();
264 
265  signals:
268 
271 
273  void fontChanged();
274 
276  void alwaysOnTop(bool onTop);
277 
278  protected:
280  bool parsingHookIn() override;
281 
283  void onCoreFacadeStarted() override;
284 
286  void onStartUpCompleted() override;
287 
289  void checkNewVersion(bool onlyIfNew);
290 
292  QString getFontInfo() const;
293 
295  static void registerMetadata();
296 
297  private:
298  QPixmap m_windowIcon;
299  QString m_fontFamily;
300  int m_fontPointSize;
301  int m_minWidthChars = -1;
302  int m_minHeightChars = -1;
303  QCommandLineOption m_cmdWindowStateMinimized { "emptyMinimized" };
304  QCommandLineOption m_cmdWindowMode { "emptyWindowMode" };
305  QCommandLineOption m_cmdWindowSizeReset { "emptySizeReset" };
306  CStyleSheetUtility m_styleSheetUtility { this };
307  bool m_uiSetupCompleted = false;
308  bool m_saveMainWidgetState = true;
309  bool m_frontBack = true;
310  bool m_normalizeMinimize = true;
311  QScopedPointer<CSplashScreen> m_splashScreen;
312  components::CUpdateInfoDialog *m_updateDialog = nullptr;
313  components::CApplicationCloseDialog *m_closeDialog =
314  nullptr;
315  swift::misc::CSettingReadOnly<settings::TGeneralGui> m_guiSettings { this, &CGuiApplication::settingsChanged };
317  this
318  };
319 
321  void settingsChanged();
322 
324  void checkNewVersionMenu();
325 
327  void adjustPalette();
328 
330  void onStyleSheetsChanged();
331 
333  void setCurrentFontValues();
334 
336  void superviseWindowMinSizes();
337 
339  static const QString &fileForWindowGeometryAndStateSettings();
340 
342  static int hashForStateSettingsSchema(const QMainWindow *window);
343  };
344 } // namespace swift::gui
345 
348 
349 #endif // SWIFT_GUI_GUIAPPLICATION_H
GUI application, a specialized version of swift::core::CApplication for GUI applications.
void fontChanged()
Font has been changed.
void setSaveMainWidgetState(bool save)
Save the main widget state?
void alwaysOnTop(bool onTop)
always on top
static QMainWindow * mainApplicationWindow()
Main application window.
void uiObjectTreeReady()
Object tree ready (means ui->setupUi() completed)
void styleSheetsChanged()
Style sheet changed.
Reads and provides style sheets.
Direct acccess to main window`s status bar, info bar and such.
Application
Enumeration of application roles.
static const QPixmap & swift64()
swift icon
Class template for accessing a specific value in the CSettingsCache.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of a location, kind of simplified CValueObject compliant versi...
Definition: url.h:27
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Definition: aboutdialog.cpp:13
GUI related classes.
void registerMetadata()
Register metadata for GUI.
Free functions in swift::misc.
WindowState
typedef WindowFlags
#define SWIFT_GUI_EXPORT
Export a class or function from the library.