refs #77, command line in text message component when floating

This commit is contained in:
Klaus Basan
2014-11-18 17:31:43 +01:00
committed by Roland Winklmeier
parent b8597ce8d8
commit ce78b65079
6 changed files with 290 additions and 193 deletions

View File

@@ -281,11 +281,11 @@
</property> </property>
<item> <item>
<widget class="BlackGui::Components::CTextMessageComponent" name="comp_TextMessages"> <widget class="BlackGui::Components::CTextMessageComponent" name="comp_TextMessages">
<property name="sizePolicy"> <property name="frameShape">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <enum>QFrame::StyledPanel</enum>
<horstretch>0</horstretch> </property>
<verstretch>0</verstretch> <property name="frameShadow">
</sizepolicy> <enum>QFrame::Raised</enum>
</property> </property>
</widget> </widget>
</item> </item>
@@ -603,12 +603,6 @@
<header>blackgui/components/usercomponent.h</header> <header>blackgui/components/usercomponent.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget>
<class>BlackGui::Components::CTextMessageComponent</class>
<extends>QTabWidget</extends>
<header>blackgui/components/textmessagecomponent.h</header>
<container>1</container>
</customwidget>
<customwidget> <customwidget>
<class>BlackGui::Components::CSettingsComponent</class> <class>BlackGui::Components::CSettingsComponent</class>
<extends>QTabWidget</extends> <extends>QTabWidget</extends>
@@ -633,6 +627,12 @@
<header>blackgui/components/cockpitcomponent.h</header> <header>blackgui/components/cockpitcomponent.h</header>
<container>1</container> <container>1</container>
</customwidget> </customwidget>
<customwidget>
<class>BlackGui::Components::CTextMessageComponent</class>
<extends>QFrame</extends>
<header>blackgui/components/textmessagecomponent.h</header>
<container>1</container>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="../../blackmisc/blackmisc.qrc"/> <include location="../../blackmisc/blackmisc.qrc"/>

View File

@@ -155,8 +155,8 @@ namespace BlackGui
void CMainKeypadAreaComponent::ps_commandEntered() void CMainKeypadAreaComponent::ps_commandEntered()
{ {
QString c = this->ui->le_CommandLineInput->text().trimmed(); QString c(this->ui->le_CommandLineInput->text().trimmed().simplified());
if (c.isEmpty()) return; if (c.isEmpty()) { return; }
emit this->commandEntered(c); emit this->commandEntered(c);
this->ui->le_CommandLineInput->clear(); this->ui->le_CommandLineInput->clear();
} }

View File

@@ -70,8 +70,11 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip">
<string>command line (e.g. &quot;.com1&quot;, &quot;.x&quot;, &quot;.msg com1&quot;)</string>
</property>
<property name="text"> <property name="text">
<string>&lt;commands go here&gt;</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -32,11 +32,15 @@ namespace BlackGui
{ {
CTextMessageComponent::CTextMessageComponent(QWidget *parent) : CTextMessageComponent::CTextMessageComponent(QWidget *parent) :
QTabWidget(parent), QFrame(parent),
CEnableForRuntime(nullptr, false), CEnableForRuntime(nullptr, false),
ui(new Ui::CTextMessageComponent) ui(new Ui::CTextMessageComponent)
{ {
ui->setupUi(this); 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); this->m_clearTextEditAction = new QAction("Clear", this);
connect(this->m_clearTextEditAction, &QAction::triggered, this, &CTextMessageComponent::ps_clearTextEdit); connect(this->m_clearTextEditAction, &QAction::triggered, this, &CTextMessageComponent::ps_clearTextEdit);
@@ -153,7 +157,16 @@ namespace BlackGui
void CTextMessageComponent::runtimeHasBeenSet() 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->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; if (cs.isEmpty()) return false;
QWidget *tab = this->findTextMessageTabByName(cs.getStringAsSet()); QWidget *tab = this->findTextMessageTabByName(cs.getStringAsSet());
if (!tab) return false; if (!tab) return false;
return this->currentWidget() == tab; return this->ui->tw_TextMessages->currentWidget() == tab;
} }
else else
{ {
// frequency message // frequency message
const CAircraft ownAircraft = this->getOwnAircraft(); 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())) 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())) 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; return false;
} }
} }
@@ -196,8 +213,8 @@ namespace BlackGui
const QString f2 = QString("COM2: %1").arg(f2n); const QString f2 = QString("COM2: %1").arg(f2n);
this->ui->tb_TextMessagesCOM1->setToolTip(f1); this->ui->tb_TextMessagesCOM1->setToolTip(f1);
this->ui->tb_TextMessagesCOM1->setToolTip(f2); this->ui->tb_TextMessagesCOM1->setToolTip(f2);
this->setTabText(this->indexOf(this->ui->tb_TextMessagesCOM1), f1); this->ui->tw_TextMessages->setTabText(this->ui->tw_TextMessages->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_TextMessagesCOM2), f2);
} }
/* /*
@@ -219,14 +236,14 @@ namespace BlackGui
newTab->setLayout(layout); newTab->setLayout(layout);
textEdit->setContextMenuPolicy(Qt::CustomContextMenu); textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
connect(textEdit, &QTextEdit::customContextMenuRequested, this, &CTextMessageComponent::ps_showContextMenuForTextEdit); 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->connect(closeButton, &QPushButton::released, this, &CTextMessageComponent::ps_closeTextMessageTab);
this->setCurrentIndex(index); this->ui->tw_TextMessages->setCurrentIndex(index);
if (this->getIContextNetwork()) if (this->getIContextNetwork())
{ {
QString realName = this->getIContextNetwork()->getUserForCallsign(CCallsign(tabName)).getRealName(); 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; return newTab;
} }
@@ -260,11 +277,11 @@ namespace BlackGui
{ {
if (name.isEmpty()) return nullptr; if (name.isEmpty()) return nullptr;
QString n = name.trimmed(); 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; 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 tab;
} }
return nullptr; return nullptr;
@@ -276,29 +293,29 @@ namespace BlackGui
CTextMessage CTextMessageComponent::getTextMessageStubForChannel() CTextMessage CTextMessageComponent::getTextMessageStubForChannel()
{ {
CTextMessage tm; CTextMessage tm;
int index = this->currentIndex(); int index = this->ui->tw_TextMessages->currentIndex();
if (index < 0 || index == this->indexOf(this->ui->tb_TextMessagesAll)) { return tm; } if (index < 0 || index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesAll)) { return tm; }
// from // from
tm.setSenderCallsign(this->getOwnAircraft().getCallsign()); tm.setSenderCallsign(this->getOwnAircraft().getCallsign());
// frequency text message? // 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()); 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()); 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()); tm.setFrequency(CPhysicalQuantitiesConstants::FrequencyUnicom());
} }
else else
{ {
// not a standard channel // not a standard channel
QString selectedTabText = this->tabText(index); QString selectedTabText = this->ui->tw_TextMessages->tabText(index);
bool isNumber; bool isNumber;
double frequency = selectedTabText.toDouble(&isNumber); double frequency = selectedTabText.toDouble(&isNumber);
if (isNumber) if (isNumber)
@@ -335,12 +352,15 @@ namespace BlackGui
while (index < 0 && parentWidget) while (index < 0 && parentWidget)
{ {
index = this->indexOf(parentWidget); index = this->ui->tw_TextMessages->indexOf(parentWidget);
parentWidget = parentWidget->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) void CTextMessageComponent::ps_showContextMenuForTextEdit(const QPoint &pt)
{ {
QObject *sender = QObject::sender(); QObject *sender = QObject::sender();
@@ -356,6 +376,9 @@ namespace BlackGui
delete menu; delete menu;
} }
/*
* Clear a text edit area
*/
void CTextMessageComponent::ps_clearTextEdit() void CTextMessageComponent::ps_clearTextEdit()
{ {
if (!this->m_currentTextEdit) return; if (!this->m_currentTextEdit) return;
@@ -363,6 +386,32 @@ namespace BlackGui
this->m_currentTextEdit = nullptr; 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 * Command entered
*/ */
@@ -394,21 +443,21 @@ namespace BlackGui
this->setVisible(true); this->setVisible(true);
if (receiver == "c1" || receiver == "com1") 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") 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") else if (receiver == "u" || receiver == "unicom" || receiver == "uni")
{ {
this->setCurrentWidget(this->ui->tb_TextMessagesUnicom); this->ui->tw_TextMessages->setCurrentWidget(this->ui->tb_TextMessagesUnicom);
} }
else else
{ {
QWidget *tab = this->findTextMessageTabByName(receiver.trimmed()); QWidget *tab = this->findTextMessageTabByName(receiver.trimmed());
if (tab == nullptr) tab = this->addNewTextMessageTab(receiver.trimmed().toUpper()); if (tab == nullptr) tab = this->addNewTextMessageTab(receiver.trimmed().toUpper());
this->setCurrentWidget(tab); this->ui->tw_TextMessages->setCurrentWidget(tab);
} }
CTextMessage tm = this->getTextMessageStubForChannel(); CTextMessage tm = this->getTextMessageStubForChannel();
QString msg(parser.remainingStringAfter(2)); QString msg(parser.remainingStringAfter(2));
@@ -438,8 +487,8 @@ namespace BlackGui
return false; return false;
} }
int index = this->currentIndex(); int index = this->ui->tw_TextMessages->currentIndex();
if (index < 0 || index == this->indexOf(this->ui->tb_TextMessagesAll)) if (index < 0 || index == this->ui->tw_TextMessages->indexOf(this->ui->tb_TextMessagesAll))
{ {
CLogMessage(this).error("incorrect channel"); CLogMessage(this).error("incorrect channel");
} }

View File

@@ -13,12 +13,13 @@
#define BLACKGUI_TEXTMESSAGECOMPONENT_H #define BLACKGUI_TEXTMESSAGECOMPONENT_H
#include "blackgui/components/enableforruntime.h" #include "blackgui/components/enableforruntime.h"
#include "blackgui/components/enablefordockwidgetinfoarea.h"
#include "blackmisc/nwtextmessage.h" #include "blackmisc/nwtextmessage.h"
#include "blackmisc/avaircraft.h" #include "blackmisc/avaircraft.h"
#include "blackmisc/nwtextmessagelist.h" #include "blackmisc/nwtextmessagelist.h"
#include "blackcore/context_network.h" #include "blackcore/context_network.h"
#include "blackcore/context_ownaircraft.h" #include "blackcore/context_ownaircraft.h"
#include <QTabWidget> #include <QFrame>
#include <QLineEdit> #include <QLineEdit>
#include <QTextEdit> #include <QTextEdit>
#include <QScopedPointer> #include <QScopedPointer>
@@ -30,8 +31,9 @@ namespace BlackGui
{ {
//! Text message widget //! Text message widget
class CTextMessageComponent : class CTextMessageComponent :
public QTabWidget, public QFrame,
public CEnableForRuntime public CEnableForRuntime,
public CEnableForDockWidgetInfoArea
{ {
Q_OBJECT Q_OBJECT
@@ -55,6 +57,9 @@ namespace BlackGui
//! Message to be displayed in info window //! Message to be displayed in info window
void displayInInfoWindow(const BlackMisc::CVariant &message, int displayDurationMs) const; void displayInInfoWindow(const BlackMisc::CVariant &message, int displayDurationMs) const;
//! Command line was entered
void commandEntered(const QString commandLine);
public slots: public slots:
//! \addtogroup commandline //! \addtogroup commandline
//! @{ //! @{
@@ -76,7 +81,7 @@ namespace BlackGui
QScopedPointer<Ui::CTextMessageComponent> ui; QScopedPointer<Ui::CTextMessageComponent> ui;
QWidget *getTabWidget(Tab tab); //!< enum to widget QWidget *getTabWidget(Tab tab); //!< enum to widget
QAction *m_clearTextEditAction = nullptr; QAction *m_clearTextEditAction = nullptr;
QTextEdit *m_currentTextEdit = nullptr; QTextEdit *m_currentTextEdit = nullptr; //!< text edit currently visible
/*! /*!
* \brief Add new text message tab * \brief Add new text message tab
@@ -133,6 +138,12 @@ namespace BlackGui
//! Clear text edit //! Clear text edit
void ps_clearTextEdit(); void ps_clearTextEdit();
//! Top level was changed
void ps_topLevelChanged(QWidget *widget, bool topLevel);
//! Command line entered
void ps_commandEntered();
}; };
} }
} }

View File

@@ -1,167 +1,201 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>CTextMessageComponent</class> <class>CTextMessageComponent</class>
<widget class="QTabWidget" name="CTextMessageComponent"> <widget class="QFrame" name="CTextMessageComponent">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>580</width> <width>400</width>
<height>375</height> <height>300</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>TabWidget</string> <string>Frame</string>
</property> </property>
<property name="currentIndex"> <property name="frameShape">
<number>0</number> <enum>QFrame::StyledPanel</enum>
</property> </property>
<widget class="QWidget" name="tb_TextMessagesAll"> <property name="frameShadow">
<attribute name="title"> <enum>QFrame::Raised</enum>
<string>All</string> </property>
</attribute> <layout class="QVBoxLayout" name="vl_TextMessages">
<layout class="QVBoxLayout" name="vl_TextMessagesAll"> <property name="spacing">
<property name="spacing"> <number>2</number>
<number>2</number> </property>
</property> <property name="leftMargin">
<property name="leftMargin"> <number>2</number>
<number>2</number> </property>
</property> <property name="topMargin">
<property name="topMargin"> <number>2</number>
<number>2</number> </property>
</property> <property name="rightMargin">
<property name="rightMargin"> <number>2</number>
<number>2</number> </property>
</property> <property name="bottomMargin">
<property name="bottomMargin"> <number>2</number>
<number>2</number> </property>
</property> <item>
<item> <widget class="QTabWidget" name="tw_TextMessages">
<widget class="QTextEdit" name="te_TextMessagesAll"> <property name="currentIndex">
<property name="lineWrapMode"> <number>0</number>
<enum>QTextEdit::NoWrap</enum> </property>
</property> <widget class="QWidget" name="tb_TextMessagesAll">
<property name="readOnly"> <attribute name="title">
<bool>true</bool> <string>All</string>
</property> </attribute>
<property name="tabStopWidth"> <layout class="QVBoxLayout" name="vl_TextMessagesAll">
<number>10</number> <property name="spacing">
</property> <number>2</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QTextEdit" name="te_TextMessagesAll">
<property name="documentTitle">
<string>All</string>
</property>
<property name="lineWrapMode">
<enum>QTextEdit::NoWrap</enum>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="tabStopWidth">
<number>10</number>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> <widget class="QWidget" name="tb_TextMessagesUnicom">
</layout> <attribute name="title">
</widget> <string>UNICOM</string>
<widget class="QWidget" name="tb_TextMessagesUnicom"> </attribute>
<attribute name="title"> <layout class="QVBoxLayout" name="vl_TextMessagesUnicom">
<string>UNICOM</string> <property name="spacing">
</attribute> <number>2</number>
<layout class="QVBoxLayout" name="vl_TextMessagesUnicom"> </property>
<property name="spacing"> <property name="leftMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="leftMargin"> <property name="topMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="topMargin"> <property name="rightMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="rightMargin"> <property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="bottomMargin"> <item>
<number>2</number> <widget class="QTextEdit" name="te_TextMessagesUnicom">
</property> <property name="documentTitle">
<item> <string>UNICOM</string>
<widget class="QTextEdit" name="te_TextMessagesUnicom"> </property>
<property name="lineWrapMode"> <property name="readOnly">
<enum>QTextEdit::NoWrap</enum> <bool>true</bool>
</property> </property>
<property name="readOnly"> </widget>
<bool>true</bool> </item>
</property> </layout>
<property name="tabStopWidth">
<number>10</number>
</property>
</widget> </widget>
</item> <widget class="QWidget" name="tb_TextMessagesCOM1">
</layout> <attribute name="title">
</widget> <string>COM1</string>
<widget class="QWidget" name="tb_TextMessagesCOM1"> </attribute>
<attribute name="title"> <layout class="QVBoxLayout" name="vl_TextMessagesCom1">
<string>COM1</string> <property name="spacing">
</attribute> <number>2</number>
<layout class="QVBoxLayout" name="vl_TextMessagesCOM1"> </property>
<property name="spacing"> <property name="leftMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="leftMargin"> <property name="topMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="topMargin"> <property name="rightMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="rightMargin"> <property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="bottomMargin"> <item>
<number>2</number> <widget class="QTextEdit" name="te_TextMessagesCOM1">
</property> <property name="documentTitle">
<item> <string>COM1</string>
<widget class="QTextEdit" name="te_TextMessagesCOM1"> </property>
<property name="lineWrapMode"> <property name="lineWrapMode">
<enum>QTextEdit::NoWrap</enum> <enum>QTextEdit::NoWrap</enum>
</property> </property>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="tabStopWidth"> <property name="tabStopWidth">
<number>10</number> <number>10</number>
</property> </property>
</widget>
</item>
</layout>
</widget> </widget>
</item> <widget class="QWidget" name="tb_TextMessagesCOM2">
</layout> <attribute name="title">
</widget> <string>COM2</string>
<widget class="QWidget" name="tb_TextMessagesCOM2"> </attribute>
<attribute name="title"> <layout class="QVBoxLayout" name="vl_TextMessagesCom2">
<string>COM2</string> <property name="spacing">
</attribute> <number>2</number>
<layout class="QVBoxLayout" name="vl_TextMessagesCOM2"> </property>
<property name="spacing"> <property name="leftMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="leftMargin"> <property name="topMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="topMargin"> <property name="rightMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="rightMargin"> <property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </property>
<property name="bottomMargin"> <item>
<number>2</number> <widget class="QTextEdit" name="te_TextMessagesCOM2">
</property> <property name="documentTitle">
<item> <string>COM2</string>
<widget class="QTextEdit" name="te_TextMessagesCOM2"> </property>
<property name="lineWrapMode"> <property name="lineWrapMode">
<enum>QTextEdit::NoWrap</enum> <enum>QTextEdit::NoWrap</enum>
</property> </property>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="tabStopWidth"> <property name="tabStopWidth">
<number>10</number> <number>10</number>
</property> </property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </widget>
</layout> </item>
</widget> <item>
<widget class="QLineEdit" name="le_textMessages">
<property name="toolTip">
<string>command line (e.g. &quot;.com1&quot;, &quot;.x&quot;, &quot;.msg com1&quot;)</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>