diff --git a/src/blackgui/components/textmessagecomponent.cpp b/src/blackgui/components/textmessagecomponent.cpp index 56fd1ceef..5888e2104 100644 --- a/src/blackgui/components/textmessagecomponent.cpp +++ b/src/blackgui/components/textmessagecomponent.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -73,8 +74,12 @@ namespace BlackGui 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"); - c = connect(this, &CTextMessageComponent::commandEntered, sApp->getCoreFacade(), &CCoreFacade::parseCommandLine); - Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); + + if (sGui && sGui->getCoreFacade()) + { + c = connect(this, &CTextMessageComponent::commandEntered, sGui->getCoreFacade(), &CCoreFacade::parseCommandLine); + Q_ASSERT_X(c, Q_FUNC_INFO, "Missing connect"); + } Q_UNUSED(c); } @@ -254,6 +259,7 @@ namespace BlackGui QWidget *CTextMessageComponent::addNewTextMessageTab(const QString &tabName) { QWidget *newTab = new QWidget(this); + newTab->setObjectName("Tab widget " + tabName); QPushButton *closeButton = new QPushButton("Close", newTab); QVBoxLayout *layout = new QVBoxLayout(newTab); CTextMessageTextEdit *textEdit = new CTextMessageTextEdit(newTab); @@ -265,13 +271,21 @@ namespace BlackGui newTab->setLayout(layout); textEdit->setContextMenuPolicy(Qt::CustomContextMenu); const int index = ui->tw_TextMessages->addTab(newTab, tabName); - connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab); + QToolButton *closeButtonInTab = new QToolButton(newTab); + closeButtonInTab->setText("[X]"); + ui->tw_TextMessages->tabBar()->setTabButton(index, QTabBar::RightSide, closeButtonInTab); ui->tw_TextMessages->setCurrentIndex(index); + closeButton->setProperty("messageTabIndex", index); + closeButtonInTab->setProperty("messageTabIndex", index); + + connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab); + connect(closeButtonInTab, &QPushButton::released, this, &CTextMessageComponent::closeTextMessageTab); + if (sGui && sGui->getIContextNetwork()) { - QString realName = sGui->getIContextNetwork()->getUserForCallsign(CCallsign(tabName)).getRealName(); - if (!realName.isEmpty()) ui->tw_TextMessages->setTabToolTip(index, realName); + const QString realName = sGui->getIContextNetwork()->getUserForCallsign(CCallsign(tabName)).getRealName(); + if (!realName.isEmpty()) { ui->tw_TextMessages->setTabToolTip(index, realName); } } return newTab; } @@ -345,7 +359,11 @@ namespace BlackGui QWidget *parentWidget = qobject_cast(sender->parent()); Q_ASSERT(parentWidget); int index = -1; + const QVariant qvi = sender->property("messageTabIndex"); + if (qvi.isValid()) { index = qvi.toInt(); } + // the while loop is the old version + // should not really be needed anymore while (index < 0 && parentWidget) { index = ui->tw_TextMessages->indexOf(parentWidget); diff --git a/src/blackgui/components/textmessagecomponent.h b/src/blackgui/components/textmessagecomponent.h index 8b71a1ffd..53c2956b5 100644 --- a/src/blackgui/components/textmessagecomponent.h +++ b/src/blackgui/components/textmessagecomponent.h @@ -24,8 +24,6 @@ #include #include -class QWidget; - namespace Ui { class CTextMessageComponent; } namespace BlackGui { @@ -53,7 +51,7 @@ namespace BlackGui explicit CTextMessageComponent(QWidget *parent = nullptr); //! Destructor - virtual ~CTextMessageComponent(); + virtual ~CTextMessageComponent() override; //! \copydoc CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea virtual bool setParentDockWidgetInfoArea(CDockWidgetInfoArea *parentDockableWidget) override;