diff --git a/src/blackgui/overlaymessages.cpp b/src/blackgui/overlaymessages.cpp index 3d795393e..5d3b6bba5 100644 --- a/src/blackgui/overlaymessages.cpp +++ b/src/blackgui/overlaymessages.cpp @@ -46,6 +46,7 @@ using namespace BlackCore::Context; using namespace BlackGui::Models; using namespace BlackGui::Views; using namespace BlackGui::Settings; +using namespace BlackGui::Components; namespace BlackGui { @@ -246,12 +247,20 @@ namespace BlackGui const bool activatedText = ui->comp_OverlayTextMessage->isActivated(); if (activatedText) { - this->setModeToOverlayTextMessage(); - timeOutMs = -1; // cancel timeout + if (textMessage.isPrivateMessage()) + { + this->showOverlayInlineTextMessage(textMessage.getSenderCallsign()); + } + else + { + this->showOverlayInlineTextMessage(TextMessagesAll); + ui->comp_OverlayTextMessage->showCorrespondingTabForFrequency(textMessage.getFrequency()); + } } else { // message and display + //! @deprecated KB 2019-02 normally using overlay messages is used ui->le_TmFrom->setText(textMessage.getSenderCallsign().asString()); ui->le_TmTo->setText(textMessage.getRecipientCallsign().asString()); ui->le_TmReceived->setText(textMessage.getFormattedUtcTimestampHms()); @@ -260,11 +269,11 @@ namespace BlackGui ui->wi_TmSupervisor->setStyleSheet("background-color: red;"); this->setModeToTextMessage(); + this->display(timeOutMs); } - this->display(timeOutMs); } - void COverlayMessages::showOverlayInlineTextMessage(Components::TextMessageTab tab) + void COverlayMessages::showOverlayInlineTextMessage(TextMessageTab tab) { ui->comp_OverlayTextMessage->setTab(tab); ui->comp_OverlayTextMessage->updateAtcStationsButtons(); @@ -276,7 +285,7 @@ namespace BlackGui void COverlayMessages::showOverlayInlineTextMessage(const CCallsign &callsign) { - this->showOverlayInlineTextMessage(Components::TextMessagesUnicom); + this->showOverlayInlineTextMessage(TextMessagesUnicom); ui->comp_OverlayTextMessage->showCorrespondingTab(callsign); } @@ -322,7 +331,7 @@ namespace BlackGui this->display(timeOutMs); } - void COverlayMessages::showOverlayVariant(const BlackMisc::CVariant &variant, int timeOutMs) + void COverlayMessages::showOverlayVariant(const CVariant &variant, int timeOutMs) { if (variant.canConvert()) { @@ -475,6 +484,11 @@ namespace BlackGui ui->comp_OverlayTextMessage->activate(activate, activate); } + bool COverlayMessages::isTextMessagesActivated() const + { + return ui->comp_OverlayTextMessage->isActivated(); + } + void COverlayMessages::setModeToImage() { ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_Image); diff --git a/src/blackgui/overlaymessages.h b/src/blackgui/overlaymessages.h index 6c89f829f..ce55c420c 100644 --- a/src/blackgui/overlaymessages.h +++ b/src/blackgui/overlaymessages.h @@ -75,6 +75,9 @@ namespace BlackGui //! Active send/receive of text messages void activateTextMessages(bool activate); + //! Are text messages + bool isTextMessagesActivated() const; + //! Display image void setModeToImage(); diff --git a/src/blackgui/overlaymessagesframe.cpp b/src/blackgui/overlaymessagesframe.cpp index d627931bf..58e697027 100644 --- a/src/blackgui/overlaymessagesframe.cpp +++ b/src/blackgui/overlaymessagesframe.cpp @@ -9,6 +9,7 @@ #include "blackgui/overlaymessagesframe.h" #include "blackgui/overlaymessages.h" +#include "dockwidgetinfoarea.h" #include "blackgui/stylesheetutility.h" #include "blackgui/guiutility.h" #include "blackmisc/network/textmessage.h" @@ -29,6 +30,17 @@ namespace BlackGui COverlayMessagesFrame::COverlayMessagesFrame(QWidget *parent, Qt::WindowFlags f) : COverlayMessagesBase(parent, f) { } + COverlayMessagesFrameEnableForDockWidgetInfoArea::COverlayMessagesFrameEnableForDockWidgetInfoArea(QWidget *parent, Qt::WindowFlags f) : + COverlayMessagesFrame(parent, f) + { } + + bool COverlayMessagesFrameEnableForDockWidgetInfoArea::isForwardingOverlayMessages() const + { + if (!this->hasDockWidgetArea()) { return false; } + if (this->isParentDockWidgetFloating()) { return false; } + return true; + } + COverlayMessagesTabWidget::COverlayMessagesTabWidget(QWidget *parent) : COverlayMessagesBase(parent) { } diff --git a/src/blackgui/overlaymessagesframe.h b/src/blackgui/overlaymessagesframe.h index cc67cd2f7..1fb48c5fb 100644 --- a/src/blackgui/overlaymessagesframe.h +++ b/src/blackgui/overlaymessagesframe.h @@ -13,6 +13,7 @@ #define BLACKGUI_OVERLAYMESSAGES_FRAME_H #include "blackgui/components/textmessagecomponenttab.h" +#include "blackgui/enablefordockwidgetinfoarea.h" #include "blackgui/overlaymessages.h" #include "blackgui/guiutility.h" #include "blackgui/blackguiexport.h" @@ -189,7 +190,16 @@ namespace BlackGui //! \copydoc BlackGui::COverlayMessages::showOverlayVariant void showOverlayVariant(const BlackMisc::CVariant &variant, int timeOutMs = -1) { - this->initInnerFrame(); + if (m_overlayMessages->isTextMessagesActivated() && variant.canConvert()) + { + this->initInnerFrame(0.75, 0.75); + if (!this->hasMinimumSize(150, 150)) { return; } + } + else + { + this->initInnerFrame(); + } + m_overlayMessages->showOverlayVariant(variant, timeOutMs); WIDGET::repaint(); } @@ -373,6 +383,34 @@ namespace BlackGui public: //! Constructor explicit COverlayMessagesFrame(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + + signals: + //! Request an text message entry + void requestTextMessageEntryTab(Components::TextMessageTab tab); + + //! Request an text message entry + void requestTextMessageEntryCallsign(const BlackMisc::Aviation::CCallsign &callsign); + + //! Request a text message widget + void requestTextMessageWidget(const BlackMisc::Aviation::CCallsign &callsign); + }; + + /*! + * Using this class provides a QFrame with the overlay and dock widget functionality already integrated. + */ + class BLACKGUI_EXPORT COverlayMessagesFrameEnableForDockWidgetInfoArea : + public COverlayMessagesFrame, + public CEnableForDockWidgetInfoArea + { + Q_OBJECT + + public: + //! Constructor + explicit COverlayMessagesFrameEnableForDockWidgetInfoArea(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + + private: + //! Forward overlay messages + bool isForwardingOverlayMessages() const; }; /*!