mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-07 19:35:32 +08:00
Ref T506, allow to init overlay messages, passivate text messages, improved tab widget selection
This commit is contained in:
committed by
Mat Sutcliffe
parent
419f8c0907
commit
f6ce579f67
@@ -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
|
||||
{
|
||||
if (!tabWidget) { return false; }
|
||||
@@ -601,11 +609,13 @@ namespace BlackGui
|
||||
|
||||
void CTextMessageComponent::onTextMessageReceived(const CTextMessageList &messages)
|
||||
{
|
||||
if (!m_activeReceive) { return; }
|
||||
this->displayTextMessage(messages);
|
||||
}
|
||||
|
||||
void CTextMessageComponent::onTextMessageSent(const CTextMessage &sentMessage)
|
||||
{
|
||||
if (!m_activeSend) { return; }
|
||||
this->displayTextMessage(sentMessage);
|
||||
}
|
||||
|
||||
@@ -644,7 +654,9 @@ namespace BlackGui
|
||||
}
|
||||
if (!w) { return; }
|
||||
ui->tw_TextMessages->setCurrentWidget(w);
|
||||
this->displayMyself();
|
||||
|
||||
// force display
|
||||
if (!m_usedAsOverlayWidget) { this->displayMyself(); }
|
||||
}
|
||||
|
||||
void CTextMessageComponent::fontSizeMinus()
|
||||
|
||||
@@ -87,6 +87,12 @@ namespace BlackGui
|
||||
//! Used as overlay and not dock widget
|
||||
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
|
||||
void setAtcButtonsRowsColumns(int rows, int cols, bool setMaxElements);
|
||||
|
||||
@@ -107,8 +113,10 @@ namespace BlackGui
|
||||
QScopedPointer<Ui::CTextMessageComponent> ui;
|
||||
BlackMisc::CIdentifier m_identifier { "TextMessageComponent", this };
|
||||
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_activeSend = true; //!< ignore sent callback
|
||||
bool m_activeReceive = true; //!< ignore received messages
|
||||
|
||||
//! Enum to widget
|
||||
QWidget *getTabWidget(TextMessageTab tab) const;
|
||||
@@ -119,6 +127,9 @@ namespace BlackGui
|
||||
//! Select given 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)
|
||||
bool isCloseableTab(const QWidget *tabWidget) const;
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <QPointer>
|
||||
|
||||
using namespace BlackMisc;
|
||||
using namespace BlackMisc::Aviation;
|
||||
using namespace BlackMisc::Network;
|
||||
using namespace BlackMisc::Simulation;
|
||||
using namespace BlackCore;
|
||||
@@ -67,6 +68,7 @@ namespace BlackGui
|
||||
ui->comp_OverlayTextMessage->showSettings(false);
|
||||
ui->comp_OverlayTextMessage->showTextMessageEntry(true);
|
||||
ui->comp_OverlayTextMessage->setAsUsedInOverlayMode();
|
||||
ui->comp_OverlayTextMessage->activate(false, false); // per default ignore incoming/outgoing text messages
|
||||
ui->comp_OverlayTextMessage->removeAllMessagesTab();
|
||||
ui->comp_OverlayTextMessage->setAtcButtonsRowsColumns(2, 3, true);
|
||||
ui->comp_OverlayTextMessage->setAtcButtonsBackgroundUpdates(false);
|
||||
@@ -88,9 +90,15 @@ namespace BlackGui
|
||||
void COverlayMessages::init(int w, int h)
|
||||
{
|
||||
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->setAutoFillBackground(true);
|
||||
m_autoCloseTimer.setObjectName(objectName() % ":autoCloseTimer");
|
||||
m_autoCloseTimer.setObjectName(this->objectName() % ":autoCloseTimer");
|
||||
ui->tvp_StatusMessages->setMode(CStatusMessageListModel::Simplified);
|
||||
connect(ui->tb_Close, &QToolButton::released, this, &COverlayMessages::close);
|
||||
connect(&m_autoCloseTimer, &QTimer::timeout, this, &COverlayMessages::close);
|
||||
@@ -188,7 +196,7 @@ namespace BlackGui
|
||||
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 (!sGui || sGui->isShuttingDown()) { return; }
|
||||
@@ -259,6 +267,12 @@ namespace BlackGui
|
||||
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)
|
||||
{
|
||||
this->showOverlayImage(image.toPixmap(), timeOutMs);
|
||||
@@ -442,6 +456,18 @@ namespace BlackGui
|
||||
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()
|
||||
{
|
||||
ui->sw_StatusMessagesComponent->setCurrentWidget(ui->pg_Image);
|
||||
|
||||
@@ -15,9 +15,10 @@
|
||||
#include "blackgui/components/textmessagecomponenttab.h"
|
||||
#include "blackgui/settings/textmessagesettings.h"
|
||||
#include "blackgui/blackguiexport.h"
|
||||
#include "blackmisc/pixmap.h"
|
||||
#include "blackmisc/statusmessage.h"
|
||||
#include "blackmisc/aviation/callsign.h"
|
||||
#include "blackmisc/statusmessagelist.h"
|
||||
#include "blackmisc/statusmessage.h"
|
||||
#include "blackmisc/pixmap.h"
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
#include <QFrame>
|
||||
@@ -32,8 +33,8 @@ class QKeyEvent;
|
||||
class QPaintEvent;
|
||||
class QPixmap;
|
||||
|
||||
namespace BlackMisc { namespace Network { class CTextMessage; } }
|
||||
namespace Ui { class COverlayMessages; }
|
||||
namespace BlackMisc { namespace Network { class CTextMessage; } }
|
||||
namespace BlackGui
|
||||
{
|
||||
/*!
|
||||
@@ -68,9 +69,15 @@ namespace BlackGui
|
||||
//! Progress bar
|
||||
void setModeToProgressBar(bool withKillButton = false);
|
||||
|
||||
//! Single Text message mode
|
||||
//! Single text message mode
|
||||
void setModeToTextMessage();
|
||||
|
||||
//! Inline text message
|
||||
void setModeToOverlayTextMessage();
|
||||
|
||||
//! Active send/receive of text messages
|
||||
void activateTextMessages(bool activate);
|
||||
|
||||
//! Display image
|
||||
void setModeToImage();
|
||||
|
||||
@@ -105,7 +112,10 @@ namespace BlackGui
|
||||
void showOverlayTextMessage(const BlackMisc::Network::CTextMessage &textMessage, int timeOutMs = -1);
|
||||
|
||||
//! 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
|
||||
void showOverlayImage(const BlackMisc::CPixmap &image, int timeOutMs = -1);
|
||||
@@ -161,10 +171,10 @@ namespace BlackGui
|
||||
QScopedPointer<Ui::COverlayMessages> ui;
|
||||
BlackMisc::CSettingReadOnly<Settings::TextMessageSettings> m_messageSettings { this };
|
||||
QString m_header;
|
||||
int m_lastConfirmation = QMessageBox::Cancel;
|
||||
int m_lastConfirmation = QMessageBox::Cancel;
|
||||
bool m_awaitingConfirmation = false;
|
||||
bool m_hasKillButton = false;
|
||||
bool m_forceSmall = false;
|
||||
bool m_hasKillButton = false;
|
||||
bool m_forceSmall = false;
|
||||
QTimer m_autoCloseTimer { this };
|
||||
std::function<void()> m_okLambda; //!< called when confirmed as "OK"
|
||||
QList<std::function<void()>> m_pendingMessageCalls;
|
||||
|
||||
@@ -47,6 +47,27 @@ namespace BlackGui
|
||||
//! Destructor
|
||||
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
|
||||
void showStatusMessagesFrame()
|
||||
{
|
||||
@@ -196,6 +217,14 @@ namespace BlackGui
|
||||
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:
|
||||
COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with status messages
|
||||
|
||||
@@ -214,11 +243,7 @@ namespace BlackGui
|
||||
if (!m_overlayMessages)
|
||||
{
|
||||
// lazy init
|
||||
m_overlayMessages = new COverlayMessages(inner.width(), inner.height(), this);
|
||||
// m_overlayMessages->addShadow();
|
||||
m_overlayMessages->showKillButton(m_showKillButton);
|
||||
m_overlayMessages->setForceSmall(m_forceSmallMsgs);
|
||||
m_overlayMessages->setReducedInfo(m_reducedInfo);
|
||||
this->initOverlayMessages(inner);
|
||||
}
|
||||
|
||||
Q_ASSERT(m_overlayMessages);
|
||||
@@ -229,6 +254,7 @@ namespace BlackGui
|
||||
const int x = middle.x() - w / 2;
|
||||
const int y = qRound(middle.y() - h / m_middleFactor);
|
||||
m_overlayMessages->setGeometry(x, y, w, h);
|
||||
m_overlayMessages->setVisible(true);
|
||||
}
|
||||
|
||||
//! Init a minimal frame (smaller as the normal one)
|
||||
|
||||
Reference in New Issue
Block a user