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  void showChangelog() const;
165 
167  const CStyleSheetUtility &getStyleSheetUtility() const;
168 
170  QString getWidgetStyle() const;
171 
173  bool reloadStyleSheets();
174 
176  bool openStandardWidgetStyleSheet();
177 
179  bool openStandardLogDirectory();
180 
182  bool openStandardCrashDumpDirectory();
183 
185  bool updateFont(const QString &fontFamily, const QString &fontSize, const QString &fontStyle,
186  const QString &fontWeight, const QString &fontColor);
187 
189  bool updateFont(const QString &qss);
190 
192  bool resetFont();
193 
196  void setMinimumSizeInCharacters(int widthChars, int heightChars);
197 
199  void displaySetupLoadFailure(swift::misc::CStatusMessageList msgs) override;
200 
203  QDialog::DialogCode showCloseDialog(QMainWindow *mainWindow, QCloseEvent *closeEvent);
204 
206  void triggerNewVersionCheck(int delayedMs);
207 
209  void gracefulShutdown() override;
210 
212  bool toggleStayOnTop();
213 
216  void windowToFront();
217  void windowToBack();
218  void windowToFrontBackToggle();
220 
222  void windowMinimizeNormalToggle();
223 
225  void setSaveMainWidgetState(bool save) { m_saveMainWidgetState = save; }
226 
228  bool saveWindowGeometryAndState(const QMainWindow *window = CGuiApplication::mainApplicationWindow()) const;
229 
231  void resetWindowGeometryAndState();
232 
234  bool restoreWindowGeometryAndState(QMainWindow *window = CGuiApplication::mainApplicationWindow());
235 
238  static void setWindowIcon(const QPixmap &icon);
239 
241  static QWidget *mainApplicationWidget();
242 
244  void registerMainApplicationWidget(QWidget *mainWidget);
245 
247  bool hasMinimumMappingVersion() const override;
248 
250  static QMainWindow *mainApplicationWindow();
251 
253  static swift::gui::IMainWindowAccess *mainWindowAccess();
254 
256  static void exit(int retcode = 0);
257 
259  static QScreen *currentScreen();
260 
263  static QRect currentScreenGeometry();
264 
266  static void modalWindowToFront();
267 
268  signals:
271 
274 
276  void fontChanged();
277 
279  void alwaysOnTop(bool onTop);
280 
281  protected:
283  bool parsingHookIn() override;
284 
286  void onCoreFacadeStarted() override;
287 
289  void onStartUpCompleted() override;
290 
292  void checkNewVersion(bool onlyIfNew);
293 
295  QString getFontInfo() const;
296 
298  static void registerMetadata();
299 
300  private:
301  QPixmap m_windowIcon;
302  QString m_fontFamily;
303  int m_fontPointSize;
304  int m_minWidthChars = -1;
305  int m_minHeightChars = -1;
306  QCommandLineOption m_cmdWindowStateMinimized { "emptyMinimized" };
307  QCommandLineOption m_cmdWindowMode { "emptyWindowMode" };
308  QCommandLineOption m_cmdWindowSizeReset { "emptySizeReset" };
309  CStyleSheetUtility m_styleSheetUtility { this };
310  bool m_uiSetupCompleted = false;
311  bool m_saveMainWidgetState = true;
312  bool m_frontBack = true;
313  bool m_normalizeMinimize = true;
314  QScopedPointer<CSplashScreen> m_splashScreen;
315  components::CUpdateInfoDialog *m_updateDialog = nullptr;
316  components::CApplicationCloseDialog *m_closeDialog =
317  nullptr;
318  swift::misc::CSettingReadOnly<settings::TGeneralGui> m_guiSettings { this, &CGuiApplication::settingsChanged };
320  this
321  };
322 
324  void settingsChanged();
325 
327  void checkNewVersionMenu();
328 
330  void adjustPalette();
331 
333  void onStyleSheetsChanged();
334 
336  void setCurrentFontValues();
337 
339  void superviseWindowMinSizes();
340 
342  static const QString &fileForWindowGeometryAndStateSettings();
343 
345  static int hashForStateSettingsSchema(const QMainWindow *window);
346  };
347 } // namespace swift::gui
348 
351 
352 #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:14
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.