diff --git a/src/blackgui/components/settingstextmessageinlinecomponent.ui b/src/blackgui/components/settingstextmessageinlinecomponent.ui
index fb9a9103e..363163332 100644
--- a/src/blackgui/components/settingstextmessageinlinecomponent.ui
+++ b/src/blackgui/components/settingstextmessageinlinecomponent.ui
@@ -32,7 +32,7 @@
Overlay
- Ovl.:
+ Overlay:
diff --git a/src/blackgui/components/textmessagecomponent.cpp b/src/blackgui/components/textmessagecomponent.cpp
index a212c6e4c..4eb4a572a 100644
--- a/src/blackgui/components/textmessagecomponent.cpp
+++ b/src/blackgui/components/textmessagecomponent.cpp
@@ -41,6 +41,7 @@
#include
#include
#include
+#include
using namespace BlackCore;
using namespace BlackCore::Context;
@@ -399,6 +400,9 @@ namespace BlackGui
ui->tw_TextMessages->setTabText(ui->tw_TextMessages->indexOf(ui->tb_TextMessagesCOM1), f1);
ui->tw_TextMessages->setTabText(ui->tw_TextMessages->indexOf(ui->tb_TextMessagesCOM2), f2);
+
+ // update tabs
+ this->updateAllTabs();
}
QWidget *CTextMessageComponent::addNewTextMessageTab(const CCallsign &callsign)
@@ -411,7 +415,8 @@ namespace BlackGui
const QString style = this->getStyleSheet();
const bool supervisor = callsign.isSupervisorCallsign();
QWidget *newTabWidget = new QWidget(this);
- newTabWidget->setObjectName("Tab widget " + tabName);
+ newTabWidget->setObjectName(u"Tab widget " % tabName);
+ newTabWidget->setProperty("callsign", callsign.asString());
QPushButton *closeButton = new QPushButton("Close", newTabWidget);
QVBoxLayout *layout = new QVBoxLayout(newTabWidget);
CTextMessageTextEdit *textEdit = new CTextMessageTextEdit(newTabWidget);
@@ -426,7 +431,7 @@ namespace BlackGui
textEdit->setProperty("supervisormsg", supervisor);
textEdit->setStyleSheetForContent(style);
- const int index = ui->tw_TextMessages->addTab(newTabWidget, tabName);
+ const int index = ui->tw_TextMessages->addTab(newTabWidget, this->getCallsignAndRealName(callsign));
QToolButton *closeButtonInTab = new QToolButton(newTabWidget);
closeButtonInTab->setText("[X]");
closeButtonInTab->setProperty("supervisormsg", supervisor);
@@ -442,15 +447,52 @@ namespace BlackGui
closeButtonInTab->setProperty("tabName", tabName);
closeButton->setProperty("tabName", tabName);
- connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab);
+ connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab);
connect(closeButtonInTab, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab);
+ this->setTabWidgetDescription(callsign, index);
+ return newTabWidget;
+ }
+
+ void CTextMessageComponent::setTabWidgetDescription(const CCallsign &callsign, int widgetIndex)
+ {
+ if (callsign.isEmpty()) { return; }
+
+ QString realName;
if (sGui && !sGui->isShuttingDown() && sGui->getIContextNetwork())
{
- const QString realName = sGui->getIContextNetwork()->getUserForCallsign(CCallsign(tabName)).getRealName();
- if (!realName.isEmpty()) { ui->tw_TextMessages->setTabToolTip(index, realName); }
+ realName = sGui->getIContextNetwork()->getUserForCallsign(callsign).getRealName();
+ if (!realName.isEmpty()) { ui->tw_TextMessages->setTabToolTip(widgetIndex, realName); }
+ }
+ const QString tt = realName.isEmpty() ? callsign.asString() : callsign.asString() % u": " % realName;
+ ui->tw_TextMessages->setTabText(widgetIndex, tt);
+ }
+
+ QString CTextMessageComponent::getCallsignAndRealName(const CCallsign &callsign) const
+ {
+ if (callsign.isEmpty()) { return {}; }
+ if (m_showRealNames && sGui && !sGui->isShuttingDown() && sGui->getIContextNetwork())
+ {
+ const QString realName = sGui->getIContextNetwork()->getUserForCallsign(callsign).getRealName();
+ if (!realName.isEmpty())
+ {
+ return callsign.asString() % u": " % realName;
+ }
+ }
+ return callsign.asString();
+ }
+
+ void CTextMessageComponent::updateAllTabs()
+ {
+ for (int index = ui->tw_TextMessages->count() - 1; index >= 0; index--)
+ {
+ QWidget *tab = ui->tw_TextMessages->widget(index);
+ if (!tab) { continue; }
+ if (!tab->toolTip().isEmpty()) { continue; }
+ const QString cs = tab->property("callsign").toString();
+ if (cs.isEmpty()) { continue; }
+ this->setTabWidgetDescription(CCallsign(cs), index);
}
- return newTabWidget;
}
void CTextMessageComponent::addPrivateChannelTextMessage(const CTextMessage &textMessage)
@@ -490,6 +532,16 @@ namespace BlackGui
QWidget *CTextMessageComponent::findTextMessageTabByCallsign(const CCallsign &callsign, bool callsignResolution) const
{
+ // search the private message tabs by property first
+ for (int index = ui->tw_TextMessages->count() - 1; index >= 0; index--)
+ {
+ QWidget *tab = ui->tw_TextMessages->widget(index);
+ if (tab && tab->property("callsign").toString() == callsign.asString())
+ {
+ return tab;
+ }
+ }
+
QWidget *w = this->findTextMessageTabByName(callsign.asString());
if (w) { return w; }
if (!callsignResolution) { return nullptr; }
@@ -618,7 +670,7 @@ namespace BlackGui
{
// not a standard channel
bool isNumber;
- const QString selectedTabText = ui->tw_TextMessages->tabText(index).trimmed();
+ const QString selectedTabText = firstPartOfTabText(ui->tw_TextMessages->tabText(index).trimmed());
const double frequency = selectedTabText.toDouble(&isNumber);
if (isNumber)
{
@@ -637,8 +689,7 @@ namespace BlackGui
cmd.append(selectedTabText);
}
}
- cmd.append(" ").append(enteredLine);
- return cmd;
+ return cmd % u" " % enteredLine;
}
}
@@ -775,5 +826,16 @@ namespace BlackGui
m_activeReceive = receive;
}
+ QString CTextMessageComponent::firstPartOfTabText(const QString &tabText)
+ {
+ if (tabText.isEmpty()) { return {}; }
+ int index = tabText.indexOf(':');
+ if (index < 0) { index = tabText.indexOf(' '); }
+ if (index >= 0)
+ {
+ return tabText.left(index);
+ }
+ return tabText;
+ }
} // namespace
} // namespace
diff --git a/src/blackgui/components/textmessagecomponent.h b/src/blackgui/components/textmessagecomponent.h
index b02a47825..b7a3fc70c 100644
--- a/src/blackgui/components/textmessagecomponent.h
+++ b/src/blackgui/components/textmessagecomponent.h
@@ -84,6 +84,12 @@ namespace BlackGui
//! Remove the all tab, the operation cannot be undone
void removeAllMessagesTab();
+ //! Showing real names
+ bool isShowingRealNames() const { return m_showRealNames; }
+
+ //! Showing real names
+ void setShowingRealNames(bool show) { m_showRealNames = show; }
+
// ---------- overlay test messages -------------
//! Used as overlay and not dock widget
@@ -120,6 +126,7 @@ namespace BlackGui
bool m_usedAsOverlayWidget = false; //!< disables dockwidget parts if used as overlay widget
bool m_activeSend = true; //!< ignore sent messages
bool m_activeReceive = true; //!< ignore received messages
+ bool m_showRealNames = true;
//! Enum to widget
QWidget *getTabWidget(TextMessageTab tab) const;
@@ -210,17 +217,29 @@ namespace BlackGui
//! Close text message tab
void closeTextMessageTab();
+ //! Update all tabs
+ void updateAllTabs();
+
//! Top level was changed (used to enable elements when floating)
void topLevelChanged(QWidget *widget, bool topLevel);
//! Command line entered
void textMessageEntered();
+ //! Set the real name widget tooltip
+ void setTabWidgetDescription(const BlackMisc::Aviation::CCallsign &callsign, int widgetIndex);
+
+ //! Callsign and relanme if possible
+ QString getCallsignAndRealName(const BlackMisc::Aviation::CCallsign &callsign) const;
+
//! Visible widget hack
bool isVisibleWidgetHack() const;
//! Emit the display in info window signal
void emitDisplayInInfoWindow(const BlackMisc::CVariant &message, int displayDurationMs);
+
+ //! Get the 1st part of the tab text, "DAMBZ: Joe Doe" -> "DAMBZ", "123.45 Foo" -> "123.45"
+ static QString firstPartOfTabText(const QString &tabText);
};
} // ns
} // ns