diff --git a/src/blackgui/components/maininfoareacomponent.ui b/src/blackgui/components/maininfoareacomponent.ui
index 6abe2121b..f5c2c5084 100644
--- a/src/blackgui/components/maininfoareacomponent.ui
+++ b/src/blackgui/components/maininfoareacomponent.ui
@@ -281,11 +281,11 @@
-
-
-
- 0
- 0
-
+
+ QFrame::StyledPanel
+
+
+ QFrame::Raised
@@ -603,12 +603,6 @@
blackgui/components/usercomponent.h
1
-
- BlackGui::Components::CTextMessageComponent
- QTabWidget
- blackgui/components/textmessagecomponent.h
- 1
-
BlackGui::Components::CSettingsComponent
QTabWidget
@@ -633,6 +627,12 @@
blackgui/components/cockpitcomponent.h
1
+
+ BlackGui::Components::CTextMessageComponent
+ QFrame
+ blackgui/components/textmessagecomponent.h
+ 1
+
diff --git a/src/blackgui/components/mainkeypadareacomponent.cpp b/src/blackgui/components/mainkeypadareacomponent.cpp
index b59fa32ed..c184a8eda 100644
--- a/src/blackgui/components/mainkeypadareacomponent.cpp
+++ b/src/blackgui/components/mainkeypadareacomponent.cpp
@@ -155,8 +155,8 @@ namespace BlackGui
void CMainKeypadAreaComponent::ps_commandEntered()
{
- QString c = this->ui->le_CommandLineInput->text().trimmed();
- if (c.isEmpty()) return;
+ QString c(this->ui->le_CommandLineInput->text().trimmed().simplified());
+ if (c.isEmpty()) { return; }
emit this->commandEntered(c);
this->ui->le_CommandLineInput->clear();
}
diff --git a/src/blackgui/components/mainkeypadareacomponent.ui b/src/blackgui/components/mainkeypadareacomponent.ui
index 5ce080f00..74b5b39b4 100644
--- a/src/blackgui/components/mainkeypadareacomponent.ui
+++ b/src/blackgui/components/mainkeypadareacomponent.ui
@@ -70,8 +70,11 @@
0
+
+ command line (e.g. ".com1", ".x", ".msg com1")
+
- <commands go here>
+
diff --git a/src/blackgui/components/textmessagecomponent.cpp b/src/blackgui/components/textmessagecomponent.cpp
index 706386275..d9ed41898 100644
--- a/src/blackgui/components/textmessagecomponent.cpp
+++ b/src/blackgui/components/textmessagecomponent.cpp
@@ -32,11 +32,15 @@ namespace BlackGui
{
CTextMessageComponent::CTextMessageComponent(QWidget *parent) :
- QTabWidget(parent),
+ QFrame(parent),
CEnableForRuntime(nullptr, false),
ui(new Ui::CTextMessageComponent)
{
ui->setupUi(this);
+
+ this->ui->le_textMessages->setVisible(false);
+ connect(this->ui->le_textMessages, &QLineEdit::returnPressed, this, &CTextMessageComponent::ps_commandEntered);
+
this->m_clearTextEditAction = new QAction("Clear", this);
connect(this->m_clearTextEditAction, &QAction::triggered, this, &CTextMessageComponent::ps_clearTextEdit);
@@ -153,7 +157,16 @@ namespace BlackGui
void CTextMessageComponent::runtimeHasBeenSet()
{
+ Q_ASSERT(this->getIContextOwnAircraft());
+ Q_ASSERT(this->getIContextNetwork());
+ Q_ASSERT(this->getIContextAudio());
+
connect(this->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraftCockpit, this, &CTextMessageComponent::ps_onChangedAircraftCockpit);
+ connect(this->getDockWidgetInfoArea(), &CDockWidgetInfoArea::widgetTopLevelChanged, this, &CTextMessageComponent::ps_topLevelChanged);
+
+ connect(this, &CTextMessageComponent::commandEntered, this->getIContextOwnAircraft(), &IContextOwnAircraft::parseCommandLine);
+ connect(this, &CTextMessageComponent::commandEntered, this->getIContextNetwork(), &IContextNetwork::parseCommandLine);
+ connect(this, &CTextMessageComponent::commandEntered, this->getIContextAudio(), &IContextAudio::parseCommandLine);
}
/*
@@ -171,17 +184,21 @@ namespace BlackGui
if (cs.isEmpty()) return false;
QWidget *tab = this->findTextMessageTabByName(cs.getStringAsSet());
if (!tab) return false;
- return this->currentWidget() == tab;
+ return this->ui->tw_TextMessages->currentWidget() == tab;
}
else
{
// frequency message
const CAircraft ownAircraft = this->getOwnAircraft();
- if (this->currentWidget() == this->ui->tb_TextMessagesAll) return true;
+ if (this->ui->tw_TextMessages->currentWidget() == this->ui->tb_TextMessagesAll) { return true; }
if (textMessage.isSendToFrequency(ownAircraft.getCom1System().getFrequencyActive()))
- return this->currentWidget() == this->ui->tb_TextMessagesCOM1;
+ {
+ return this->ui->tw_TextMessages->currentWidget() == this->ui->tb_TextMessagesCOM1;
+ }
if (textMessage.isSendToFrequency(ownAircraft.getCom2System().getFrequencyActive()))
- return this->currentWidget() == this->ui->tb_TextMessagesCOM2;
+ {
+ return this->ui->tw_TextMessages->currentWidget() == this->ui->tb_TextMessagesCOM2;
+ }
return false;
}
}
@@ -196,8 +213,8 @@ namespace BlackGui
const QString f2 = QString("COM2: %1").arg(f2n);
this->ui->tb_TextMessagesCOM1->setToolTip(f1);
this->ui->tb_TextMessagesCOM1->setToolTip(f2);
- this->setTabText(this->indexOf(this->ui->tb_TextMessagesCOM1), f1);
- this->setTabText(this->indexOf(this->ui->tb_TextMessagesCOM2), f2);
+ this->ui->tw_TextMessages->setTabText(this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesCOM1), f1);
+ this->ui->tw_TextMessages->setTabText(this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesCOM2), f2);
}
/*
@@ -219,14 +236,14 @@ namespace BlackGui
newTab->setLayout(layout);
textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
connect(textEdit, &QTextEdit::customContextMenuRequested, this, &CTextMessageComponent::ps_showContextMenuForTextEdit);
- int index = this->addTab(newTab, tabName);
+ int index = this->ui->tw_TextMessages->addTab(newTab, tabName);
this->connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::ps_closeTextMessageTab);
- this->setCurrentIndex(index);
+ this->ui->tw_TextMessages->setCurrentIndex(index);
if (this->getIContextNetwork())
{
QString realName = this->getIContextNetwork()->getUserForCallsign(CCallsign(tabName)).getRealName();
- if (!realName.isEmpty()) this->setTabToolTip(index, realName);
+ if (!realName.isEmpty()) this->ui->tw_TextMessages->setTabToolTip(index, realName);
}
return newTab;
}
@@ -260,11 +277,11 @@ namespace BlackGui
{
if (name.isEmpty()) return nullptr;
QString n = name.trimmed();
- for (int index = 0; index < this->count(); index++)
+ for (int index = 0; index < this->ui->tw_TextMessages->count(); index++)
{
- QString tabName = this->tabText(index);
+ QString tabName = this->ui->tw_TextMessages->tabText(index);
if (tabName.indexOf(n, 0, Qt::CaseInsensitive) < 0) continue;
- QWidget *tab = this->widget(index);
+ QWidget *tab = this->ui->tw_TextMessages->widget(index);
return tab;
}
return nullptr;
@@ -276,29 +293,29 @@ namespace BlackGui
CTextMessage CTextMessageComponent::getTextMessageStubForChannel()
{
CTextMessage tm;
- int index = this->currentIndex();
- if (index < 0 || index == this->indexOf(this->ui->tb_TextMessagesAll)) { return tm; }
+ int index = this->ui->tw_TextMessages->currentIndex();
+ if (index < 0 || index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesAll)) { return tm; }
// from
tm.setSenderCallsign(this->getOwnAircraft().getCallsign());
// frequency text message?
- if (index == this->indexOf(this->ui->tb_TextMessagesCOM1))
+ if (index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesCOM1))
{
tm.setFrequency(this->getOwnAircraft().getCom1System().getFrequencyActive());
}
- else if (index == this->indexOf(this->ui->tb_TextMessagesCOM2))
+ else if (index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesCOM2))
{
tm.setFrequency(this->getOwnAircraft().getCom2System().getFrequencyActive());
}
- else if (index == this->indexOf(this->ui->tb_TextMessagesUnicom))
+ else if (index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesUnicom))
{
tm.setFrequency(CPhysicalQuantitiesConstants::FrequencyUnicom());
}
else
{
// not a standard channel
- QString selectedTabText = this->tabText(index);
+ QString selectedTabText = this->ui->tw_TextMessages->tabText(index);
bool isNumber;
double frequency = selectedTabText.toDouble(&isNumber);
if (isNumber)
@@ -335,12 +352,15 @@ namespace BlackGui
while (index < 0 && parentWidget)
{
- index = this->indexOf(parentWidget);
+ index = this->ui->tw_TextMessages->indexOf(parentWidget);
parentWidget = parentWidget->parentWidget();
}
- if (index >= 0) this->removeTab(index);
+ if (index >= 0) { this->ui->tw_TextMessages->removeTab(index); }
}
+ /*
+ * Show the context menu for text edit area
+ */
void CTextMessageComponent::ps_showContextMenuForTextEdit(const QPoint &pt)
{
QObject *sender = QObject::sender();
@@ -356,6 +376,9 @@ namespace BlackGui
delete menu;
}
+ /*
+ * Clear a text edit area
+ */
void CTextMessageComponent::ps_clearTextEdit()
{
if (!this->m_currentTextEdit) return;
@@ -363,6 +386,32 @@ namespace BlackGui
this->m_currentTextEdit = nullptr;
}
+ /*
+ * Top level was changed
+ */
+ void CTextMessageComponent::ps_topLevelChanged(QWidget *widget, bool topLevel)
+ {
+ Q_UNUSED(widget);
+ this->ui->le_textMessages->setVisible(topLevel);
+ }
+
+ /*
+ * Command line entered
+ */
+ void CTextMessageComponent::ps_commandEntered()
+ {
+ if (!this->ui->le_textMessages->isVisible()) { return; }
+ const QString cl(this->ui->le_textMessages->text().trimmed().simplified());
+ if (cl.isEmpty()) { return; }
+ this->ui->le_textMessages->clear();
+
+ bool handledMyself = this->parseCommandLine(cl);
+ if (handledMyself) { return; }
+
+ // not my business, relay
+ emit commandEntered(cl);
+ }
+
/*
* Command entered
*/
@@ -394,21 +443,21 @@ namespace BlackGui
this->setVisible(true);
if (receiver == "c1" || receiver == "com1")
{
- this->setCurrentWidget(this->ui->tb_TextMessagesCOM1);
+ this->ui->tw_TextMessages->setCurrentWidget(this->ui->tb_TextMessagesCOM1);
}
else if (receiver == "c2" || receiver == "com2")
{
- this->setCurrentWidget(this->ui->tb_TextMessagesCOM2);
+ this->ui->tw_TextMessages->setCurrentWidget(this->ui->tb_TextMessagesCOM2);
}
else if (receiver == "u" || receiver == "unicom" || receiver == "uni")
{
- this->setCurrentWidget(this->ui->tb_TextMessagesUnicom);
+ this->ui->tw_TextMessages->setCurrentWidget(this->ui->tb_TextMessagesUnicom);
}
else
{
QWidget *tab = this->findTextMessageTabByName(receiver.trimmed());
if (tab == nullptr) tab = this->addNewTextMessageTab(receiver.trimmed().toUpper());
- this->setCurrentWidget(tab);
+ this->ui->tw_TextMessages->setCurrentWidget(tab);
}
CTextMessage tm = this->getTextMessageStubForChannel();
QString msg(parser.remainingStringAfter(2));
@@ -438,8 +487,8 @@ namespace BlackGui
return false;
}
- int index = this->currentIndex();
- if (index < 0 || index == this->indexOf(this->ui->tb_TextMessagesAll))
+ int index = this->ui->tw_TextMessages->currentIndex();
+ if (index < 0 || index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesAll))
{
CLogMessage(this).error("incorrect channel");
}
diff --git a/src/blackgui/components/textmessagecomponent.h b/src/blackgui/components/textmessagecomponent.h
index 5a24add24..6db3c305b 100644
--- a/src/blackgui/components/textmessagecomponent.h
+++ b/src/blackgui/components/textmessagecomponent.h
@@ -13,12 +13,13 @@
#define BLACKGUI_TEXTMESSAGECOMPONENT_H
#include "blackgui/components/enableforruntime.h"
+#include "blackgui/components/enablefordockwidgetinfoarea.h"
#include "blackmisc/nwtextmessage.h"
#include "blackmisc/avaircraft.h"
#include "blackmisc/nwtextmessagelist.h"
#include "blackcore/context_network.h"
#include "blackcore/context_ownaircraft.h"
-#include
+#include
#include
#include
#include
@@ -30,8 +31,9 @@ namespace BlackGui
{
//! Text message widget
class CTextMessageComponent :
- public QTabWidget,
- public CEnableForRuntime
+ public QFrame,
+ public CEnableForRuntime,
+ public CEnableForDockWidgetInfoArea
{
Q_OBJECT
@@ -55,6 +57,9 @@ namespace BlackGui
//! Message to be displayed in info window
void displayInInfoWindow(const BlackMisc::CVariant &message, int displayDurationMs) const;
+ //! Command line was entered
+ void commandEntered(const QString commandLine);
+
public slots:
//! \addtogroup commandline
//! @{
@@ -76,7 +81,7 @@ namespace BlackGui
QScopedPointer ui;
QWidget *getTabWidget(Tab tab); //!< enum to widget
QAction *m_clearTextEditAction = nullptr;
- QTextEdit *m_currentTextEdit = nullptr;
+ QTextEdit *m_currentTextEdit = nullptr; //!< text edit currently visible
/*!
* \brief Add new text message tab
@@ -133,6 +138,12 @@ namespace BlackGui
//! Clear text edit
void ps_clearTextEdit();
+
+ //! Top level was changed
+ void ps_topLevelChanged(QWidget *widget, bool topLevel);
+
+ //! Command line entered
+ void ps_commandEntered();
};
}
}
diff --git a/src/blackgui/components/textmessagecomponent.ui b/src/blackgui/components/textmessagecomponent.ui
index d2b4f77d9..fc2d13e1f 100644
--- a/src/blackgui/components/textmessagecomponent.ui
+++ b/src/blackgui/components/textmessagecomponent.ui
@@ -1,167 +1,201 @@
CTextMessageComponent
-
+
0
0
- 580
- 375
+ 400
+ 300
-
-
- 0
- 0
-
-
- TabWidget
+ Frame
-
- 0
+
+ QFrame::StyledPanel
-
-
- All
-
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
- -
-
-
- QTextEdit::NoWrap
-
-
- true
-
-
- 10
-
+
+ QFrame::Raised
+
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
-
+
+
+ 0
+
+
+
+ All
+
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
-
+
+
+ All
+
+
+ QTextEdit::NoWrap
+
+
+ true
+
+
+ 10
+
+
+
+
-
-
-
-
-
- UNICOM
-
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
- -
-
-
- QTextEdit::NoWrap
-
-
- true
-
-
- 10
-
+
+
+ UNICOM
+
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
-
+
+
+ UNICOM
+
+
+ true
+
+
+
+
-
-
-
-
-
- COM1
-
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
- -
-
-
- QTextEdit::NoWrap
-
-
- true
-
-
- 10
-
+
+
+ COM1
+
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
-
+
+
+ COM1
+
+
+ QTextEdit::NoWrap
+
+
+ true
+
+
+ 10
+
+
+
+
-
-
-
-
-
- COM2
-
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
-
- 2
-
- -
-
-
- QTextEdit::NoWrap
-
-
- true
-
-
- 10
-
+
+
+ COM2
+
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
-
+
+
+ COM2
+
+
+ QTextEdit::NoWrap
+
+
+ true
+
+
+ 10
+
+
+
+
-
-
-
+
+
+ -
+
+
+ command line (e.g. ".com1", ".x", ".msg com1")
+
+
+
+