diff --git a/src/blackgui/components/atcstationcomponent.cpp b/src/blackgui/components/atcstationcomponent.cpp index dc2f3e1b4..e8207efe2 100644 --- a/src/blackgui/components/atcstationcomponent.cpp +++ b/src/blackgui/components/atcstationcomponent.cpp @@ -7,24 +7,25 @@ * contained in the LICENSE file. */ +#include "blackgui/components/atcstationcomponent.h" +#include "blackgui/views/atcstationview.h" +#include "blackgui/views/viewbase.h" +#include "blackgui/models/atcstationlistmodel.h" +#include "blackgui/models/atcstationtreemodel.h" +#include "blackgui/uppercasevalidator.h" +#include "blackgui/guiapplication.h" +#include "blackgui/guiutility.h" +#include "blackgui/dockwidgetinfoarea.h" +#include "blackgui/infoarea.h" #include "blackcore/context/contextnetwork.h" #include "blackcore/context/contextownaircraft.h" #include "blackcore/webdataservices.h" -#include "blackgui/components/atcstationcomponent.h" -#include "blackgui/guiapplication.h" -#include "blackgui/guiutility.h" -#include "blackgui/infoarea.h" -#include "blackgui/uppercasevalidator.h" -#include "blackgui/models/atcstationlistmodel.h" -#include "blackgui/models/atcstationtreemodel.h" -#include "blackgui/views/atcstationview.h" -#include "blackgui/views/viewbase.h" #include "blackmisc/aviation/atcstationlist.h" #include "blackmisc/aviation/informationmessage.h" +#include "blackmisc/weather/metar.h" #include "blackmisc/compare.h" #include "blackmisc/icons.h" #include "blackmisc/logmessage.h" -#include "blackmisc/weather/metar.h" #include "ui_atcstationcomponent.h" #include @@ -57,7 +58,7 @@ namespace BlackGui namespace Components { CAtcStationComponent::CAtcStationComponent(QWidget *parent) : - COverlayMessagesFrame(parent), + QFrame(parent), CIdentifiable(this), ui(new Ui::CAtcStationComponent) { @@ -124,10 +125,13 @@ namespace BlackGui connect(ui->gb_Details, &QGroupBox::toggled, this, &CAtcStationComponent::onDetailsToggled); // runtime based connects - connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationsOnlineDigest, this, &CAtcStationComponent::changedAtcStationsOnline, Qt::QueuedConnection); - connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationsBookedDigest, this, &CAtcStationComponent::changedAtcStationsBooked, Qt::QueuedConnection); - connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationOnlineConnectionStatus, this, &CAtcStationComponent::changedAtcStationOnlineConnectionStatus, Qt::QueuedConnection); - connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CAtcStationComponent::connectionStatusChanged, Qt::QueuedConnection); + if (sGui) + { + connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationsOnlineDigest, this, &CAtcStationComponent::changedAtcStationsOnline, Qt::QueuedConnection); + connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationsBookedDigest, this, &CAtcStationComponent::changedAtcStationsBooked, Qt::QueuedConnection); + connect(sGui->getIContextNetwork(), &IContextNetwork::changedAtcStationOnlineConnectionStatus, this, &CAtcStationComponent::changedAtcStationOnlineConnectionStatus, Qt::QueuedConnection); + connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CAtcStationComponent::connectionStatusChanged, Qt::QueuedConnection); + } // selection ui->tvp_AtcStationsOnline->acceptClickSelection(true); @@ -138,7 +142,7 @@ namespace BlackGui m_stretch.push_back(layout->stretch(1)); // web readers - if (sGui->hasWebDataServices()) + if (sGui && sGui->hasWebDataServices()) { connect(sGui->getWebDataServices(), &CWebDataServices::swiftDbAirportsRead, this, &CAtcStationComponent::airportsRead); this->airportsRead(); @@ -465,7 +469,7 @@ namespace BlackGui void CAtcStationComponent::showOverlayInlineTextMessage() { - COverlayMessagesFrame::showOverlayInlineTextMessage(TextMessagesCom1); + CEnableForDockWidgetInfoArea::showOverlayInlineTextMessage(TextMessagesCom1); } void CAtcStationComponent::onDetailsToggled(bool checked) diff --git a/src/blackgui/components/atcstationcomponent.h b/src/blackgui/components/atcstationcomponent.h index 26c670ab1..cf7cfd300 100644 --- a/src/blackgui/components/atcstationcomponent.h +++ b/src/blackgui/components/atcstationcomponent.h @@ -15,7 +15,6 @@ #include "blackgui/components/enablefordockwidgetinfoarea.h" #include "blackgui/settings/viewupdatesettings.h" #include "blackgui/settings/atcstationssettings.h" -#include "blackgui/overlaymessagesframe.h" #include "blackgui/blackguiexport.h" #include "blackcore/network.h" #include "blackmisc/aviation/atcstation.h" @@ -29,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -39,11 +39,12 @@ namespace BlackMisc { namespace Aviation { class CCallsign; } } namespace BlackGui { class CDockWidgetInfoArea; + namespace Components { //! ATC stations component class BLACKGUI_EXPORT CAtcStationComponent : - public COverlayMessagesFrame, + public QFrame, public CEnableForDockWidgetInfoArea, public BlackMisc::CIdentifiable { diff --git a/src/blackgui/components/cockpitcomponent.cpp b/src/blackgui/components/cockpitcomponent.cpp index 065e7c235..ac770f37f 100644 --- a/src/blackgui/components/cockpitcomponent.cpp +++ b/src/blackgui/components/cockpitcomponent.cpp @@ -122,11 +122,8 @@ namespace BlackGui void CCockpitComponent::mouseDoubleClickEvent(QMouseEvent *event) { - if (event) - { - this->showOverlayInlineTextMessage(TextMessagesAll); - } - COverlayMessagesFrame::mouseDoubleClickEvent(event); + if (event) { this->showOverlayInlineTextMessage(TextMessagesAll); } + QWidget::mouseDoubleClickEvent(event); } void CCockpitComponent::onRequestTextMessageCom1() diff --git a/src/blackgui/components/cockpitcomponent.h b/src/blackgui/components/cockpitcomponent.h index ac98ce84c..6d51663e4 100644 --- a/src/blackgui/components/cockpitcomponent.h +++ b/src/blackgui/components/cockpitcomponent.h @@ -13,9 +13,9 @@ #define BLACKGUI_COMPONENTS_COCKPITCOMPONENT_H #include "blackgui/components/enablefordockwidgetinfoarea.h" -#include "blackgui/overlaymessagesframe.h" #include "blackgui/blackguiexport.h" +#include #include #include #include diff --git a/src/blackgui/components/enablefordockwidgetinfoarea.cpp b/src/blackgui/components/enablefordockwidgetinfoarea.cpp index 6b9c518f1..aae267d2c 100644 --- a/src/blackgui/components/enablefordockwidgetinfoarea.cpp +++ b/src/blackgui/components/enablefordockwidgetinfoarea.cpp @@ -17,7 +17,10 @@ #include #include #include +#include +#include +using namespace BlackMisc::Aviation; using namespace BlackGui; namespace BlackGui @@ -31,6 +34,36 @@ namespace BlackGui m_parentDockableInfoArea = parentInfoArea; } + void CEnableForDockWidgetInfoArea::deferredActivate(QObject *relatedObject, int delayMs) + { + if (!relatedObject) { return; } + QPointer myself(relatedObject); + QTimer::singleShot(delayMs, relatedObject, [ = ] + { + if (myself) { this->activateTextMessages(true); } + }); + } + + void CEnableForDockWidgetInfoArea::initOverlayMessages(QSize inner) + { + if (m_parentDockableInfoArea) { m_parentDockableInfoArea->initOverlayMessages(inner); } + } + + void CEnableForDockWidgetInfoArea::activateTextMessages(bool activate) + { + if (m_parentDockableInfoArea) { m_parentDockableInfoArea->activateTextMessages(activate); } + } + + void CEnableForDockWidgetInfoArea::showOverlayInlineTextMessage(TextMessageTab tab) + { + if (m_parentDockableInfoArea) { m_parentDockableInfoArea->showOverlayInlineTextMessage(tab); } + } + + void CEnableForDockWidgetInfoArea::showOverlayInlineTextMessage(const CCallsign &callsign) + { + if (m_parentDockableInfoArea) { m_parentDockableInfoArea->showOverlayInlineTextMessage(callsign); } + } + bool CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea(CDockWidgetInfoArea *parentDockableWidget) { // sanity check diff --git a/src/blackgui/components/enablefordockwidgetinfoarea.h b/src/blackgui/components/enablefordockwidgetinfoarea.h index 6191423a6..8d991a3f2 100644 --- a/src/blackgui/components/enablefordockwidgetinfoarea.h +++ b/src/blackgui/components/enablefordockwidgetinfoarea.h @@ -12,7 +12,9 @@ #ifndef BLACKGUI_ENABLEFORDOCKWIDGETINFOAREA_H #define BLACKGUI_ENABLEFORDOCKWIDGETINFOAREA_H +#include "blackgui/components/textmessagecomponenttab.h" #include "blackgui/blackguiexport.h" +#include "blackmisc/aviation/callsign.h" #include "blackmisc/connectionguard.h" class QWidget; @@ -50,7 +52,7 @@ namespace BlackGui bool isVisibleWidget() const; //! Main application window if any - BlackGui::CEnableForFramelessWindow *mainApplicationWindow() const; + CEnableForFramelessWindow *mainApplicationWindow() const; //! Main application window widget if any QWidget *mainApplicationWindowWidget() const; @@ -63,12 +65,27 @@ namespace BlackGui //! \remarks Normally the info area will be provided later \sa setParentDockWidgetInfoArea CEnableForDockWidgetInfoArea(CDockWidgetInfoArea *parentInfoArea = nullptr); - // Destructor + //! Destructor virtual ~CEnableForDockWidgetInfoArea() {} + //! Deferred activation, as dockwidget is not directly initalized + void deferredActivate(QObject *relatedObject, int delayMs = 2500); + + //! \copydoc BlackGui::COverlayMessages::initOverlayMessages + void initOverlayMessages(QSize inner = {}); + + //! \copydoc BlackGui::COverlayMessages::showKillButton + void activateTextMessages(bool activate); + + //! \copydoc BlackGui::COverlayMessages::showOverlayImage + void showOverlayInlineTextMessage(Components::TextMessageTab tab); + + //! \copydoc BlackGui::COverlayMessages::showOverlayImage + void showOverlayInlineTextMessage(const BlackMisc::Aviation::CCallsign &callsign); + private: CDockWidgetInfoArea *m_parentDockableInfoArea = nullptr; //!< my parent dockable widget - BlackMisc::CConnectionGuard m_connections; + BlackMisc::CConnectionGuard m_connections; }; } } // namespace diff --git a/src/blackgui/dockwidget.cpp b/src/blackgui/dockwidget.cpp index 441110558..b5a79f2cf 100644 --- a/src/blackgui/dockwidget.cpp +++ b/src/blackgui/dockwidget.cpp @@ -43,7 +43,7 @@ using namespace BlackGui::Menus; namespace BlackGui { CDockWidget::CDockWidget(bool allowStatusBar, QWidget *parent) : - QDockWidget(parent), + COverlayMessagesDockWidget(parent), CEnableForFramelessWindow(CEnableForFramelessWindow::WindowTool, false, "framelessDockWidget", this), m_allowStatusBar(allowStatusBar) { @@ -88,7 +88,7 @@ namespace BlackGui void CDockWidget::setOriginalTitleBar() { if (!m_titleBarWidgetOriginal) { this->initTitleBarWidgets(); } - if (this->titleBarWidget() == m_titleBarWidgetOriginal) return; // on purpose, as I do not know what happens when I call setTitleBar + if (this->titleBarWidget() == m_titleBarWidgetOriginal) { return; } // on purpose, as I do not know what happens when I call setTitleBar this->setTitleBarWidget(m_titleBarWidgetOriginal); } diff --git a/src/blackgui/dockwidget.h b/src/blackgui/dockwidget.h index 5a46ebc72..0339136db 100644 --- a/src/blackgui/dockwidget.h +++ b/src/blackgui/dockwidget.h @@ -12,12 +12,13 @@ #ifndef BLACKGUI_DOCKWIDGET_H #define BLACKGUI_DOCKWIDGET_H -#include "blackgui/blackguiexport.h" +#include "blackgui/overlaymessagesframe.h" #include "blackgui/enableforframelesswindow.h" #include "blackgui/managedstatusbar.h" #include "blackgui/settings/dockwidgetsettings.h" -#include "blackmisc/statusmessage.h" +#include "blackgui/blackguiexport.h" #include "blackmisc/statusmessagelist.h" +#include "blackmisc/statusmessage.h" #include #include @@ -47,7 +48,7 @@ namespace BlackGui //! \sa CDockWidgetInfoArea //! \sa CDockWidgetInfoBar class BLACKGUI_EXPORT CDockWidget : - public QDockWidget, + public COverlayMessagesDockWidget, public CEnableForFramelessWindow { Q_OBJECT diff --git a/src/blackgui/overlaymessagesframe.cpp b/src/blackgui/overlaymessagesframe.cpp index 50925c16e..50982ecca 100644 --- a/src/blackgui/overlaymessagesframe.cpp +++ b/src/blackgui/overlaymessagesframe.cpp @@ -34,6 +34,10 @@ namespace BlackGui COverlayMessagesWizardPage::COverlayMessagesWizardPage(QWidget *parent) : COverlayMessagesBase(parent) { } + + COverlayMessagesDockWidget::COverlayMessagesDockWidget(QWidget *parent) : COverlayMessagesBase(parent) + { } + } // ns diff --git a/src/blackgui/overlaymessagesframe.h b/src/blackgui/overlaymessagesframe.h index f33f9ff2b..aa2ab91c3 100644 --- a/src/blackgui/overlaymessagesframe.h +++ b/src/blackgui/overlaymessagesframe.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -362,6 +363,18 @@ namespace BlackGui explicit COverlayMessagesWizardPage(QWidget *parent = nullptr); }; + /*! + * Using this class provides a QDockWidget with the overlay functionality already integrated. + */ + class BLACKGUI_EXPORT COverlayMessagesDockWidget : public COverlayMessagesBase + { + Q_OBJECT + + public: + //! Constructor + explicit COverlayMessagesDockWidget(QWidget *parent = nullptr); + }; + } // ns #endif // guard