mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-01 06:35:41 +08:00
Ref T384, text message component "self connecting" to contexts.
Also allow to remove "all messages" tab
This commit is contained in:
@@ -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,18 +452,20 @@ 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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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. ".com1", ".x", ".msg com1")</string>
|
<string>command line (e.g. ".com1", ".x", ".msg com1")</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>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|||||||
Reference in New Issue
Block a user