Ref T384, text message component "self connecting" to contexts.

Also allow to remove "all messages" tab
This commit is contained in:
Klaus Basan
2018-10-03 02:21:03 +02:00
parent 792d2ced30
commit d556383090
5 changed files with 59 additions and 32 deletions

View File

@@ -65,16 +65,14 @@ namespace BlackGui
{ {
ui->setupUi(this); ui->setupUi(this);
ui->tw_TextMessages->setCurrentIndex(0); ui->tw_TextMessages->setCurrentIndex(0);
ui->le_textMessages->setVisible(false); ui->lep_textMessages->setVisible(false);
ui->tvp_TextMessagesAll->setResizeMode(CTextMessageView::ResizingAuto); ui->tvp_TextMessagesAll->setResizeMode(CTextMessageView::ResizingAuto);
// le_textMessages is the own line edit // lep_textMessages is the own line edit
bool c = connect(ui->le_textMessages, &QLineEdit::returnPressed, this, &CTextMessageComponent::textMessageEntered); bool c = connect(ui->lep_textMessages, &CLineEditHistory::returnPressed, this, &CTextMessageComponent::textMessageEntered, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(ui->gb_Settings, &QGroupBox::toggled, this, &CTextMessageComponent::onSettingsChecked); c = connect(ui->gb_Settings, &QGroupBox::toggled, this, &CTextMessageComponent::onSettingsChecked);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sGui->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraftCockpit, this, &CTextMessageComponent::onChangedAircraftCockpit);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
// style sheet // style sheet
c = connect(sGui, &CGuiApplication::styleSheetsChanged, this, &CTextMessageComponent::onStyleSheetChanged, Qt::QueuedConnection); c = connect(sGui, &CGuiApplication::styleSheetsChanged, this, &CTextMessageComponent::onStyleSheetChanged, Qt::QueuedConnection);
@@ -82,20 +80,27 @@ namespace BlackGui
c = connect(ui->comp_SettingsStyle, &CSettingsTextMessageStyle::changed, this, &CTextMessageComponent::updateSettings, Qt::QueuedConnection); c = connect(ui->comp_SettingsStyle, &CSettingsTextMessageStyle::changed, this, &CTextMessageComponent::updateSettings, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
if (sGui && sGui->getCoreFacade()) if (sGui && sGui->getCoreFacade() && sGui->getIContextNetwork() && sGui->getIContextOwnAircraft())
{ {
c = connect(this, &CTextMessageComponent::commandEntered, sGui->getCoreFacade(), &CCoreFacade::parseCommandLine); c = connect(this, &CTextMessageComponent::commandEntered, sGui->getCoreFacade(), &CCoreFacade::parseCommandLine);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sGui->getIContextNetwork(), &IContextNetwork::textMessagesReceived, this, &CTextMessageComponent::onTextMessageReceived, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sGui->getIContextNetwork(), &IContextNetwork::textMessageSent, this, &CTextMessageComponent::onTextMessageSent, Qt::QueuedConnection);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
c = connect(sGui->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraftCockpit, this, &CTextMessageComponent::onChangedAircraftCockpit);
Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect");
} }
Q_UNUSED(c); Q_UNUSED(c);
// init by settings // init by settings
QPointer<CTextMessageComponent> myself(this); const QPointer<CTextMessageComponent> myself(this);
QTimer::singleShot(250, this, [ = ] QTimer::singleShot(2000, this, [ = ]
{ {
// init decoupled when sub components are fully init // init decoupled when sub components are fully init
if (!myself) { return; } if (!myself) { return; }
this->onSettingsChanged(); this->onSettingsChanged();
this->onChangedAircraftCockpit();
}); });
} }
@@ -143,7 +148,7 @@ namespace BlackGui
void CTextMessageComponent::displayTextMessage(const CTextMessageList &messages) void CTextMessageComponent::displayTextMessage(const CTextMessageList &messages)
{ {
if (messages.isEmpty()) return; if (messages.isEmpty()) { return; }
const CSimulatedAircraft ownAircraft(this->getOwnAircraft()); const CSimulatedAircraft ownAircraft(this->getOwnAircraft());
const CTextMessageSettings msgSettings(m_messageSettings.getThreadLocal()); const CTextMessageSettings msgSettings(m_messageSettings.getThreadLocal());
@@ -152,7 +157,7 @@ namespace BlackGui
bool relevantForMe = false; bool relevantForMe = false;
// SELCAL // SELCAL
if (message.isSelcalMessage() && ownAircraft.isSelcalSelected(message.getSelcalCode())) if (!m_usedAsOverlayWidget && message.isSelcalMessage() && ownAircraft.isSelcalSelected(message.getSelcalCode()))
{ {
// this is SELCAL for me // this is SELCAL for me
if (sGui && sGui->getIContextAudio()) if (sGui && sGui->getIContextAudio())
@@ -197,7 +202,7 @@ namespace BlackGui
} }
// message for me? right frequency? otherwise quit // message for me? right frequency? otherwise quit
if (relevantForMe || message.isServerMessage()) if (this->hasAllMessagesTab() && (relevantForMe || message.isServerMessage()))
{ {
ui->tvp_TextMessagesAll->insert(message); ui->tvp_TextMessagesAll->insert(message);
} }
@@ -375,7 +380,7 @@ namespace BlackGui
textEdit->insertTextMessage(textMessage); textEdit->insertTextMessage(textMessage);
// sound // sound
if (sGui && sGui->getIContextAudio()) if (!m_usedAsOverlayWidget && sGui && sGui->getIContextAudio())
{ {
sGui->getIContextAudio()->playNotification(CNotificationSounds::NotificationTextMessagePrivate, true); sGui->getIContextAudio()->playNotification(CNotificationSounds::NotificationTextMessagePrivate, true);
} }
@@ -383,7 +388,7 @@ namespace BlackGui
CSimulatedAircraft CTextMessageComponent::getOwnAircraft() const CSimulatedAircraft CTextMessageComponent::getOwnAircraft() const
{ {
Q_ASSERT(sGui && sGui->getIContextOwnAircraft()); if (!sGui || !sGui->getIContextOwnAircraft()) { return CSimulatedAircraft(); }
return sGui->getIContextOwnAircraft()->getOwnAircraft(); return sGui->getIContextOwnAircraft()->getOwnAircraft();
} }
@@ -447,17 +452,19 @@ namespace BlackGui
{ {
// own input field if floating window // own input field if floating window
Q_UNUSED(widget); Q_UNUSED(widget);
ui->le_textMessages->setVisible(topLevel); ui->lep_textMessages->setVisible(topLevel);
} }
void CTextMessageComponent::textMessageEntered() void CTextMessageComponent::textMessageEntered()
{ {
if (!ui->le_textMessages->isVisible()) { return; } if (!ui->lep_textMessages->isVisible()) { return; }
if (!this->isVisible()) { return; } if (!this->isVisible()) { return; }
const QString cl(ui->le_textMessages->text().trimmed().simplified()); const QString cl(ui->lep_textMessages->getLastEnteredLineFormatted());
ui->le_textMessages->clear(); if (!cl.isEmpty())
this->handleEnteredTextMessage(cl); {
this->handleEnteredTextMessage(cl);
}
} }
bool CTextMessageComponent::isVisibleWidgetHack() const bool CTextMessageComponent::isVisibleWidgetHack() const
@@ -594,7 +601,20 @@ namespace BlackGui
void CTextMessageComponent::setTab(TextMessageTab tab) void CTextMessageComponent::setTab(TextMessageTab tab)
{ {
ui->tw_TextMessages->setCurrentIndex(tab);; // set via widget, as ALL can be removed
switch (tab)
{
case TextMessagesAll : ui->tw_TextMessages->setCurrentWidget(ui->tb_TextMessagesAll); break;
case TextMessagesCom1: ui->tw_TextMessages->setCurrentWidget(ui->tb_TextMessagesCOM1); break;
case TextMessagesCom2: ui->tw_TextMessages->setCurrentWidget(ui->tb_TextMessagesCOM2); break;
case TextMessagesUnicom: ui->tw_TextMessages->setCurrentWidget(ui->tb_TextMessagesUnicom); break;
default: break;
}
}
bool CTextMessageComponent::hasAllMessagesTab() const
{
return ui->tw_TextMessages->widget(0) == ui->tb_TextMessagesAll;
} }
void CTextMessageComponent::showSettings(bool show) void CTextMessageComponent::showSettings(bool show)
@@ -604,8 +624,12 @@ namespace BlackGui
void CTextMessageComponent::showTextMessageEntry(bool show) void CTextMessageComponent::showTextMessageEntry(bool show)
{ {
ui->le_textMessages->setVisible(show); ui->lep_textMessages->setVisible(show);
} }
void CTextMessageComponent::removeAllMessagesTab()
{
ui->tw_TextMessages->removeTab(0);
}
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -50,12 +50,6 @@ namespace BlackGui
//! \copydoc CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea //! \copydoc CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea
virtual bool setParentDockWidgetInfoArea(CDockWidgetInfoArea *parentDockableWidget) override; virtual bool setParentDockWidgetInfoArea(CDockWidgetInfoArea *parentDockableWidget) override;
//! Text messages received
void onTextMessageReceived(const BlackMisc::Network::CTextMessageList &messages);
//! Text messages sent
void onTextMessageSent(const BlackMisc::Network::CTextMessage &sentMessage);
//! Used to allow direct input from global command line when visible //! Used to allow direct input from global command line when visible
//! \remark takes the messages, turns it into a ".msg" command, and emits it //! \remark takes the messages, turns it into a ".msg" command, and emits it
bool handleGlobalCommandLineText(const QString &commandLine, const BlackMisc::CIdentifier &originator); bool handleGlobalCommandLineText(const QString &commandLine, const BlackMisc::CIdentifier &originator);
@@ -71,12 +65,18 @@ namespace BlackGui
//! Set tab //! Set tab
void setTab(TextMessageTab tab); void setTab(TextMessageTab tab);
//! Has an all tab
bool hasAllMessagesTab() const;
//! Show the settings //! Show the settings
void showSettings(bool show); void showSettings(bool show);
//! Show an text entry field //! Show an text entry field
void showTextMessageEntry(bool show); void showTextMessageEntry(bool show);
//! Remove the all tab, the operation cannot be undone
void removeAllMessagesTab();
//! Used as overlay and not dock widget //! Used as overlay and not dock widget
void setAsUsedInOverlayMode() { m_usedAsOverlayWidget = true; } void setAsUsedInOverlayMode() { m_usedAsOverlayWidget = true; }
@@ -142,6 +142,12 @@ namespace BlackGui
//! Handle a text message entered //! Handle a text message entered
void handleEnteredTextMessage(const QString &textMessage); void handleEnteredTextMessage(const QString &textMessage);
//! Text messages received
void onTextMessageReceived(const BlackMisc::Network::CTextMessageList &messages);
//! Text messages sent
void onTextMessageSent(const BlackMisc::Network::CTextMessage &sentMessage);
//! Cockpit values changed, used to updated some components //! Cockpit values changed, used to updated some components
void onChangedAircraftCockpit(); void onChangedAircraftCockpit();

View File

@@ -269,7 +269,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="BlackGui::CLineEditHistory" name="le_textMessages"> <widget class="BlackGui::CLineEditHistory" name="lep_textMessages">
<property name="toolTip"> <property name="toolTip">
<string>command line (e.g. &quot;.com1&quot;, &quot;.x&quot;, &quot;.msg com1&quot;)</string> <string>command line (e.g. &quot;.com1&quot;, &quot;.x&quot;, &quot;.msg com1&quot;)</string>
</property> </property>
@@ -313,7 +313,7 @@
<tabstop>tw_TextMessages</tabstop> <tabstop>tw_TextMessages</tabstop>
<tabstop>tvp_TextMessagesAll</tabstop> <tabstop>tvp_TextMessagesAll</tabstop>
<tabstop>gb_Settings</tabstop> <tabstop>gb_Settings</tabstop>
<tabstop>le_textMessages</tabstop> <tabstop>lep_textMessages</tabstop>
<tabstop>tep_TextMessagesCOM1</tabstop> <tabstop>tep_TextMessagesCOM1</tabstop>
<tabstop>tep_TextMessagesCOM2</tabstop> <tabstop>tep_TextMessagesCOM2</tabstop>
<tabstop>tep_TextMessagesUnicom</tabstop> <tabstop>tep_TextMessagesUnicom</tabstop>

View File

@@ -67,6 +67,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->removeAllMessagesTab();
this->setDefaultConfirmationButton(QMessageBox::Cancel); this->setDefaultConfirmationButton(QMessageBox::Cancel);
} }

View File

@@ -129,10 +129,6 @@ void SwiftGuiStd::init()
Q_ASSERT(s); Q_ASSERT(s);
s = connect(sGui->getIContextNetwork(), &IContextNetwork::kicked, this, &SwiftGuiStd::onKickedFromNetwork, Qt::QueuedConnection); s = connect(sGui->getIContextNetwork(), &IContextNetwork::kicked, this, &SwiftGuiStd::onKickedFromNetwork, Qt::QueuedConnection);
Q_ASSERT(s); Q_ASSERT(s);
s = connect(sGui->getIContextNetwork(), &IContextNetwork::textMessagesReceived, ui->comp_MainInfoArea->getTextMessageComponent(), &CTextMessageComponent::onTextMessageReceived, Qt::QueuedConnection);
Q_ASSERT(s);
s = connect(sGui->getIContextNetwork(), &IContextNetwork::textMessageSent, ui->comp_MainInfoArea->getTextMessageComponent(), &CTextMessageComponent::onTextMessageSent, Qt::QueuedConnection);
Q_ASSERT(s);
s = connect(sGui->getIContextSimulator(), &IContextSimulator::requestUiConsoleMessage, this, [ = ](const QString & logMsg, bool clear) s = connect(sGui->getIContextSimulator(), &IContextSimulator::requestUiConsoleMessage, this, [ = ](const QString & logMsg, bool clear)
{ {
if (logMsg.isEmpty()) { return; } if (logMsg.isEmpty()) { return; }