From 6955e6664145a24b841e793b1a6d8683a642af80 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 17 Sep 2018 02:30:02 +0200 Subject: [PATCH] Ref T357, support for overlay messages in QWizardPage --- src/blackgui/guiutility.cpp | 32 +++++++++++++-------------- src/blackgui/guiutility.h | 28 ++++++++++++++++++++++- src/blackgui/overlaymessages.h | 2 +- src/blackgui/overlaymessagesframe.cpp | 5 ++++- src/blackgui/overlaymessagesframe.h | 20 ++++++++++++++--- 5 files changed, 64 insertions(+), 23 deletions(-) diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index 1648c51d2..898dbd1c1 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -203,23 +203,6 @@ namespace BlackGui return typeId; } - COverlayMessagesFrame *CGuiUtility::nextOverlayMessageFrame(QWidget *widget, int maxLevels) - { - if (!widget || maxLevels < 1) { return nullptr; } - COverlayMessagesFrame *o = qobject_cast (widget); - if (o) { return o; } - int cl = 0; - QWidget *cw = widget->parentWidget(); - while (cl < maxLevels && cw) - { - o = qobject_cast (cw); - if (o) { return o; } - cl++; - cw = cw->parentWidget(); - } - return nullptr; - } - const QString &CGuiUtility::swiftJsonDragAndDropMimeType() { static const QString m("text/json/swift"); @@ -251,6 +234,21 @@ namespace BlackGui return fn.endsWith("json", Qt::CaseInsensitive); } + COverlayMessagesFrame *CGuiUtility::nextOverlayMessageFrame(QWidget *widget, int maxLevels) + { + return nextOverlayMessageWidget(widget, maxLevels); + } + + COverlayMessagesTabWidget *CGuiUtility::nextOverlayMessageTabWidget(QWidget *widget, int maxLevels) + { + return nextOverlayMessageWidget(widget, maxLevels); + } + + COverlayMessagesWizardPage *CGuiUtility::nextOverlayMessageWizardPage(QWidget *widget, int maxLevels) + { + return nextOverlayMessageWidget(widget, maxLevels); + } + void CGuiUtility::checkBoxReadOnly(QCheckBox *checkBox, bool readOnly) { static const QCheckBox defaultBox; diff --git a/src/blackgui/guiutility.h b/src/blackgui/guiutility.h index 9536f888d..917ee6947 100644 --- a/src/blackgui/guiutility.h +++ b/src/blackgui/guiutility.h @@ -38,6 +38,8 @@ namespace BlackGui { class CEnableForFramelessWindow; class COverlayMessagesFrame; + class COverlayMessagesWizardPage; + class COverlayMessagesTabWidget; //! GUI utilities class BLACKGUI_EXPORT CGuiUtility @@ -102,9 +104,33 @@ namespace BlackGui //! Is representing existing JSON file static bool isMimeRepresentingReadableJsonFile(const QMimeData *mime); - //! Find next BlackGui::COverlayMessages QFrame + //! Find next BlackGui::COverlayMessages QFrame or other implementing widget + template static OverlayWidget *nextOverlayMessageWidget(QWidget *widget, int maxLevels = 10) + { + if (!widget || maxLevels < 1) { return nullptr; } + OverlayWidget *o = qobject_cast (widget); + if (o) { return o; } + int cl = 0; + QWidget *cw = widget->parentWidget(); + while (cl < maxLevels && cw) + { + o = qobject_cast (cw); + if (o) { return o; } + cl++; + cw = cw->parentWidget(); + } + return nullptr; + } + + //! Find next COverlayMessagesFrame static COverlayMessagesFrame *nextOverlayMessageFrame(QWidget *widget, int maxLevels = 10); + //! Find next COverlayMessagesTabWidget + static COverlayMessagesTabWidget *nextOverlayMessageTabWidget(QWidget *widget, int maxLevels = 10); + + //! Find next COverlayMessagesWizardPage + static COverlayMessagesWizardPage *nextOverlayMessageWizardPage(QWidget *widget, int maxLevels = 10); + //! Metatype static const QString &swiftJsonDragAndDropMimeType(); diff --git a/src/blackgui/overlaymessages.h b/src/blackgui/overlaymessages.h index f278e8346..eedae3df4 100644 --- a/src/blackgui/overlaymessages.h +++ b/src/blackgui/overlaymessages.h @@ -51,7 +51,7 @@ namespace BlackGui explicit COverlayMessages(const QString &headerText, int w, int h, QWidget *parent); //! Destructor - virtual ~COverlayMessages(); + virtual ~COverlayMessages() override; //! Messages mode void setModeToMessages(bool withKillButton = false); diff --git a/src/blackgui/overlaymessagesframe.cpp b/src/blackgui/overlaymessagesframe.cpp index 65eb05348..50925c16e 100644 --- a/src/blackgui/overlaymessagesframe.cpp +++ b/src/blackgui/overlaymessagesframe.cpp @@ -26,11 +26,14 @@ using namespace BlackMisc::Network; namespace BlackGui { - COverlayMessagesFrame::COverlayMessagesFrame(QWidget *parent) : COverlayMessagesBase(parent) + COverlayMessagesFrame::COverlayMessagesFrame(QWidget *parent, Qt::WindowFlags f) : COverlayMessagesBase(parent, f) { } COverlayMessagesTabWidget::COverlayMessagesTabWidget(QWidget *parent) : COverlayMessagesBase(parent) { } + + COverlayMessagesWizardPage::COverlayMessagesWizardPage(QWidget *parent) : COverlayMessagesBase(parent) + { } } // ns diff --git a/src/blackgui/overlaymessagesframe.h b/src/blackgui/overlaymessagesframe.h index 5a5c9a988..9b76ab66d 100644 --- a/src/blackgui/overlaymessagesframe.h +++ b/src/blackgui/overlaymessagesframe.h @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -31,7 +32,6 @@ class QKeyEvent; class QPaintEvent; -class QWidget; namespace BlackGui { @@ -167,8 +167,9 @@ namespace BlackGui COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with status messages //! Constructor - COverlayMessagesBase(QWidget *parent) : WIDGET(parent) + COverlayMessagesBase(QWidget *parent, Qt::WindowFlags f = Qt::WindowFlags()) : WIDGET(parent) { + this->setWindowFlags(f); const bool isFrameless = CGuiUtility::isMainWindowFrameless(); m_middleFactor = isFrameless ? 1.25 : 1.5; // 2 is middle in normal window } @@ -253,7 +254,7 @@ namespace BlackGui public: //! Constructor - explicit COverlayMessagesFrame(QWidget *parent = nullptr); + explicit COverlayMessagesFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); }; /*! @@ -267,6 +268,19 @@ namespace BlackGui //! Constructor explicit COverlayMessagesTabWidget(QWidget *parent = nullptr); }; + + /*! + * Using this class provides a QWizardPage with the overlay functionality already integrated. + */ + class BLACKGUI_EXPORT COverlayMessagesWizardPage : public COverlayMessagesBase + { + Q_OBJECT + + public: + //! Constructor + explicit COverlayMessagesWizardPage(QWidget *parent = nullptr); + }; + } // ns #endif // guard