diff --git a/src/blackgui/components/textmessagecomponent.cpp b/src/blackgui/components/textmessagecomponent.cpp index 7fd48af72..5e2d8047d 100644 --- a/src/blackgui/components/textmessagecomponent.cpp +++ b/src/blackgui/components/textmessagecomponent.cpp @@ -65,16 +65,14 @@ namespace BlackGui { ui->setupUi(this); ui->tw_TextMessages->setCurrentIndex(0); - ui->le_textMessages->setVisible(false); + ui->lep_textMessages->setVisible(false); ui->tvp_TextMessagesAll->setResizeMode(CTextMessageView::ResizingAuto); - // le_textMessages is the own line edit - bool c = connect(ui->le_textMessages, &QLineEdit::returnPressed, this, &CTextMessageComponent::textMessageEntered); + // lep_textMessages is the own line edit + bool c = connect(ui->lep_textMessages, &CLineEditHistory::returnPressed, this, &CTextMessageComponent::textMessageEntered, Qt::QueuedConnection); Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); c = connect(ui->gb_Settings, &QGroupBox::toggled, this, &CTextMessageComponent::onSettingsChecked); 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 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); 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); 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); // init by settings - QPointer myself(this); - QTimer::singleShot(250, this, [ = ] + const QPointer myself(this); + QTimer::singleShot(2000, this, [ = ] { // init decoupled when sub components are fully init if (!myself) { return; } this->onSettingsChanged(); + this->onChangedAircraftCockpit(); }); } @@ -143,7 +148,7 @@ namespace BlackGui void CTextMessageComponent::displayTextMessage(const CTextMessageList &messages) { - if (messages.isEmpty()) return; + if (messages.isEmpty()) { return; } const CSimulatedAircraft ownAircraft(this->getOwnAircraft()); const CTextMessageSettings msgSettings(m_messageSettings.getThreadLocal()); @@ -152,7 +157,7 @@ namespace BlackGui bool relevantForMe = false; // SELCAL - if (message.isSelcalMessage() && ownAircraft.isSelcalSelected(message.getSelcalCode())) + if (!m_usedAsOverlayWidget && message.isSelcalMessage() && ownAircraft.isSelcalSelected(message.getSelcalCode())) { // this is SELCAL for me if (sGui && sGui->getIContextAudio()) @@ -197,7 +202,7 @@ namespace BlackGui } // message for me? right frequency? otherwise quit - if (relevantForMe || message.isServerMessage()) + if (this->hasAllMessagesTab() && (relevantForMe || message.isServerMessage())) { ui->tvp_TextMessagesAll->insert(message); } @@ -375,7 +380,7 @@ namespace BlackGui textEdit->insertTextMessage(textMessage); // sound - if (sGui && sGui->getIContextAudio()) + if (!m_usedAsOverlayWidget && sGui && sGui->getIContextAudio()) { sGui->getIContextAudio()->playNotification(CNotificationSounds::NotificationTextMessagePrivate, true); } @@ -383,7 +388,7 @@ namespace BlackGui CSimulatedAircraft CTextMessageComponent::getOwnAircraft() const { - Q_ASSERT(sGui && sGui->getIContextOwnAircraft()); + if (!sGui || !sGui->getIContextOwnAircraft()) { return CSimulatedAircraft(); } return sGui->getIContextOwnAircraft()->getOwnAircraft(); } @@ -447,17 +452,19 @@ namespace BlackGui { // own input field if floating window Q_UNUSED(widget); - ui->le_textMessages->setVisible(topLevel); + ui->lep_textMessages->setVisible(topLevel); } void CTextMessageComponent::textMessageEntered() { - if (!ui->le_textMessages->isVisible()) { return; } + if (!ui->lep_textMessages->isVisible()) { return; } if (!this->isVisible()) { return; } - const QString cl(ui->le_textMessages->text().trimmed().simplified()); - ui->le_textMessages->clear(); - this->handleEnteredTextMessage(cl); + const QString cl(ui->lep_textMessages->getLastEnteredLineFormatted()); + if (!cl.isEmpty()) + { + this->handleEnteredTextMessage(cl); + } } bool CTextMessageComponent::isVisibleWidgetHack() const @@ -594,7 +601,20 @@ namespace BlackGui 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) @@ -604,8 +624,12 @@ namespace BlackGui 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 diff --git a/src/blackgui/components/textmessagecomponent.h b/src/blackgui/components/textmessagecomponent.h index 17e5bd957..30912fbb4 100644 --- a/src/blackgui/components/textmessagecomponent.h +++ b/src/blackgui/components/textmessagecomponent.h @@ -50,12 +50,6 @@ namespace BlackGui //! \copydoc CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea 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 //! \remark takes the messages, turns it into a ".msg" command, and emits it bool handleGlobalCommandLineText(const QString &commandLine, const BlackMisc::CIdentifier &originator); @@ -71,12 +65,18 @@ namespace BlackGui //! Set tab void setTab(TextMessageTab tab); + //! Has an all tab + bool hasAllMessagesTab() const; + //! Show the settings void showSettings(bool show); //! Show an text entry field void showTextMessageEntry(bool show); + //! Remove the all tab, the operation cannot be undone + void removeAllMessagesTab(); + //! Used as overlay and not dock widget void setAsUsedInOverlayMode() { m_usedAsOverlayWidget = true; } @@ -142,6 +142,12 @@ namespace BlackGui //! Handle a text message entered 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 void onChangedAircraftCockpit(); diff --git a/src/blackgui/components/textmessagecomponent.ui b/src/blackgui/components/textmessagecomponent.ui index 71a35c857..ebd048a09 100644 --- a/src/blackgui/components/textmessagecomponent.ui +++ b/src/blackgui/components/textmessagecomponent.ui @@ -269,7 +269,7 @@ - + command line (e.g. ".com1", ".x", ".msg com1") @@ -313,7 +313,7 @@ tw_TextMessages tvp_TextMessagesAll gb_Settings - le_textMessages + lep_textMessages tep_TextMessagesCOM1 tep_TextMessagesCOM2 tep_TextMessagesUnicom diff --git a/src/blackgui/overlaymessages.cpp b/src/blackgui/overlaymessages.cpp index f8d1f6b42..6e8259ac3 100644 --- a/src/blackgui/overlaymessages.cpp +++ b/src/blackgui/overlaymessages.cpp @@ -67,6 +67,7 @@ namespace BlackGui ui->comp_OverlayTextMessage->showSettings(false); ui->comp_OverlayTextMessage->showTextMessageEntry(true); ui->comp_OverlayTextMessage->setAsUsedInOverlayMode(); + ui->comp_OverlayTextMessage->removeAllMessagesTab(); this->setDefaultConfirmationButton(QMessageBox::Cancel); } diff --git a/src/swiftguistandard/swiftguistdinit.cpp b/src/swiftguistandard/swiftguistdinit.cpp index f8021fc88..57991a693 100644 --- a/src/swiftguistandard/swiftguistdinit.cpp +++ b/src/swiftguistandard/swiftguistdinit.cpp @@ -129,10 +129,6 @@ void SwiftGuiStd::init() Q_ASSERT(s); s = connect(sGui->getIContextNetwork(), &IContextNetwork::kicked, this, &SwiftGuiStd::onKickedFromNetwork, Qt::QueuedConnection); 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) { if (logMsg.isEmpty()) { return; }