diff --git a/src/blackgui/components/settingsswiftplugin.ui b/src/blackgui/components/settingsswiftplugin.ui
index db2486040..33fd76a55 100644
--- a/src/blackgui/components/settingsswiftplugin.ui
+++ b/src/blackgui/components/settingsswiftplugin.ui
@@ -6,8 +6,8 @@
0
0
- 215
- 168
+ 272
+ 162
@@ -21,27 +21,17 @@
- -
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
-
-
-
- -
+
-
Default model:
- -
+
-
- -
+
-
-
@@ -67,30 +57,71 @@
- -
+
-
function calls
- -
+
-
Logging:
- -
+
-
Own model:
- -
+
-
+ -
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+
+ 125
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
diff --git a/src/blackgui/editors/coordinateform.cpp b/src/blackgui/editors/coordinateform.cpp
index 05535b415..07f9451c0 100644
--- a/src/blackgui/editors/coordinateform.cpp
+++ b/src/blackgui/editors/coordinateform.cpp
@@ -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;
diff --git a/src/blackgui/editors/coordinateform.h b/src/blackgui/editors/coordinateform.h
index 73f76b6ad..a99d3a0db 100644
--- a/src/blackgui/editors/coordinateform.h
+++ b/src/blackgui/editors/coordinateform.h
@@ -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
//! @{
diff --git a/src/blackgui/editors/situationform.cpp b/src/blackgui/editors/situationform.cpp
index bab01c870..fcf7e1d8a 100644
--- a/src/blackgui/editors/situationform.cpp
+++ b/src/blackgui/editors/situationform.cpp
@@ -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
diff --git a/src/blackgui/editors/situationform.h b/src/blackgui/editors/situationform.h
index b499846f3..e8446df4e 100644
--- a/src/blackgui/editors/situationform.h
+++ b/src/blackgui/editors/situationform.h
@@ -18,8 +18,6 @@
#include "blackmisc/statusmessagelist.h"
#include
-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;
};
diff --git a/src/blackgui/editors/situationform.ui b/src/blackgui/editors/situationform.ui
index 33c7835cb..ea47de0ee 100644
--- a/src/blackgui/editors/situationform.ui
+++ b/src/blackgui/editors/situationform.ui
@@ -6,8 +6,8 @@
0
0
- 512
- 439
+ 362
+ 414
@@ -29,19 +29,102 @@
-
- Situation
+ Situation (PBH)
-
+
-
-
-
- QFrame::Raised
-
-
-
-
-
+
+
+
-
+
- Bank (-179° to 180°):
+ 0
+
+
+
+ -
+
+
+ -179
+
+
+ 180
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ set
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png
+
+
+
+ -
+
+
+ Ground speed (kts):
+
+
+
+ -
+
+
+ kts
+
+
+ 300
+
+
+
+ -
+
+
+ Heading (-179° to 180°):
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png
+
+
+
+ -
+
+
+ 0
+
+
+ deg.
+
+
+
+ -
+
+
+ 0
+
+
+ deg.
@@ -64,23 +147,21 @@
- -
-
+
-
+
- 0
-
-
- deg.
+ Bank (-179° to 180°):
- -
-
+
-
+
- 0
+ ...
-
- deg.
+
+
+ :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png
@@ -110,65 +191,6 @@
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
-
-
- ...
-
-
-
- :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png
-
-
-
- -
-
-
- ...
-
-
-
- :/diagona/icons/diagona/icons/cross-white.png:/diagona/icons/diagona/icons/cross-white.png
-
-
-
- -
-
-
- set
-
-
-
- -
-
-
- Ground speed (kts):
-
-
-
- -
-
-
- kts
-
-
- 300
-
-
-
@@ -180,7 +202,7 @@
Coordinate
-
+
-
@@ -205,16 +227,10 @@
Environment
-
+
-
-
-
- QFrame::NoFrame
-
-
- QFrame::Raised
-
-
+
+
-
@@ -287,25 +303,19 @@
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
+ -
+
+
+ reset to own aircraft values
+
+
+
@@ -316,6 +326,24 @@
1
+
+ le_Bank
+ tb_ResetBank
+ hs_Bank
+ le_Pitch
+ tb_ResetPitch
+ hs_Pitch
+ le_Heading
+ tb_ResetHeading
+ hs_Heading
+ sb_GsKts
+ pb_SetOwnAircraft
+ le_Pressure
+ tb_ResetPressure
+ hs_Pressure
+ pb_SetEnvironment
+ pb_PresetOwnAircraft
+
diff --git a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp
index c4bd5cab2..ecc730ed3 100644
--- a/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp
+++ b/src/plugins/simulator/emulated/simulatoremulatedmonitordialog.cpp
@@ -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);