refs #335, added functionality for com components

* set COM unit values
* set values in context
This commit is contained in:
Klaus Basan
2014-10-22 15:00:17 +02:00
committed by Roland Winklmeier
parent 48741c218f
commit fa60703a1d
3 changed files with 729 additions and 392 deletions

View File

@@ -10,8 +10,17 @@
#include "cockpitcomcomponent.h"
#include "ui_cockpitcomcomponent.h"
#include "../stylesheetutility.h"
#include "blackcore/context_network.h"
#include "blackmisc/avaircraft.h"
#include "blackmisc/logmessage.h"
#include <QDoubleSpinBox>
#include <QPushButton>
using namespace BlackGui;
using namespace BlackCore;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::PhysicalQuantities;
namespace BlackGui
{
@@ -23,6 +32,7 @@ namespace BlackGui
ui(new Ui::CCockpitMainComponent)
{
ui->setupUi(this);
this->initLeds();
}
CCockpitComComponent::~CCockpitComComponent()
@@ -34,5 +44,225 @@ namespace BlackGui
CStyleSheetUtility::useStyleSheetInDerivedWidget(this);
}
void CCockpitComComponent::runtimeHasBeenSet()
{
// SELCAL pairs in cockpit
this->ui->cb_ComPanelSelcalSelector1->clear();
this->ui->cb_ComPanelSelcalSelector2->clear();
this->ui->cb_ComPanelSelcalSelector1->addItems(BlackMisc::Aviation::CSelcal::codePairs());
this->ui->cb_ComPanelSelcalSelector2->addItems(BlackMisc::Aviation::CSelcal::codePairs());
connect(this->ui->pb_ComPanelSelcalTest, &QPushButton::clicked, this, &CCockpitComComponent::ps_testSelcal);
// COM GUI events
connect(this->ui->pb_ComPanelCom1Toggle, &QPushButton::clicked, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->pb_ComPanelCom2Toggle, &QPushButton::clicked, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->ds_ComPanelCom1Active, &QDoubleSpinBox::editingFinished, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->ds_ComPanelCom2Active, &QDoubleSpinBox::editingFinished, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->ds_ComPanelCom1Standby, &QDoubleSpinBox::editingFinished, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->ds_ComPanelCom2Standby, &QDoubleSpinBox::editingFinished, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->ds_ComPanelTransponder, &QDoubleSpinBox::editingFinished, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
connect(this->ui->cbp_ComPanelTransponderMode, &CTransponderModeSelector::valueChanged, this, &CCockpitComComponent::ps_guiChangedCockpitValues);
// hook up with changes from own aircraft context
Q_ASSERT(this->getIContextOwnAircraft());
this->connect(this->getIContextOwnAircraft(), &IContextOwnAircraft::changedAircraftCockpit, this, &CCockpitComComponent::ps_updateCockpitFromContext);
}
void CCockpitComComponent::ps_guiChangedCockpitValues()
{
QObject *sender = QObject::sender();
if (sender == this->ui->pb_ComPanelCom1Toggle)
{
if (this->ui->ds_ComPanelCom1Standby->value() == this->ui->ds_ComPanelCom1Active->value()) return;
double f = this->ui->ds_ComPanelCom1Active->value();
this->ui->ds_ComPanelCom1Active->setValue(this->ui->ds_ComPanelCom1Standby->value());
this->ui->ds_ComPanelCom1Standby->setValue(f);
}
else if (sender == this->ui->pb_ComPanelCom2Toggle)
{
if (this->ui->ds_ComPanelCom2Standby->value() == this->ui->ds_ComPanelCom2Active->value()) return;
double f = this->ui->ds_ComPanelCom2Active->value();
this->ui->ds_ComPanelCom2Active->setValue(this->ui->ds_ComPanelCom2Standby->value());
this->ui->ds_ComPanelCom2Standby->setValue(f);
}
else if (sender == this->ui->cbp_ComPanelTransponderMode)
{
// toggle the external button
if (this->ui->cbp_ComPanelTransponderMode->isIdentSelected())
{
// todo
}
}
const CAircraft ownAircraft = this->cockpitValuesToAircraftObject();
this->updateOwnCockpitInContext(ownAircraft);
}
void CCockpitComComponent::ps_updateCockpitFromContext(const CAircraft &ownAircraft, const QString &originator)
{
if (originator == CCockpitComComponent::cockpitOriginator()) return; // comes from myself
// update GUI elements
// avoid unnecessary change events as far as possible
const CComSystem com1 = ownAircraft.getCom1System(); // aircraft just updated or set from context
const CComSystem com2 = ownAircraft.getCom2System();
const CTransponder transponder = ownAircraft.getTransponder();
// update the frequencies
this->updateComFrequencyDisplaysFromComSystems(com1, com2);
// update transponder
qint32 tc = transponder.getTransponderCode();
if (tc != static_cast<qint32>(this->ui->ds_ComPanelTransponder->value()))
this->ui->ds_ComPanelTransponder->setValue(tc);
this->ui->cbp_ComPanelTransponderMode->setSelectedTransponderMode(transponder.getTransponderMode());
if (this->getIContextNetwork())
{
CAtcStationList selectedStations = this->getIContextNetwork()->getSelectedAtcStations();
CAtcStation com1Station = selectedStations[0];
CAtcStation com2Station = selectedStations[1];
if (com1Station.getCallsign().isEmpty())
{
this->ui->lbl_ComPanelCom1Active->setToolTip("");
this->ui->led_ComPanelCom1->setOn(false);
}
else
{
this->ui->lbl_ComPanelCom1Active->setToolTip(com1Station.getCallsign().getStringAsSet());
this->ui->led_ComPanelCom1->setOn(true);
}
if (com2Station.getCallsign().isEmpty())
{
this->ui->lbl_ComPanelCom2Active->setToolTip("");
this->ui->led_ComPanelCom2->setOn(false);
}
else
{
this->ui->lbl_ComPanelCom2Active->setToolTip(com2Station.getCallsign().getStringAsSet());
this->ui->led_ComPanelCom2->setOn(true);
}
}
}
void CCockpitComComponent::ps_testSelcal()
{
QString selcalCode = this->getSelcalCode();
if (!CSelcal::isValidCode(selcalCode))
{
CLogMessage().validationWarning("Invalid SELCAL codde");
}
else if (this->getIContextAudio())
{
CSelcal selcal(selcalCode);
this->getIContextAudio()->playSelcalTone(selcal);
}
else
{
CLogMessage().validationWarning("No audio available");
}
}
QString CCockpitComComponent::getSelcalCode() const
{
QString selcal = this->ui->cb_ComPanelSelcalSelector1->currentText().append(this->ui->cb_ComPanelSelcalSelector2->currentText());
return selcal;
}
void CCockpitComComponent::initLeds()
{
CLedWidget::LedShape shape = CLedWidget::Rounded;
this->ui->led_ComPanelCom1->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "COM1 connected", "COM1 disconnected", 14);
this->ui->led_ComPanelCom2->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "COM2 connected", "COM2 disconnected", 14);
}
CAircraft CCockpitComComponent::cockpitValuesToAircraftObject()
{
CAircraft ownAircraft = this->getOwnAircraft();
CTransponder transponder = ownAircraft.getTransponder();
CComSystem com1 = ownAircraft.getCom1System();
CComSystem com2 = ownAircraft.getCom2System();
//
// Transponder
//
QString transponderCode = QString::number(qRound(this->ui->ds_ComPanelTransponder->value()));
if (CTransponder::isValidTransponderCode(transponderCode))
{
transponder.setTransponderCode(transponderCode);
}
else
{
CLogMessage().validationWarning("Wrong transponder code, reset");
this->ui->ds_ComPanelTransponder->setValue(transponder.getTransponderCode());
}
transponder.setTransponderMode(this->ui->cbp_ComPanelTransponderMode->getSelectedTransponderMode());
//
// COM units
//
com1.setFrequencyActiveMHz(this->ui->ds_ComPanelCom1Active->value());
com1.setFrequencyStandbyMHz(this->ui->ds_ComPanelCom1Standby->value());
com2.setFrequencyActiveMHz(this->ui->ds_ComPanelCom2Active->value());
com2.setFrequencyStandbyMHz(this->ui->ds_ComPanelCom2Standby->value());
this->updateComFrequencyDisplaysFromComSystems(com1, com2); // back annotation after rounding
ownAircraft.setCom1System(com1);
ownAircraft.setCom2System(com2);
ownAircraft.setTransponder(transponder);
return ownAircraft;
}
CAircraft CCockpitComComponent::getOwnAircraft() const
{
Q_ASSERT(this->getIContextOwnAircraft());
if (!this->getIContextOwnAircraft()) return CAircraft();
return this->getIContextOwnAircraft()->getOwnAircraft();
}
bool CCockpitComComponent::updateOwnCockpitInContext(const CAircraft &ownAircraft)
{
return this->getIContextOwnAircraft()->updateOwnCockpit(ownAircraft.getCom1System(), ownAircraft.getCom2System(), ownAircraft.getTransponder(), CCockpitComComponent::cockpitOriginator());
}
void CCockpitComComponent::updateComFrequencyDisplaysFromComSystems(const CComSystem &com1, const CComSystem &com2)
{
double freq = com1.getFrequencyActive().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != this->ui->ds_ComPanelCom1Active->value())
{
this->ui->ds_ComPanelCom1Active->setValue(freq);
}
freq = com2.getFrequencyActive().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != this->ui->ds_ComPanelCom2Active->value())
{
this->ui->ds_ComPanelCom2Active->setValue(freq);
}
freq = com1.getFrequencyStandby().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != this->ui->ds_ComPanelCom1Standby->value())
{
this->ui->ds_ComPanelCom1Standby->setValue(freq);
}
freq = com2.getFrequencyStandby().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != this->ui->ds_ComPanelCom2Standby->value())
{
this->ui->ds_ComPanelCom2Standby->setValue(freq);
}
}
const QString CCockpitComComponent::cockpitOriginator()
{
// string is generated once, the timestamp allows to use multiple
// components (as long as they are not generated in the same ms)
static const QString o = QString("COCKPITCOMCOMPONENT:").append(QString::number(QDateTime::currentMSecsSinceEpoch()));
return o;
}
} // namespace
} // namespace

View File

@@ -11,6 +11,7 @@
#define BLACKGUI_COCKPITCOMCOMPONENT_H
#include "enablefordockwidgetinfoarea.h"
#include "enableforruntime.h"
#include <QFrame>
#include <QScopedPointer>
@@ -23,7 +24,8 @@ namespace BlackGui
//! The main cockpit area
class CCockpitComComponent :
public QFrame,
public CEnableForDockWidgetInfoArea
public CEnableForDockWidgetInfoArea,
public CEnableForRuntime
{
Q_OBJECT
@@ -38,7 +40,42 @@ namespace BlackGui
//! \copydoc QWidget::paintEvent
virtual void paintEvent(QPaintEvent *event) override;
//! \copydoc CEnableForRuntime::runtimeHasBeenSet
virtual void runtimeHasBeenSet() override;
private slots:
//! Cockpit values have been changed in GUI
void ps_guiChangedCockpitValues();
//! Update cockpit from context
void ps_updateCockpitFromContext(const BlackMisc::Aviation::CAircraft &ownAircraft, const QString &originator);
//! Cockpit values have been changed in GUI
void ps_testSelcal();
private:
//! Init LEDs
void initLeds();
//! Cockpit values to aircraft
BlackMisc::Aviation::CAircraft cockpitValuesToAircraftObject();
//! Get own aircraft
BlackMisc::Aviation::CAircraft getOwnAircraft() const;
//! Current SELCAL code
QString getSelcalCode() const;
//! Cockpit updates
bool updateOwnCockpitInContext(const BlackMisc::Aviation::CAircraft &ownAircraft);
//! COM frequencies displayed
void updateComFrequencyDisplaysFromComSystems(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2);
//! Identifies sender of cockpit updates
// TODO: Check if to be migrated to COriginator
static const QString cockpitOriginator();
QScopedPointer<Ui::CCockpitMainComponent> ui;
};

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>363</width>
<height>81</height>
<width>297</width>
<height>89</height>
</rect>
</property>
<property name="minimumSize">
@@ -52,393 +52,7 @@
<property name="verticalSpacing">
<number>2</number>
</property>
<item row="0" column="1">
<widget class="QWidget" name="qw_ComPanelCom2Active" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom2Active">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="1">
<widget class="QFrame" name="qf_ComPanelCom2ActiveValid">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComAndTransponderCom2Active">
<property name="text">
<string>COM2:</string>
</property>
<property name="buddy">
<cstring>qw_ComPanelCom2Active</cstring>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLineEdit" name="le_ComPanelCom2Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string>DDD.990</string>
</property>
<property name="text">
<string>128.800</string>
</property>
<property name="maxLength">
<number>7</number>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QWidget" name="qw_ComPanelCom1Active" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom1Active">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComAndTransponderCom1Active">
<property name="text">
<string>COM1:</string>
</property>
<property name="buddy">
<cstring>qw_ComPanelCom1Active</cstring>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLineEdit" name="le_ComPanelCom1Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string>DDD.990</string>
</property>
<property name="text">
<string>123.750</string>
</property>
<property name="maxLength">
<number>7</number>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QFrame" name="qf_ComPanelCom1ActiveValid">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="qw_ComPanelCom1Standby" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom1Standby">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelCom1Standby">
<property name="text">
<string>standby:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QLineEdit" name="le_ComPanelCom1Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string>DDD.990</string>
</property>
<property name="text">
<string>123.750</string>
</property>
<property name="maxLength">
<number>7</number>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pb_ComPanelCom1Toggle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Toggle COM 1 standby/active</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QWidget" name="qw_ComPanelCom2Standby" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom2Standby">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComAndTransponderCom2Standby">
<property name="text">
<string>standby:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="QLineEdit" name="le_ComPanelCom2Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string>DDD.990</string>
</property>
<property name="text">
<string>123.750</string>
</property>
<property name="maxLength">
<number>7</number>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pb_ComPanelCom2Toggle">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Toggle COM 2 standby/active</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QWidget" name="qw_ComPanelTransponder" native="true">
<layout class="QGridLayout" name="gl_ComPanelTransponderTop">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelTransponder">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="text">
<string>XPDR:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QFrame" name="fr_ComPanelTransponder">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="hl_ComPanelTransponder">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="le_ComPanelTransponderCode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="inputMask">
<string>9999</string>
</property>
<property name="text">
<string>7000</string>
</property>
<property name="maxLength">
<number>4</number>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="BlackGui::CTransponderModeSelector" name="cbp_ComPanelTransponderMode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="2">
<item row="2" column="2">
<widget class="QWidget" name="qw_ComPanelSelcal" native="true">
<layout class="QGridLayout" name="gl_ComPanelSelect">
<property name="leftMargin">
@@ -535,15 +149,21 @@
</property>
<item>
<widget class="QLabel" name="lbl_ComSelcalSelcal">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>SELCAL:</string>
</property>
</widget>
</item>
<item alignment="Qt::AlignRight">
<item alignment="Qt::AlignHCenter">
<widget class="QPushButton" name="pb_ComPanelSelcalTest">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -566,6 +186,450 @@
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QWidget" name="qw_ComPanelCom2Active" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom2Active">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelCom2Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>COM2:</string>
</property>
<property name="buddy">
<cstring>qw_ComPanelCom2Active</cstring>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom2Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>118.000000000000000</double>
</property>
<property name="maximum">
<double>136.974999999999994</double>
</property>
<property name="singleStep">
<double>0.025000000000000</double>
</property>
<property name="value">
<double>119.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignHCenter">
<widget class="BlackGui::CLedWidget" name="led_ComPanelCom2" native="true"/>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QWidget" name="qw_ComPanelCom1Standby" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom1Standby">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelCom1Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>standby:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom1Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>118.000000000000000</double>
</property>
<property name="maximum">
<double>136.974999999999994</double>
</property>
<property name="singleStep">
<double>0.025000000000000</double>
</property>
<property name="value">
<double>119.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignHCenter">
<widget class="QPushButton" name="pb_ComPanelCom1Toggle">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Toggle COM 1 standby/active</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="1">
<widget class="QWidget" name="qw_ComPanelCom2Standby" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom2Standby">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelCom2Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>standby:</string>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignHCenter">
<widget class="QPushButton" name="pb_ComPanelCom2Toggle">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Toggle COM 2 standby/active</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</normaloff>:/diagona/icons/diagona/icons/arrow-circle-double-135.png</iconset>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom2Standby">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>118.000000000000000</double>
</property>
<property name="maximum">
<double>136.974999999999994</double>
</property>
<property name="singleStep">
<double>0.025000000000000</double>
</property>
<property name="value">
<double>119.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<widget class="QWidget" name="qw_ComPanelTransponder" native="true">
<layout class="QGridLayout" name="gl_ComPanelTransponderTop">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelTransponder">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="text">
<string>XPDR:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QFrame" name="fr_ComPanelTransponder">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="hl_ComPanelTransponder">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QDoubleSpinBox" name="ds_ComPanelTransponder">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>18</height>
</size>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="maximum">
<double>7777.000000000000000</double>
</property>
<property name="value">
<double>7000.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="BlackGui::CTransponderModeSelector" name="cbp_ComPanelTransponderMode">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="QWidget" name="qw_ComPanelCom1Active" native="true">
<layout class="QGridLayout" name="gl_ComPanelCom1Active">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom1Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="minimum">
<double>118.000000000000000</double>
</property>
<property name="maximum">
<double>136.974999999999994</double>
</property>
<property name="singleStep">
<double>0.025000000000000</double>
</property>
<property name="value">
<double>119.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_ComPanelCom1Active">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>COM1:</string>
</property>
<property name="buddy">
<cstring>qw_ComPanelCom1Active</cstring>
</property>
</widget>
</item>
<item row="0" column="1" alignment="Qt::AlignHCenter">
<widget class="BlackGui::CLedWidget" name="led_ComPanelCom1" native="true"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
@@ -576,6 +640,12 @@
<extends>QComboBox</extends>
<header>blackgui/transpondermodeselector.h</header>
</customwidget>
<customwidget>
<class>BlackGui::CLedWidget</class>
<extends>QWidget</extends>
<header>blackgui/led.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../../blackmisc/blackmisc.qrc"/>