Ref T429, allow to set heading in emulated driver so PBH can be tested

This commit is contained in:
Klaus Basan
2018-11-09 22:45:36 +01:00
parent ee8af9f4c6
commit c88d02ff5f
7 changed files with 288 additions and 137 deletions

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>215</width>
<height>168</height>
<width>272</width>
<height>162</height>
</rect>
</property>
<property name="windowTitle">
@@ -21,27 +21,17 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="BlackGui::Components::CSimulatorSelector" name="comp_EmulatedSimulatorSelector">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="3" column="0">
<widget class="QLabel" name="lbl_DefaultModel">
<property name="text">
<string>Default model:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="BlackGui::Components::CDbModelKeyCompleter" name="lep_DefaultModel"/>
</item>
<item row="5" column="0" colspan="2">
<item row="6" column="0" colspan="2">
<widget class="QWidget" name="wi_Buttons" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -67,30 +57,71 @@
</layout>
</widget>
</item>
<item row="3" column="1">
<item row="4" column="1">
<widget class="QCheckBox" name="cb_LogFunctionCalls">
<property name="text">
<string>function calls</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="lbl_Logging">
<property name="text">
<string>Logging:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="lbl_OwnModel">
<property name="text">
<string>Own model:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="BlackGui::Components::CDbModelKeyCompleter" name="lep_OwnModel"/>
</item>
<item row="0" column="1">
<widget class="QWidget" name="wi_EmulatedSimulator" native="true">
<layout class="QHBoxLayout" name="hl_EmulatedSimulator">
<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::CSimulatorSelector" name="comp_EmulatedSimulatorSelector">
<property name="minimumSize">
<size>
<width>125</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="hs_EmulatedSimulator">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<customwidgets>

View File

@@ -73,10 +73,12 @@ namespace BlackGui
CCoordinateForm::~CCoordinateForm()
{ }
void CCoordinateForm::setCoordinate(const ICoordinateGeodetic &coordinate)
bool CCoordinateForm::setCoordinate(const ICoordinateGeodetic &coordinate)
{
if (coordinate == m_coordinate) { return false; }
m_coordinate = coordinate;
const CLatitude lat = coordinate.latitude();
const QString latWgs = lat.toWgs84();
ui->le_Latitude->setText(latWgs);
@@ -117,7 +119,11 @@ namespace BlackGui
ui->le_LngSec->setText(lngParts.secAsString());
ui->le_LngSecFrag->setText(lngParts.fractionalSecAsString());
ui->le_Elevation->setText(coordinate.geodeticHeightAsString());
const QString elvString = coordinate.geodeticHeightAsString();
ui->le_Elevation->setText(elvString);
ui->lblp_ElvCheck->setTicked(!elvString.isEmpty());
return true;
}
void CCoordinateForm::setReadOnly(bool readonly)
@@ -143,6 +149,7 @@ namespace BlackGui
CStatusMessageList CCoordinateForm::validate(bool nested) const
{
// not implemented
Q_UNUSED(nested);
CStatusMessageList ml;
return ml;

View File

@@ -40,7 +40,7 @@ namespace BlackGui
BlackMisc::Geo::CCoordinateGeodetic getCoordinate() const { return m_coordinate; }
//! Set the coordinate
void setCoordinate(const BlackMisc::Geo::ICoordinateGeodetic &coordinate);
bool setCoordinate(const BlackMisc::Geo::ICoordinateGeodetic &coordinate);
//! \name Form class implementations
//! @{

View File

@@ -9,6 +9,8 @@
#include "situationform.h"
#include "ui_situationform.h"
#include "blackgui/guiapplication.h"
#include "blackcore/context/contextownaircraft.h"
#include "blackmisc/pq/pressure.h"
#include "blackmisc/pq/angle.h"
#include "blackmisc/stringutils.h"
@@ -36,16 +38,21 @@ namespace BlackGui
connect(ui->hs_Bank, &QSlider::valueChanged, this, &CSituationForm::bankSliderChanged);
connect(ui->hs_Pitch, &QSlider::valueChanged, this, &CSituationForm::pitchSliderChanged);
connect(ui->hs_Heading, &QSlider::valueChanged, this, &CSituationForm::headingSliderChanged);
connect(ui->hs_Pressure, &QSlider::valueChanged, this, &CSituationForm::pressureSliderChanged);
connect(ui->le_Bank, &QLineEdit::editingFinished, this, &CSituationForm::bankEntered);
connect(ui->le_Pitch, &QLineEdit::editingFinished, this, &CSituationForm::pitchEntered);
connect(ui->le_Pressure, &QLineEdit::editingFinished, this, &CSituationForm::pressureEntered);
connect(ui->le_Heading, &QLineEdit::editingFinished, this, &CSituationForm::headingEntered);
connect(ui->tb_ResetBank, &QToolButton::clicked, this, &CSituationForm::resetBank);
connect(ui->tb_ResetPitch, &QToolButton::clicked, this, &CSituationForm::resetPitch);
connect(ui->tb_ResetHeading, &QToolButton::clicked, this, &CSituationForm::resetHeading);
connect(ui->tb_ResetPressure, &QToolButton::clicked, this, &CSituationForm::resetPressure);
connect(ui->pb_Set, &QPushButton::clicked, this, &CSituationForm::changeAircraftSituation);
connect(ui->pb_SetEnvironment, &QPushButton::clicked, this, &CSituationForm::changeAircraftSituation);
connect(ui->comp_Coordinate, &CCoordinateForm::changedCoordinate, this, &CSituationForm::changeAircraftSituation);
connect(ui->pb_SetOwnAircraft, &QPushButton::released, this, &CSituationForm::changeAircraftSituation);
connect(ui->pb_SetEnvironment, &QPushButton::released, this, &CSituationForm::changeAircraftSituation);
connect(ui->pb_PresetOwnAircraft, &QPushButton::released, this, &CSituationForm::presetOwnAircraftSituation);
connect(ui->comp_Coordinate, &CCoordinateForm::changedCoordinate, this, &CSituationForm::onCoordinateChanged);
}
CSituationForm::~CSituationForm()
@@ -54,6 +61,9 @@ namespace BlackGui
void CSituationForm::setSituation(const BlackMisc::Aviation::CAircraftSituation &situation)
{
ui->comp_Coordinate->setCoordinate(situation);
this->bankSliderChanged(situation.getBank().valueInteger(CAngleUnit::deg()));
this->pitchSliderChanged(situation.getPitch().valueInteger(CAngleUnit::deg()));
this->headingSliderChanged(situation.getHeading().valueInteger(CAngleUnit::deg()));
}
CAircraftSituation CSituationForm::getSituation() const
@@ -64,6 +74,7 @@ namespace BlackGui
CAircraftSituation s(position);
s.setBank(this->getBankAngle());
s.setPitch(this->getPitchAngle());
s.setHeading(CHeading(this->getHeadingAngle(), CHeading::True));
s.setGroundSpeed(this->getGroundSpeed());
if (!pressureAltitude.isNull() && pressureAltitude.getAltitudeType() == CAltitude::PressureAltitude)
@@ -101,6 +112,20 @@ namespace BlackGui
return CAngle::normalizeDegrees180(vd, RoundDigits);
}
CAngle CSituationForm::getHeadingAngle() const
{
return CAngle(getHeadingAngleDegrees(), CAngleUnit::deg());
}
double CSituationForm::getHeadingAngleDegrees() const
{
const QString v(ui->le_Heading->text().replace(',', '.'));
bool ok;
double vd = v.toDouble(&ok);
if (!ok) { vd = 0.0; }
return CAngle::normalizeDegrees180(vd, RoundDigits);
}
double CSituationForm::getBarometricPressureMslMillibar() const
{
const QString v(ui->le_Pressure->text().replace(',', '.'));
@@ -123,6 +148,17 @@ namespace BlackGui
void CSituationForm::setReadOnly(bool readonly)
{
ui->comp_Coordinate->setReadOnly(readonly);
ui->le_Bank->setReadOnly(readonly);
ui->le_Heading->setReadOnly(readonly);
ui->le_Pitch->setReadOnly(readonly);
ui->le_Pressure->setReadOnly(readonly);
ui->hs_Bank->setEnabled(!readonly);
ui->hs_Heading->setEnabled(!readonly);
ui->hs_Pitch->setEnabled(!readonly);
ui->hs_Pressure->setEnabled(!readonly);
this->forceStyleSheetUpdate();
}
@@ -143,7 +179,7 @@ namespace BlackGui
void CSituationForm::showSetButton(bool visible)
{
ui->pb_Set->setVisible(visible);
ui->pb_SetOwnAircraft->setVisible(visible);
}
int clampAngle(int in)
@@ -165,6 +201,13 @@ namespace BlackGui
ui->le_Pitch->setText(QString::number(value));
}
void CSituationForm::headingSliderChanged(int value)
{
const int angle = clampAngle(qRound(this->getHeadingAngleDegrees()));
if (value == angle) { return; } // avoid roundtrips
ui->le_Heading->setText(QString::number(value));
}
void CSituationForm::pressureSliderChanged(int value)
{
const int pressure = qRound(this->getBarometricPressureMslMillibar());
@@ -206,6 +249,23 @@ namespace BlackGui
ui->hs_Pitch->setValue(0);
}
void CSituationForm::headingEntered()
{
const double ad = this->getHeadingAngleDegrees();
QString n = QString::number(ad, 'g', 3 + RoundDigits);
if (ui->le_Heading->validator()) { dotToLocaleDecimalPoint(n); }
ui->le_Heading->setText(n);
const int angle = clampAngle(qRound(ad));
if (angle == ui->hs_Heading->value()) { return; } // avoid roundtrips
ui->hs_Heading->setValue(angle);
}
void CSituationForm::resetHeading()
{
ui->le_Heading->setText("0");
ui->hs_Heading->setValue(0);
}
void CSituationForm::pressureEntered()
{
const double pd = this->getBarometricPressureMslMillibar();
@@ -224,5 +284,17 @@ namespace BlackGui
ui->le_Pressure->setText(vs);
ui->hs_Pressure->setValue(v);
}
void CSituationForm::presetOwnAircraftSituation()
{
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextOwnAircraft()) { return; }
const CAircraftSituation s = sGui->getIContextOwnAircraft()->getOwnAircraftSituation();
this->setSituation(s);
}
void CSituationForm::onCoordinateChanged()
{
emit this->changeAircraftSituation();
}
} // ns
} // ns

View File

@@ -18,8 +18,6 @@
#include "blackmisc/statusmessagelist.h"
#include <QScopedPointer>
class QWidget;
namespace Ui { class CSituationForm; }
namespace BlackGui
{
@@ -74,6 +72,12 @@ namespace BlackGui
//! Get pitch angle
double getPitchAngleDegrees() const;
//! Get heading angle
BlackMisc::PhysicalQuantities::CAngle getHeadingAngle() const;
//! Get heading angle
double getHeadingAngleDegrees() const;
//! Get barometric pressure at MSL (mean sea level)
BlackMisc::PhysicalQuantities::CPressure getBarometricPressureMsl() const;
@@ -83,15 +87,24 @@ namespace BlackGui
//! Get pressure at mean sea level
double getBarometricPressureMslMillibar() const;
//! Values changed from UI @{
void bankSliderChanged(int value);
void pitchSliderChanged(int value);
void headingSliderChanged(int value);
void pressureSliderChanged(int value);
void bankEntered();
void resetBank();
void pitchEntered();
void resetPitch();
void headingEntered();
void resetHeading();
void pressureEntered();
void resetPressure();
void presetOwnAircraftSituation();
//! @}
//! Coordinate has been changed
void onCoordinateChanged();
QScopedPointer<Ui::CSituationForm> ui;
};

View File

@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>512</width>
<height>439</height>
<width>362</width>
<height>414</height>
</rect>
</property>
<property name="windowTitle">
@@ -29,19 +29,102 @@
<item>
<widget class="QGroupBox" name="gb_Situation">
<property name="title">
<string>Situation</string>
<string>Situation (PBH)</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QVBoxLayout" name="vl_Situation">
<item>
<widget class="QFrame" name="comp_Situation">
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gl_Situation" columnstretch="1,0,0,0">
<item row="0" column="0">
<widget class="QLabel" name="lbl_Bank">
<widget class="QFrame" name="fr_Situation">
<layout class="QGridLayout" name="gl_Situation" columnstretch="0,0,0,1">
<item row="2" column="1">
<widget class="QLineEdit" name="le_Heading">
<property name="text">
<string>Bank (-179° to 180°):</string>
<string>0</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QSlider" name="hs_Heading">
<property name="minimum">
<number>-179</number>
</property>
<property name="maximum">
<number>180</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="3" alignment="Qt::AlignRight">
<widget class="QPushButton" name="pb_SetOwnAircraft">
<property name="text">
<string>set</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="tb_ResetPitch">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/cross-white.png</normaloff>:/diagona/icons/diagona/icons/cross-white.png</iconset>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_GsKts">
<property name="text">
<string>Ground speed (kts):</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="sb_GsKts">
<property name="suffix">
<string>kts</string>
</property>
<property name="maximum">
<number>300</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_Heading">
<property name="text">
<string>Heading (-179° to 180°):</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QToolButton" name="tb_ResetHeading">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/cross-white.png</normaloff>:/diagona/icons/diagona/icons/cross-white.png</iconset>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_Pitch">
<property name="text">
<string>0</string>
</property>
<property name="placeholderText">
<string>deg.</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="le_Bank">
<property name="text">
<string>0</string>
</property>
<property name="placeholderText">
<string>deg.</string>
</property>
</widget>
</item>
@@ -64,23 +147,21 @@
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_Pitch">
<item row="0" column="0">
<widget class="QLabel" name="lbl_Bank">
<property name="text">
<string>0</string>
</property>
<property name="placeholderText">
<string>deg.</string>
<string>Bank (-179° to 180°):</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="le_Bank">
<item row="0" column="2">
<widget class="QToolButton" name="tb_ResetBank">
<property name="text">
<string>0</string>
<string>...</string>
</property>
<property name="placeholderText">
<string>deg.</string>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/cross-white.png</normaloff>:/diagona/icons/diagona/icons/cross-white.png</iconset>
</property>
</widget>
</item>
@@ -110,65 +191,6 @@
</property>
</widget>
</item>
<item row="3" column="0">
<spacer name="vs_Situation">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<widget class="QToolButton" name="tb_ResetBank">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/cross-white.png</normaloff>:/diagona/icons/diagona/icons/cross-white.png</iconset>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="tb_ResetPitch">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../blackmisc/blackmisc.qrc">
<normaloff>:/diagona/icons/diagona/icons/cross-white.png</normaloff>:/diagona/icons/diagona/icons/cross-white.png</iconset>
</property>
</widget>
</item>
<item row="3" column="3" alignment="Qt::AlignRight">
<widget class="QPushButton" name="pb_Set">
<property name="text">
<string>set</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_GsKts">
<property name="text">
<string>Ground speed (kts):</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="sb_GsKts">
<property name="suffix">
<string>kts</string>
</property>
<property name="maximum">
<number>300</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@@ -180,7 +202,7 @@
<property name="title">
<string>Coordinate</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<layout class="QVBoxLayout" name="vl_Coordinate">
<item>
<widget class="BlackGui::Editors::CCoordinateForm" name="comp_Coordinate">
<property name="minimumSize">
@@ -205,16 +227,10 @@
<property name="title">
<string>Environment</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="v_Environment">
<item>
<widget class="QFrame" name="comp_Environment">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gl_Environment" columnstretch="1,0,0,0">
<widget class="QFrame" name="fr_Environment">
<layout class="QGridLayout" name="gl_Environment" columnstretch="0,0,0,1">
<item row="0" column="0">
<widget class="QLabel" name="lbl_Pressure">
<property name="text">
@@ -287,25 +303,19 @@
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="pb_PresetOwnAircraft">
<property name="text">
<string>reset to own aircraft values</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
@@ -316,6 +326,24 @@
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>le_Bank</tabstop>
<tabstop>tb_ResetBank</tabstop>
<tabstop>hs_Bank</tabstop>
<tabstop>le_Pitch</tabstop>
<tabstop>tb_ResetPitch</tabstop>
<tabstop>hs_Pitch</tabstop>
<tabstop>le_Heading</tabstop>
<tabstop>tb_ResetHeading</tabstop>
<tabstop>hs_Heading</tabstop>
<tabstop>sb_GsKts</tabstop>
<tabstop>pb_SetOwnAircraft</tabstop>
<tabstop>le_Pressure</tabstop>
<tabstop>tb_ResetPressure</tabstop>
<tabstop>hs_Pressure</tabstop>
<tabstop>pb_SetEnvironment</tabstop>
<tabstop>pb_PresetOwnAircraft</tabstop>
</tabstops>
<resources>
<include location="../../blackmisc/blackmisc.qrc"/>
</resources>

View File

@@ -52,10 +52,10 @@ namespace BlackSimPlugin
connect(ui->cb_Paused, &QCheckBox::released, this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
connect(ui->cb_Simulating, &QCheckBox::released, this, &CSimulatorEmulatedMonitorDialog::onSimulatorValuesChanged);
connect(ui->editor_Situation, &CSituationForm::changeAircraftSituation, this, &CSimulatorEmulatedMonitorDialog::changeSituationFromUi);
connect(ui->editor_AircraftParts, &CAircraftPartsForm::changeAircraftParts, this, &CSimulatorEmulatedMonitorDialog::changePartsFromUi);
connect(ui->editor_Com, &CCockpitComForm::changedCockpitValues, this, &CSimulatorEmulatedMonitorDialog::changeComFromUi);
connect(ui->editor_Com, &CCockpitComForm::changedSelcal, this, &CSimulatorEmulatedMonitorDialog::changeSelcalFromUi);
connect(ui->editor_Situation, &CSituationForm::changeAircraftSituation, this, &CSimulatorEmulatedMonitorDialog::changeSituationFromUi, Qt::QueuedConnection);
connect(ui->editor_AircraftParts, &CAircraftPartsForm::changeAircraftParts, this, &CSimulatorEmulatedMonitorDialog::changePartsFromUi, Qt::QueuedConnection);
connect(ui->editor_Com, &CCockpitComForm::changedCockpitValues, this, &CSimulatorEmulatedMonitorDialog::changeComFromUi, Qt::QueuedConnection);
connect(ui->editor_Com, &CCockpitComForm::changedSelcal, this, &CSimulatorEmulatedMonitorDialog::changeSelcalFromUi, Qt::QueuedConnection);
connect(ui->pb_ResetStatistics, &QPushButton::clicked, this, &CSimulatorEmulatedMonitorDialog::resetStatistics);
connect(ui->pb_InterpolatorStopLog, &QPushButton::clicked, this, &CSimulatorEmulatedMonitorDialog::interpolatorLogButton);