swift
guiutility.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2014 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_GUIUTILITY_H
7 #define SWIFT_GUI_GUIUTILITY_H
8 
9 #include <QByteArray>
10 #include <QDockWidget>
11 #include <QFont>
12 #include <QFontMetrics>
13 #include <QFontMetricsF>
14 #include <QModelIndexList>
15 #include <QPoint>
16 #include <QSize>
17 #include <QString>
18 #include <QWidget>
19 #include <QWidgetList>
20 #include <QWindow>
21 
22 #include "gui/swiftguiexport.h"
23 #include "misc/variant.h"
24 
25 class QCheckBox;
26 class QComboBox;
27 class QLayout;
28 class QMimeData;
29 class QLineEdit;
30 class QTabWidget;
31 class QDialog;
32 class QLabel;
33 class QWizard;
34 class QGraphicsOpacityEffect;
35 class QAbstractItemModel;
36 
37 namespace swift::misc
38 {
39  class CIcon;
40 }
41 namespace swift::gui
42 {
43  class CEnableForFramelessWindow;
44  class COverlayMessagesFrame;
45  class COverlayMessagesWizardPage;
46  class COverlayMessagesTabWidget;
47 
50  {
51  public:
53  static CEnableForFramelessWindow *mainFramelessEnabledWindow();
54 
57  static void registerMainApplicationWidget(QWidget *mainWidget);
58 
60  static QWidget *mainApplicationWidget();
61 
63  static qreal mainApplicationWidgetPixelRatio();
64 
67  static QSize desktopSize();
68 
71  static QSize physicalScreenSizeOs();
72 
74  static bool isMainWindowFrameless();
75 
77  static QString screenInformation(const QString &separator = "\n");
78 
80  static const QString &orientationAsString(Qt::ScreenOrientation orientation);
81 
84  static QString rectAsString(const QRect &rect);
85  static QString rectAsString(const QRectF &rect);
86  static QString sizeAsString(const QSize &size);
87  static QString sizeAsString(const QSizeF &size);
89 
91  static QWidgetList topLevelApplicationWidgetsWithName();
92 
94  static QPoint mainWidgetGlobalPosition();
95 
97  static QString replaceTabCountValue(const QString &oldName, int count);
98 
100  static void deleteLayout(QLayout *layout, bool deleteWidgets);
101 
103  static bool lenientTitleComparison(const QString &title, const QString &comparison);
104 
106  static bool setComboBoxValueByStartingString(QComboBox *box, const QString &candidate,
107  const QString &unspecified = QString());
108 
110  static bool setComboBoxValueByContainingString(QComboBox *box, const QString &candidate,
111  const QString &unspecified = QString());
112 
114  static bool hasSwiftVariantMimeType(const QMimeData *mime);
115 
117  static swift::misc::CVariant fromSwiftDragAndDropData(const QMimeData *mime);
118 
120  static swift::misc::CVariant fromSwiftDragAndDropData(const QByteArray &utf8Data);
121 
123  static int metaTypeIdFromSwiftDragAndDropData(const QMimeData *mime);
124 
126  static QFileInfo representedMimeFile(const QMimeData *mime);
127 
129  static bool isMimeRepresentingReadableFile(const QMimeData *mime);
130 
132  static bool isMimeRepresentingReadableJsonFile(const QMimeData *mime);
133 
135  template <class OverlayWidget>
136  static OverlayWidget *nextOverlayMessageWidget(QWidget *widget, int maxLevels = 10)
137  {
138  if (!widget || maxLevels < 1) { return nullptr; }
139  OverlayWidget *o = qobject_cast<OverlayWidget *>(widget);
140  if (o) { return o; }
141  int cl = 0;
142  QWidget *cw = widget->parentWidget();
143  while (cl < maxLevels && cw)
144  {
145  o = qobject_cast<OverlayWidget *>(cw);
146  if (o) { return o; }
147  cl++;
148  cw = cw->parentWidget();
149  }
150  return nullptr;
151  }
152 
154  static COverlayMessagesFrame *nextOverlayMessageFrame(QWidget *widget, int maxLevels = 10);
155 
157  static COverlayMessagesTabWidget *nextOverlayMessageTabWidget(QWidget *widget, int maxLevels = 10);
158 
160  static COverlayMessagesWizardPage *nextOverlayMessageWizardPage(QWidget *widget, int maxLevels = 10);
161 
163  static const QString &swiftJsonDragAndDropMimeType();
164 
166  static void checkBoxReadOnly(QCheckBox *checkBox, bool readOnly);
167 
169  static void checkBoxesReadOnly(QWidget *parent, bool readOnly);
170 
172  static void tempUnhidePassword(QLineEdit *lineEdit, int unhideMs = 5000);
173 
175  template <class WIDGET>
176  static void childrenSetEnabled(QWidget *parent, bool enabled)
177  {
178  if (!parent) { return; }
179  QList<WIDGET *> children = parent->findChildren<WIDGET *>();
180  for (WIDGET *w : children) { w->setEnabled(enabled); }
181  }
182 
184  static bool toggleStayOnTop(QWidget *widget);
185 
187  static bool stayOnTop(bool onTop, QWidget *widget);
188 
190  static bool staysOnTop(QWidget *widget);
191 
193  static QTabWidget *parentTabWidget(QWidget *widget, int maxLevels = 5);
194 
196  static QString marginsToString(const QMargins &margins);
197 
199  static QMargins stringToMargins(const QString &str);
200 
202  static QList<int> indexToUniqueRows(const QModelIndexList &indexes);
203 
205  static int clearModel(QAbstractItemModel *model);
206 
208  static bool isTopLevelWidget(QWidget *widget);
209 
211  static bool isTopLevelWindow(QWidget *widget);
212 
215  static bool isQMainWindow(const QWidget *widget);
216  static bool isDialog(const QWidget *widget);
218 
220  static void disableMinMaxCloseButtons(QWidget *window);
221 
223  static QGraphicsOpacityEffect *fadeInWidget(int durationMs, QWidget *widget, double startValue = 0.0,
224  double endValue = 1.0);
225 
227  static QGraphicsOpacityEffect *fadeOutWidget(int durationMs, QWidget *widget, double startValue = 1.0,
228  double endValue = 0.0);
229 
231  static QFontMetrics currentFontMetrics();
232 
234  static QFontMetricsF currentFontMetricsF();
235 
237  static QFont currentFont();
238 
240  static QSizeF fontMetrics80Chars(bool withRatio = false);
241 
243  static QSizeF fontMetricsLazyDog43Chars(bool withRatio = false);
244 
246  static QSizeF fontMetricsEstimateSize(int xCharacters, int yCharacters, bool withRatio = false);
247 
249  static void centerWidget(QWidget *widget);
250 
252  static void centerWidget(QWidget *widget, QWidget *host);
253 
255  static QString metricsInfo();
256 
258  static bool isUsingHighDpiScreenSupport();
259 
261  static void forceStyleSheetUpdate(QWidget *widget);
262 
264  static void superviseMainWindowMinSizes(qreal wRatio = 0.85, qreal hRatio = 0.85);
265 
267  static QString asSimpleHtmlImageWidth(const swift::misc::CIcon &icon, int width = -1);
268 
270  static QString asSimpleHtmlImageHeight(const swift::misc::CIcon &icon, int height = -1);
271 
273  static QDialog *findParentDialog(QWidget *widget);
274 
276  static QDialog *findParentDialog(QWidget *widget, int maxLevel);
277 
279  static void setElidedText(QLabel *label, const QString &text, Qt::TextElideMode mode = Qt::ElideMiddle);
280 
282  static void setElidedText(QLabel *label, const QString &shortText, const QString &longText,
283  Qt::TextElideMode mode = Qt::ElideMiddle);
284 
286  static void setWizardButtonWidths(QWizard *wizard);
287 
289  static QWidgetList getAllModallWidgets();
290 
292  static QStringList getAllWidgetTitles(const QWidgetList &widgets);
293 
295  static QStringList getAllWidgetNames(const QWidgetList &widgets);
296 
298  static QList<QDockWidget *> getAllDockWidgets(QWidget *parent, bool floatingOnly);
299 
301  static QList<QDockWidget *> getAllDockWidgets(QWindow *parent, bool floatingOnly);
302 
304  static QWidgetList closeAllModalWidgets();
305 
307  static QStringList closeAllModalWidgetsGetTitles();
308 
310  static QList<QDockWidget *> closeAllDockWidgets(QWidget *parent, bool floatingOnly);
311 
313  static QList<QDockWidget *> closeAllDockWidgets(QWindow *parent, bool floatingOnly);
314 
316  static QStringList closeAllDockWidgetsGetTitles(QWidget *parent, bool floatingOnly);
317 
319  static QStringList closeAllDockWidgetsGetTitles(QWindow *parent, bool floatingOnly);
320 
323  static QStringList deleteLaterAllDockWidgetsGetTitles(QWidget *parent, bool floatingOnly);
324 
325  private:
327  CGuiUtility() {}
328 
329  static QWidget *s_mainApplicationWidget;
330  };
331 } // namespace swift::gui
332 
333 #endif // SWIFT_GUI_GUIUTILITY_H
Main window which can be frameless.
GUI utilities.
Definition: guiutility.h:50
static void childrenSetEnabled(QWidget *parent, bool enabled)
Enable/disable all child widgets.
Definition: guiutility.h:176
static OverlayWidget * nextOverlayMessageWidget(QWidget *widget, int maxLevels=10)
Find next swift::gui::COverlayMessages QFrame or other implementing widget.
Definition: guiutility.h:136
Using this class provides a QFrame with the overlay functionality already integrated.
Using this class provides a QTabWidget with the overlay functionality already integrated.
Using this class provides a QWizardPage with the overlay functionality already integrated.
Value object for icons. An icon is stored in the global icon repository and identified by its index....
Definition: icon.h:39
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition: variant.h:66
GUI related classes.
Free functions in swift::misc.
#define SWIFT_GUI_EXPORT
Export a class or function from the library.