Ref T506, allow to init overlay messages, passivate text messages, improved tab widget selection

This commit is contained in:
Klaus Basan
2019-01-06 11:19:43 +01:00
committed by Mat Sutcliffe
parent 419f8c0907
commit f6ce579f67
5 changed files with 102 additions and 17 deletions

View File

@@ -152,6 +152,14 @@ namespace BlackGui
} }
} }
void CTextMessageComponent::selectTabWidget(const CCallsign &callsign, bool addIfNotExisting)
{
QWidget *tab = this->findTextMessageTabByCallsign(callsign);
if (!tab && addIfNotExisting) { tab = this->addNewTextMessageTab(callsign); }
if (!tab) { return; }
ui->tw_TextMessages->setCurrentWidget(tab);
}
bool CTextMessageComponent::isCloseableTab(const QWidget *tabWidget) const bool CTextMessageComponent::isCloseableTab(const QWidget *tabWidget) const
{ {
if (!tabWidget) { return false; } if (!tabWidget) { return false; }
@@ -601,11 +609,13 @@ namespace BlackGui
void CTextMessageComponent::onTextMessageReceived(const CTextMessageList &messages) void CTextMessageComponent::onTextMessageReceived(const CTextMessageList &messages)
{ {
if (!m_activeReceive) { return; }
this->displayTextMessage(messages); this->displayTextMessage(messages);
} }
void CTextMessageComponent::onTextMessageSent(const CTextMessage &sentMessage) void CTextMessageComponent::onTextMessageSent(const CTextMessage &sentMessage)
{ {
if (!m_activeSend) { return; }
this->displayTextMessage(sentMessage); this->displayTextMessage(sentMessage);
} }
@@ -644,7 +654,9 @@ namespace BlackGui
} }
if (!w) { return; } if (!w) { return; }
ui->tw_TextMessages->setCurrentWidget(w); ui->tw_TextMessages->setCurrentWidget(w);
this->displayMyself();
// force display
if (!m_usedAsOverlayWidget) { this->displayMyself(); }
} }
void CTextMessageComponent::fontSizeMinus() void CTextMessageComponent::fontSizeMinus()

View File

@@ -87,6 +87,12 @@ namespace BlackGui
//! Used as overlay and not dock widget //! Used as overlay and not dock widget
void setAsUsedInOverlayMode() { m_usedAsOverlayWidget = true; } void setAsUsedInOverlayMode() { m_usedAsOverlayWidget = true; }
//! Ignore incoming send/receive signals
void activate(bool send, bool receive) { m_activeSend = send; m_activeReceive = receive; }
//! Text activated
bool isActivated() const { return m_activeSend && m_activeReceive; }
//! Rows/columns //! Rows/columns
void setAtcButtonsRowsColumns(int rows, int cols, bool setMaxElements); void setAtcButtonsRowsColumns(int rows, int cols, bool setMaxElements);
@@ -109,6 +115,8 @@ namespace BlackGui
BlackMisc::CSetting<Settings::TextMessageSettings> m_messageSettings { this, &CTextMessageComponent::onSettingsChanged }; BlackMisc::CSetting<Settings::TextMessageSettings> m_messageSettings { this, &CTextMessageComponent::onSettingsChanged };
BlackMisc::CSetting<BlackMisc::Audio::TSettings> m_audioSettings { this }; BlackMisc::CSetting<BlackMisc::Audio::TSettings> m_audioSettings { this };
bool m_usedAsOverlayWidget = false; //!< disables dockwidget parts if used as overlay widget bool m_usedAsOverlayWidget = false; //!< disables dockwidget parts if used as overlay widget
bool m_activeSend = true; //!< ignore sent callback
bool m_activeReceive = true; //!< ignore received messages
//! Enum to widget //! Enum to widget
QWidget *getTabWidget(TextMessageTab tab) const; QWidget *getTabWidget(TextMessageTab tab) const;
@@ -119,6 +127,9 @@ namespace BlackGui
//! Select given tab //! Select given tab
void selectTabWidget(TextMessageTab tab); void selectTabWidget(TextMessageTab tab);
//! Select tab by callsign (for private messages)
void selectTabWidget(const BlackMisc::Aviation::CCallsign &callsign, bool addIfNotExisting);
//! Is that a closeable tab (one the user can close) //! Is that a closeable tab (one the user can close)
bool isCloseableTab(const QWidget *tabWidget) const; bool isCloseableTab(const QWidget *tabWidget) const;

View File

@@ -38,6 +38,7 @@
#include <QPointer> #include <QPointer>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network; using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
using namespace BlackCore; using namespace BlackCore;
@@ -67,6 +68,7 @@ namespace BlackGui
ui->comp_OverlayTextMessage->showSettings(false); ui->comp_OverlayTextMessage->showSettings(false);
ui->comp_OverlayTextMessage->showTextMessageEntry(true); ui->comp_OverlayTextMessage->showTextMessageEntry(true);
ui->comp_OverlayTextMessage->setAsUsedInOverlayMode(); ui->comp_OverlayTextMessage->setAsUsedInOverlayMode();
ui->comp_OverlayTextMessage->activate(false, false); // per default ignore incoming/outgoing text messages
ui->comp_OverlayTextMessage->removeAllMessagesTab(); ui->comp_OverlayTextMessage->removeAllMessagesTab();
ui->comp_OverlayTextMessage->setAtcButtonsRowsColumns(2, 3, true); ui->comp_OverlayTextMessage->setAtcButtonsRowsColumns(2, 3, true);
ui->comp_OverlayTextMessage->setAtcButtonsBackgroundUpdates(false); ui->comp_OverlayTextMessage->setAtcButtonsBackgroundUpdates(false);
@@ -88,9 +90,15 @@ namespace BlackGui
void COverlayMessages::init(int w, int h) void COverlayMessages::init(int w, int h)
{ {
ui->setupUi(this); ui->setupUi(this);
if (this->parent() && !this->parent()->objectName().isEmpty())
{
const QString n("Overlay messages for " + this->parent()->objectName());
this->setObjectName(n);
}
this->resize(w, h); this->resize(w, h);
this->setAutoFillBackground(true); this->setAutoFillBackground(true);
m_autoCloseTimer.setObjectName(objectName() % ":autoCloseTimer"); m_autoCloseTimer.setObjectName(this->objectName() % ":autoCloseTimer");
ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified); ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified);
connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close); connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close);
connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close); connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close);
@@ -188,7 +196,7 @@ namespace BlackGui
this->display(timeOutMs); this->display(timeOutMs);
} }
void COverlayMessages::showOverlayMessage(const BlackMisc::CStatusMessage &message, int timeOutMs) void COverlayMessages::showOverlayMessage(const CStatusMessage &message, int timeOutMs)
{ {
if (message.isEmpty()) { return; } if (message.isEmpty()) { return; }
if (!sGui || sGui->isShuttingDown()) { return; } if (!sGui || sGui->isShuttingDown()) { return; }
@@ -259,6 +267,12 @@ namespace BlackGui
ui->comp_OverlayTextMessage->focusTextEntry(); ui->comp_OverlayTextMessage->focusTextEntry();
} }
void COverlayMessages::showOverlayInlineTextMessage(const CCallsign &callsign)
{
this->showOverlayInlineTextMessage(Components::TextMessagesUnicom);
ui->comp_OverlayTextMessage->showCorrespondingTab(callsign);
}
void COverlayMessages::showOverlayImage(const CPixmap &image, int timeOutMs) void COverlayMessages::showOverlayImage(const CPixmap &image, int timeOutMs)
{ {
this->showOverlayImage(image.toPixmap(), timeOutMs); this->showOverlayImage(image.toPixmap(), timeOutMs);
@@ -442,6 +456,18 @@ namespace BlackGui
this->showKill(false); this->showKill(false);
} }
void COverlayMessages::setModeToOverlayTextMessage()
{
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_OverlayTextMessage);
this->setHeader("Text message");
this->showKill(false);
}
void COverlayMessages::activateTextMessages(bool activate)
{
ui->comp_OverlayTextMessage->activate(activate, activate);
}
void COverlayMessages::setModeToImage() void COverlayMessages::setModeToImage()
{ {
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_Image); ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_Image);

View File

@@ -15,9 +15,10 @@
#include "blackgui/components/textmessagecomponenttab.h" #include "blackgui/components/textmessagecomponenttab.h"
#include "blackgui/settings/textmessagesettings.h" #include "blackgui/settings/textmessagesettings.h"
#include "blackgui/blackguiexport.h" #include "blackgui/blackguiexport.h"
#include "blackmisc/pixmap.h" #include "blackmisc/aviation/callsign.h"
#include "blackmisc/statusmessage.h"
#include "blackmisc/statusmessagelist.h" #include "blackmisc/statusmessagelist.h"
#include "blackmisc/statusmessage.h"
#include "blackmisc/pixmap.h"
#include "blackmisc/variant.h" #include "blackmisc/variant.h"
#include <QFrame> #include <QFrame>
@@ -32,8 +33,8 @@ class QKeyEvent;
class QPaintEvent; class QPaintEvent;
class QPixmap; class QPixmap;
namespace BlackMisc { namespace Network { class CTextMessage; } }
namespace Ui { class COverlayMessages; } namespace Ui { class COverlayMessages; }
namespace BlackMisc { namespace Network { class CTextMessage; } }
namespace BlackGui namespace BlackGui
{ {
/*! /*!
@@ -68,9 +69,15 @@ namespace BlackGui
//! Progress bar //! Progress bar
void setModeToProgressBar(bool withKillButton = false); void setModeToProgressBar(bool withKillButton = false);
//! Single Text message mode //! Single text message mode
void setModeToTextMessage(); void setModeToTextMessage();
//! Inline text message
void setModeToOverlayTextMessage();
//! Active send/receive of text messages
void activateTextMessages(bool activate);
//! Display image //! Display image
void setModeToImage(); void setModeToImage();
@@ -105,7 +112,10 @@ namespace BlackGui
void showOverlayTextMessage(const BlackMisc::Network::CTextMessage &textMessage, int timeOutMs = -1); void showOverlayTextMessage(const BlackMisc::Network::CTextMessage &textMessage, int timeOutMs = -1);
//! Inline text message //! Inline text message
void showOverlayInlineTextMessage(BlackGui::Components::TextMessageTab tab); void showOverlayInlineTextMessage(Components::TextMessageTab tab);
//! Inline text message
void showOverlayInlineTextMessage(const BlackMisc::Aviation::CCallsign &callsign);
//! Image //! Image
void showOverlayImage(const BlackMisc::CPixmap &image, int timeOutMs = -1); void showOverlayImage(const BlackMisc::CPixmap &image, int timeOutMs = -1);

View File

@@ -47,6 +47,27 @@ namespace BlackGui
//! Destructor //! Destructor
virtual ~COverlayMessagesBase() override { } virtual ~COverlayMessagesBase() override { }
//! Init, normally we use lazy init, but by calling init explicitly we can force initalization
//! \remark usefule for text messages, as history will be already available
void initOverlayMessages(QSize inner = {})
{
if (m_overlayMessages) { return; }
if (inner.isNull()) { inner = this->innerFrameSize(); }
m_overlayMessages = new COverlayMessages(inner.width(), inner.height(), this);
m_overlayMessages->hide();
m_overlayMessages->showKillButton(m_showKillButton);
m_overlayMessages->setForceSmall(m_forceSmallMsgs);
m_overlayMessages->setReducedInfo(m_reducedInfo);
}
//! \copydoc BlackGui::COverlayMessages::activateTextMessages
void activateTextMessages(bool activate)
{
this->initOverlayMessages();
m_overlayMessages->activateTextMessages(activate);
}
//! Show the inner frame //! Show the inner frame
void showStatusMessagesFrame() void showStatusMessagesFrame()
{ {
@@ -196,6 +217,14 @@ namespace BlackGui
WIDGET::repaint(); WIDGET::repaint();
} }
//! \copydoc BlackGui::COverlayMessages::showOverlayImage
void showOverlayInlineTextMessage(const BlackMisc::Aviation::CCallsign &callsign)
{
this->initInnerFrame(0.75, 0.75);
m_overlayMessages->showOverlayInlineTextMessage(callsign);
WIDGET::repaint();
}
protected: protected:
COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with status messages COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with status messages
@@ -214,11 +243,7 @@ namespace BlackGui
if (!m_overlayMessages) if (!m_overlayMessages)
{ {
// lazy init // lazy init
m_overlayMessages = new COverlayMessages(inner.width(), inner.height(), this); this->initOverlayMessages(inner);
// m_overlayMessages->addShadow();
m_overlayMessages->showKillButton(m_showKillButton);
m_overlayMessages->setForceSmall(m_forceSmallMsgs);
m_overlayMessages->setReducedInfo(m_reducedInfo);
} }
Q_ASSERT(m_overlayMessages); Q_ASSERT(m_overlayMessages);
@@ -229,6 +254,7 @@ namespace BlackGui
const int x = middle.x() - w / 2; const int x = middle.x() - w / 2;
const int y = qRound(middle.y() - h / m_middleFactor); const int y = qRound(middle.y() - h / m_middleFactor);
m_overlayMessages->setGeometry(x, y, w, h); m_overlayMessages->setGeometry(x, y, w, h);
m_overlayMessages->setVisible(true);
} }
//! Init a minimal frame (smaller as the normal one) //! Init a minimal frame (smaller as the normal one)