Ref T111, cockpit COM form to be used in cockpit component and dummy driver

This commit is contained in:
Klaus Basan
2017-08-06 17:54:09 +02:00
committed by Mathew Sutcliffe
parent 9040665173
commit 4013154a20
3 changed files with 786 additions and 0 deletions

View File

@@ -0,0 +1,180 @@
/* Copyright (C) 2017
* swift project Community / Contributors
*
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
#include "cockpitcomform.h"
#include "ui_cockpitcomform.h"
#include "blackmisc/logmessage.h"
#include <QPushButton>
using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Audio;
using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Simulation;
using namespace BlackGui::Components;
namespace BlackGui
{
namespace Editors
{
CCockpitComForm::CCockpitComForm(QWidget *parent) :
CForm(parent),
ui(new Ui::CCockpitComForm)
{
ui->setupUi(this);
// SELCAL pairs in cockpit
ui->frp_ComPanelSelcalBottom->clear();
connect(ui->tb_ComPanelSelcalTest, &QPushButton::clicked, this, &CCockpitComForm::testSelcal);
// XPdr
connect(ui->cbp_ComPanelTransponderMode, &CTransponderModeSelector::transponderModeChanged, this, &CCockpitComForm::transponderModeChanged);
connect(ui->cbp_ComPanelTransponderMode, &CTransponderModeSelector::transponderStateIdentEnded, this, &CCockpitComForm::transponderStateIdentEnded);
// COM GUI events
connect(ui->tb_ComPanelCom1Toggle, &QPushButton::clicked, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->tb_ComPanelCom2Toggle, &QPushButton::clicked, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->ds_ComPanelCom1Active, &QDoubleSpinBox::editingFinished, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->ds_ComPanelCom2Active, &QDoubleSpinBox::editingFinished, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->ds_ComPanelCom1Standby, &QDoubleSpinBox::editingFinished, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->ds_ComPanelCom2Standby, &QDoubleSpinBox::editingFinished, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->sbp_ComPanelTransponder, &QDoubleSpinBox::editingFinished, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->cbp_ComPanelTransponderMode, &CTransponderModeSelector::transponderModeChanged, this, &CCockpitComForm::onGuiChangedCockpitValues);
connect(ui->frp_ComPanelSelcalBottom, &CSelcalCodeSelector::valueChanged, this, &CCockpitComForm::onGuiChangedCockpitValues);
}
CCockpitComForm::~CCockpitComForm()
{ }
void CCockpitComForm::setReadOnly(bool readonly)
{
ui->ds_ComPanelCom1Active->setReadOnly(readonly);
ui->ds_ComPanelCom2Active->setReadOnly(readonly);
ui->ds_ComPanelCom1Standby->setReadOnly(readonly);
ui->ds_ComPanelCom2Standby->setReadOnly(readonly);
ui->cbp_ComPanelTransponderMode->setDisabled(!readonly);
ui->tb_ComPanelCom1Toggle->setEnabled(!readonly);
ui->tb_ComPanelCom2Toggle->setEnabled(!readonly);
}
void CCockpitComForm::setSelectOnly()
{
this->setReadOnly(true);
}
CStatusMessageList CCockpitComForm::validate(bool nested) const
{
Q_UNUSED(nested);
CStatusMessageList msgs;
return msgs;
}
void CCockpitComForm::changeVoiceRoomStatus(const Audio::CVoiceRoomList &selectedVoiceRooms)
{
Q_ASSERT_X(selectedVoiceRooms.size() == 2, Q_FUNC_INFO, "Expect 2 voice rooms");
const CVoiceRoom room1 = selectedVoiceRooms[0];
const CVoiceRoom room2 = selectedVoiceRooms[1];
ui->led_ComPanelCom1->setOn(room1.isConnected());
ui->led_ComPanelCom2->setOn(room2.isConnected());
}
void CCockpitComForm::initLeds()
{
const CLedWidget::LedShape shape = CLedWidget::Rounded;
ui->led_ComPanelCom1->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "COM1 connected", "COM1 disconnected", 14);
ui->led_ComPanelCom2->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "COM2 connected", "COM2 disconnected", 14);
}
CSimulatedAircraft CCockpitComForm::cockpitValuesToAircraftObject()
{
CSimulatedAircraft comAircraft;
CTransponder transponder = comAircraft.getTransponder();
CComSystem com1 = comAircraft.getCom1System();
CComSystem com2 = comAircraft.getCom2System();
//
// Transponder
//
const QString transponderCode = QString::number(ui->sbp_ComPanelTransponder->value());
if (CTransponder::isValidTransponderCode(transponderCode))
{
transponder.setTransponderCode(transponderCode);
}
else
{
CLogMessage(this).validationWarning("Wrong transponder code, reset");
ui->sbp_ComPanelTransponder->setValue(transponder.getTransponderCode());
}
transponder.setTransponderMode(ui->cbp_ComPanelTransponderMode->getSelectedTransponderMode());
//
// COM units
//
com1.setFrequencyActiveMHz(ui->ds_ComPanelCom1Active->value());
com1.setFrequencyStandbyMHz(ui->ds_ComPanelCom1Standby->value());
com2.setFrequencyActiveMHz(ui->ds_ComPanelCom2Active->value());
com2.setFrequencyStandbyMHz(ui->ds_ComPanelCom2Standby->value());
this->updateFrequencyDisplaysFromComSystems(com1, com2); // back annotation after rounding
comAircraft.setCom1System(com1);
comAircraft.setCom2System(com2);
comAircraft.setTransponder(transponder);
return comAircraft;
}
void CCockpitComForm::updateFrequencyDisplaysFromComSystems(const CComSystem &com1, const CComSystem &com2)
{
double freq = com1.getFrequencyActive().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != ui->ds_ComPanelCom1Active->value())
{
ui->ds_ComPanelCom1Active->setValue(freq);
}
freq = com2.getFrequencyActive().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != ui->ds_ComPanelCom2Active->value())
{
ui->ds_ComPanelCom2Active->setValue(freq);
}
freq = com1.getFrequencyStandby().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != ui->ds_ComPanelCom1Standby->value())
{
ui->ds_ComPanelCom1Standby->setValue(freq);
}
freq = com2.getFrequencyStandby().valueRounded(CFrequencyUnit::MHz(), 3);
if (freq != ui->ds_ComPanelCom2Standby->value())
{
ui->ds_ComPanelCom2Standby->setValue(freq);
}
}
void CCockpitComForm::onGuiChangedCockpitValues()
{
const QObject *sender = QObject::sender();
if (sender == ui->tb_ComPanelCom1Toggle)
{
if (ui->ds_ComPanelCom1Standby->value() == ui->ds_ComPanelCom1Active->value()) { return; }
const double f = ui->ds_ComPanelCom1Active->value();
ui->ds_ComPanelCom1Active->setValue(ui->ds_ComPanelCom1Standby->value());
ui->ds_ComPanelCom1Standby->setValue(f);
}
else if (sender == ui->tb_ComPanelCom2Toggle)
{
if (ui->ds_ComPanelCom2Standby->value() == ui->ds_ComPanelCom2Active->value()) { return; }
const double f = ui->ds_ComPanelCom2Active->value();
ui->ds_ComPanelCom2Active->setValue(ui->ds_ComPanelCom2Standby->value());
ui->ds_ComPanelCom2Standby->setValue(f);
}
const CSimulatedAircraft aircraft = this->cockpitValuesToAircraftObject();
emit this->guiChangedCockpitValues(aircraft);
}
} // ns
} // ns

View File

@@ -0,0 +1,80 @@
/* Copyright (C) 2017
* swift project Community / Contributors
*
* This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKGUI_EDITORS_COCKPITCOMFORM_H
#define BLACKGUI_EDITORS_COCKPITCOMFORM_H
#include "form.h"
#include "blackmisc/simulation/simulatedaircraft.h"
#include "blackmisc/audio/voiceroomlist.h"
#include <QFrame>
#include <QScopedPointer>
namespace Ui { class CCockpitComForm; }
namespace BlackGui
{
namespace Editors
{
/*!
* COM elements
*/
class CCockpitComForm : public CForm
{
Q_OBJECT
public:
//! Constructor
explicit CCockpitComForm(QWidget *parent = nullptr);
//! Destrutor
virtual ~CCockpitComForm();
//! Change the voice room status
void changeVoiceRoomStatus(const BlackMisc::Audio::CVoiceRoomList &selectedVoiceRooms);
//! \name Form class implementations
//! @{
virtual void setReadOnly(bool readonly) override;
virtual void setSelectOnly() override;
virtual BlackMisc::CStatusMessageList validate(bool nested = false) const override;
//! @}
signals:
//! \copydoc BlackGui::Components::CTransponderModeSelector::transponderModeChanged
void transponderModeChanged(BlackMisc::Aviation::CTransponder::TransponderMode newMode);
//! \copydoc BlackGui::Components::CTransponderModeSelector::transponderStateIdentEnded
void transponderStateIdentEnded();
//! Request to test SELCAL
void testSelcal();
//! GUI values changed
void guiChangedCockpitValues(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
private:
//! Init LEDs
void initLeds();
//! Cockpit values to aircraft
BlackMisc::Simulation::CSimulatedAircraft cockpitValuesToAircraftObject();
//! COM frequencies displayed
void updateFrequencyDisplaysFromComSystems(const BlackMisc::Aviation::CComSystem &com1, const BlackMisc::Aviation::CComSystem &com2);
//! GUI values have been changed, will trigger CCockpitComForm::guiChangedCockpitValues
void onGuiChangedCockpitValues();
QScopedPointer<Ui::CCockpitComForm> ui;
};
} // ns
} // ns
#endif // guard

View File

@@ -0,0 +1,526 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CCockpitComForm</class>
<widget class="QFrame" name="CCockpitComForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>292</width>
<height>95</height>
</rect>
</property>
<property name="windowTitle">
<string>Frame</string>
</property>
<layout class="QHBoxLayout" name="hl_CockpitComForm" stretch="1,2">
<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="QFrame" name="fr_Com">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<layout class="QGridLayout" name="gl_Com">
<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>
<property name="spacing">
<number>4</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="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="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="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="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom1Standby">
<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">
<widget class="QToolButton" name="tb_ComPanelCom1Toggle">
<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="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_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="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom1Active">
<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_ComPanelCom1" native="true"/>
</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_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="1" column="0" colspan="2">
<widget class="QDoubleSpinBox" name="ds_ComPanelCom2Standby">
<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">
<widget class="QToolButton" name="tb_ComPanelCom2Toggle">
<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>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="fr_Xpdr">
<property name="lineWidth">
<number>0</number>
</property>
<layout class="QGridLayout" name="gl_Xpdr">
<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>
<property name="spacing">
<number>4</number>
</property>
<item row="0" column="0">
<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="0" column="1">
<widget class="BlackGui::Components::CCockpitTransponderModeLedsComponent" name="comp_TransponderLeds"/>
</item>
<item row="1" column="0" colspan="2">
<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="BlackGui::Components::CTransponderCodeSpinBox" name="sbp_ComPanelTransponder">
<property name="minimumSize">
<size>
<width>0</width>
<height>18</height>
</size>
</property>
<property name="maximum">
<number>7777</number>
</property>
<property name="value">
<number>7000</number>
</property>
</widget>
</item>
<item>
<widget class="BlackGui::Components::CTransponderModeSelector" name="cbp_ComPanelTransponderMode"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="qw_ComPanelSelcal" native="true">
<layout class="QGridLayout" name="gl_ComPanelSelect">
<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="verticalSpacing">
<number>0</number>
</property>
<item row="1" column="0" colspan="2">
<widget class="BlackGui::Components::CSelcalCodeSelector" name="frp_ComPanelSelcalBottom"/>
</item>
<item row="0" column="0" colspan="2" alignment="Qt::AlignLeft">
<widget class="QFrame" name="fr_ComPanelSelcalTop">
<layout class="QHBoxLayout" name="hl_ComPanelSelcalTop">
<property name="spacing">
<number>0</number>
</property>
<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="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>
<widget class="QToolButton" name="tb_ComPanelSelcalTest">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>test SELCAL</string>
</property>
<property name="text">
<string>test SELCAL</string>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/speaker-volume.png</normaloff>:/diagona/icons/diagona/icons/speaker-volume.png</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BlackGui::Components::CSelcalCodeSelector</class>
<extends>QFrame</extends>
<header>blackgui/components/selcalcodeselector.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::CLedWidget</class>
<extends>QWidget</extends>
<header>blackgui/led.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>BlackGui::Components::CTransponderModeSelector</class>
<extends>QComboBox</extends>
<header>blackgui/components/transpondermodeselector.h</header>
</customwidget>
<customwidget>
<class>BlackGui::Components::CTransponderCodeSpinBox</class>
<extends>QSpinBox</extends>
<header>blackgui/components/transpondercodespinbox.h</header>
</customwidget>
<customwidget>
<class>BlackGui::Components::CCockpitTransponderModeLedsComponent</class>
<extends>QFrame</extends>
<header>blackgui/components/cockpittranspondermodeledscomponent.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../../blackmisc/blackmisc.qrc"/>
</resources>
<connections/>
</ui>