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  void addWindowScaleSizeOption();
95 
97  Qt::WindowState getWindowState() const;
98 
100  CEnableForFramelessWindow::WindowMode getWindowMode() const;
101 
103  void processEventsToRefreshGui() const;
104 
107  void initMainApplicationWidget(QWidget *mainWidget);
108 
110  void addWindowFlags(Qt::WindowFlags flags);
111 
113  QString setExtraWindowTitle(const QString &extraInfo,
114  QWidget *mainWindowWidget = mainApplicationWidget()) const;
115 
118  void cmdLineErrorMessage(const QString &text, const QString &informativeText) const override;
119  void cmdLineErrorMessage(const swift::misc::CStatusMessageList &msgs) const override;
121 
123  bool isCmdWindowSizeResetSet() const;
124 
127  bool displayInStatusBar(const swift::misc::CStatusMessage &message) override;
128  bool displayInOverlayWindow(const swift::misc::CStatusMessage &message,
129  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
130  bool displayInOverlayWindow(const swift::misc::CStatusMessageList &messages,
131  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
132  bool displayInOverlayWindow(const QString &html,
133  std::chrono::milliseconds timeout = std::chrono::milliseconds(0)) override;
135 
136  // -------- Splash screen related ---------
138  void splashScreen(const QPixmap &pixmap);
139 
140  // -------- Splash screen related ---------
141 
143  void addMenuForSettingsAndCache(QMenu &menu);
144 
146  void addMenuForStyleSheets(QMenu &menu);
147 
149  void addMenuFile(QMenu &menu);
150 
152  void addMenuInternals(QMenu &menu);
153 
155  void addMenuWindow(QMenu &menu);
156 
158  void openUrl(const swift::misc::network::CUrl &url);
159 
161  void addMenuHelp(QMenu &menu);
162 
164  void showHelp(const QString &context = {}) const;
165 
167  void showHelp(const QObject *qObject) const;
168 
170  static bool triggerShowHelp(const QWidget *widget, QEvent *event);
171 
173  const CStyleSheetUtility &getStyleSheetUtility() const;
174 
176  QString getWidgetStyle() const;
177 
179  bool reloadStyleSheets();
180 
182  bool openStandardWidgetStyleSheet();
183 
185  bool openStandardLogDirectory();
186 
188  bool openStandardCrashDumpDirectory();
189 
191  bool updateFont(const QString &fontFamily, const QString &fontSize, const QString &fontStyle,
192  const QString &fontWeight, const QString &fontColor);
193 
195  bool updateFont(const QString &qss);
196 
198  bool resetFont();
199 
202  void setMinimumSizeInCharacters(int widthChars, int heightChars);
203 
205  void displaySetupLoadFailure(swift::misc::CStatusMessageList msgs) override;
206 
209  QDialog::DialogCode showCloseDialog(QMainWindow *mainWindow, QCloseEvent *closeEvent);
210 
212  void triggerNewVersionCheck(int delayedMs);
213 
215  void gracefulShutdown() override;
216 
218  bool toggleStayOnTop();
219 
222  void windowToFront();
223  void windowToBack();
224  void windowToFrontBackToggle();
226 
228  void windowMinimizeNormalToggle();
229 
231  void setSaveMainWidgetState(bool save) { m_saveMainWidgetState = save; }
232 
234  bool saveWindowGeometryAndState(const QMainWindow *window = CGuiApplication::mainApplicationWindow()) const;
235 
237  void resetWindowGeometryAndState();
238 
240  bool restoreWindowGeometryAndState(QMainWindow *window = CGuiApplication::mainApplicationWindow());
241 
244  static void setWindowIcon(const QPixmap &icon);
245 
247  static QWidget *mainApplicationWidget();
248 
250  void registerMainApplicationWidget(QWidget *mainWidget);
251 
253  bool hasMinimumMappingVersion() const override;
254 
256  static QMainWindow *mainApplicationWindow();
257 
259  static swift::gui::IMainWindowAccess *mainWindowAccess();
260 
262  static void exit(int retcode = 0);
263 
266  static void highDpiScreenSupport(const QString &scaleFactor = {});
267 
269  static bool isUsingHighDpiScreenSupport();
270 
272  static QScreen *currentScreen();
273 
276  static QRect currentScreenGeometry();
277 
279  static void modalWindowToFront();
280 
283  static double parseScaleFactor(int argc, char *argv[]);
284 
286  static QString scaleFactor(int argc, char *argv[]);
287 
289  static QString defaultScaleFactorString();
290 
291  signals:
294 
297 
299  void fontChanged();
300 
302  void alwaysOnTop(bool onTop);
303 
304  protected:
306  bool parsingHookIn() override;
307 
309  void onCoreFacadeStarted() override;
310 
312  void onStartUpCompleted() override;
313 
315  void checkNewVersion(bool onlyIfNew);
316 
318  QString getFontInfo() const;
319 
321  static void registerMetadata();
322 
323  private:
324  QPixmap m_windowIcon;
325  QString m_fontFamily;
326  int m_fontPointSize;
327  int m_minWidthChars = -1;
328  int m_minHeightChars = -1;
329  QCommandLineOption m_cmdWindowStateMinimized { "emptyMinimized" };
330  QCommandLineOption m_cmdWindowMode { "emptyWindowMode" };
331  QCommandLineOption m_cmdWindowSizeReset { "emptySizeReset" };
332  QCommandLineOption m_cmdWindowScaleSize { "emptyScale" };
333  CStyleSheetUtility m_styleSheetUtility { this };
334  bool m_uiSetupCompleted = false;
335  bool m_saveMainWidgetState = true;
336  bool m_frontBack = true;
337  bool m_normalizeMinimize = true;
338  QScopedPointer<CSplashScreen> m_splashScreen;
339  components::CUpdateInfoDialog *m_updateDialog = nullptr;
340  components::CApplicationCloseDialog *m_closeDialog =
341  nullptr;
342  swift::misc::CSettingReadOnly<settings::TGeneralGui> m_guiSettings { this, &CGuiApplication::settingsChanged };
344  this
345  };
346 
348  void settingsChanged();
349 
351  void checkNewVersionMenu();
352 
354  void adjustPalette();
355 
357  void onStyleSheetsChanged();
358 
360  void setCurrentFontValues();
361 
363  void superviseWindowMinSizes();
364 
366  static const QString &fileForWindowGeometryAndStateSettings();
367 
369  static int hashForStateSettingsSchema(const QMainWindow *window);
370  };
371 } // namespace swift::gui
372 
375 
376 #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.
#define SWIFT_GUI_EXPORT
Export a class or function from the library.