6 #include <QDoubleValidator>
8 #include "ui_situationform.h"
18 using namespace swift::misc::aviation;
19 using namespace swift::misc::geo;
20 using namespace swift::misc::physical_quantities;
22 namespace swift::gui::editors
28 ui->le_Bank->setValidator(
new QDoubleValidator(-180.0 + CAngleUnit::deg().getEpsilon(), 180.0, 3, ui->le_Bank));
29 ui->le_Pitch->setValidator(
30 new QDoubleValidator(-180.0 + CAngleUnit::deg().getEpsilon(), 180.0, 3, ui->le_Pitch));
31 ui->le_Pressure->setValidator(
new QDoubleValidator(980.0, 1046.0, 2, ui->le_Pressure));
33 connect(ui->hs_Bank, &QSlider::valueChanged,
this, &CSituationForm::bankSliderChanged);
34 connect(ui->hs_Pitch, &QSlider::valueChanged,
this, &CSituationForm::pitchSliderChanged);
35 connect(ui->hs_Heading, &QSlider::valueChanged,
this, &CSituationForm::headingSliderChanged);
36 connect(ui->hs_Pressure, &QSlider::valueChanged,
this, &CSituationForm::pressureSliderChanged);
37 connect(ui->le_Bank, &QLineEdit::editingFinished,
this, &CSituationForm::bankEntered);
38 connect(ui->le_Pitch, &QLineEdit::editingFinished,
this, &CSituationForm::pitchEntered);
39 connect(ui->le_Pressure, &QLineEdit::editingFinished,
this, &CSituationForm::pressureEntered);
40 connect(ui->le_Heading, &QLineEdit::editingFinished,
this, &CSituationForm::headingEntered);
42 connect(ui->tb_ResetBank, &QToolButton::clicked,
this, &CSituationForm::resetBank);
43 connect(ui->tb_ResetPitch, &QToolButton::clicked,
this, &CSituationForm::resetPitch);
44 connect(ui->tb_ResetHeading, &QToolButton::clicked,
this, &CSituationForm::resetHeading);
45 connect(ui->tb_ResetPressure, &QToolButton::clicked,
this, &CSituationForm::resetPressure);
48 connect(ui->pb_PresetOwnAircraft, &QPushButton::released,
this, &CSituationForm::presetOwnAircraftSituation);
56 ui->comp_Coordinate->setCoordinate(situation);
69 s.
setBank(this->getBankAngle());
81 CAngle CSituationForm::getBankAngle()
const {
return CAngle(getBankAngleDegrees(), CAngleUnit::deg()); }
83 double CSituationForm::getBankAngleDegrees()
const
85 const QString v(ui->le_Bank->text().replace(
',',
'.'));
87 double vd = v.toDouble(&ok);
88 if (!ok) { vd = 0.0; }
89 return CAngle::normalizeDegrees180(vd, RoundDigits);
92 CAngle CSituationForm::getPitchAngle()
const {
return CAngle(getPitchAngleDegrees(), CAngleUnit::deg()); }
94 double CSituationForm::getPitchAngleDegrees()
const
96 const QString v(ui->le_Pitch->text().replace(
',',
'.'));
98 double vd = v.toDouble(&ok);
99 if (!ok) { vd = 0.0; }
100 return CAngle::normalizeDegrees180(vd, RoundDigits);
103 CAngle CSituationForm::getHeadingAngle()
const {
return CAngle(getHeadingAngleDegrees(), CAngleUnit::deg()); }
105 double CSituationForm::getHeadingAngleDegrees()
const
107 const QString v(ui->le_Heading->text().replace(
',',
'.'));
109 double vd = v.toDouble(&ok);
110 if (!ok) { vd = 0.0; }
111 return CAngle::normalizeDegrees180(vd, RoundDigits);
114 double CSituationForm::getBarometricPressureMslMillibar()
const
116 const QString v(ui->le_Pressure->text().replace(
',',
'.'));
118 double vd = v.toDouble(&ok);
119 if (!ok) { vd = CAltitude::standardISASeaLevelPressure().value(CPressureUnit::mbar()); }
123 CPressure CSituationForm::getBarometricPressureMsl()
const
125 return CPressure(this->getBarometricPressureMslMillibar(), CPressureUnit::mbar());
128 CSpeed CSituationForm::getGroundSpeed()
const
130 const int gsKts = ui->sb_GsKts->value();
131 return CSpeed(gsKts, CSpeedUnit::kts());
136 ui->comp_Coordinate->setReadOnly(readonly);
138 ui->le_Bank->setReadOnly(readonly);
139 ui->le_Heading->setReadOnly(readonly);
140 ui->le_Pitch->setReadOnly(readonly);
141 ui->le_Pressure->setReadOnly(readonly);
143 ui->hs_Bank->setEnabled(!readonly);
144 ui->hs_Heading->setEnabled(!readonly);
145 ui->hs_Pitch->setEnabled(!readonly);
146 ui->hs_Pressure->setEnabled(!readonly);
156 if (nested) { ml.
push_back(ui->comp_Coordinate->validate(nested)); }
162 int clampAngle(
int in) {
return qBound(-179, in, 180); }
164 void CSituationForm::bankSliderChanged(
int value)
166 const int angle = clampAngle(qRound(this->getBankAngleDegrees()));
167 if (value == angle) {
return; }
168 ui->le_Bank->setText(QString::number(value));
171 void CSituationForm::pitchSliderChanged(
int value)
173 const int angle = clampAngle(qRound(this->getPitchAngleDegrees()));
174 if (value == angle) {
return; }
175 ui->le_Pitch->setText(QString::number(value));
178 void CSituationForm::headingSliderChanged(
int value)
180 const int angle = clampAngle(qRound(this->getHeadingAngleDegrees()));
181 if (value == angle) {
return; }
182 ui->le_Heading->setText(QString::number(value));
185 void CSituationForm::pressureSliderChanged(
int value)
187 const int pressure = qRound(this->getBarometricPressureMslMillibar());
188 if (value == pressure) {
return; }
189 ui->le_Pressure->setText(QString::number(value));
192 void CSituationForm::bankEntered()
194 const double ad = this->getBankAngleDegrees();
195 QString n = QString::number(ad,
'g', 3 + RoundDigits);
197 ui->le_Bank->setText(n);
198 const int angle = clampAngle(qRound(ad));
199 if (angle == ui->hs_Bank->value()) {
return; }
200 ui->hs_Bank->setValue(angle);
203 void CSituationForm::resetBank()
205 ui->le_Bank->setText(
"0");
206 ui->hs_Bank->setValue(0);
209 void CSituationForm::pitchEntered()
211 const double ad = this->getPitchAngleDegrees();
212 QString n = QString::number(ad,
'g', 3 + RoundDigits);
214 ui->le_Pitch->setText(n);
215 const int angle = clampAngle(qRound(ad));
216 if (angle == ui->hs_Pitch->value()) {
return; }
217 ui->hs_Pitch->setValue(angle);
220 void CSituationForm::resetPitch()
222 ui->le_Pitch->setText(
"0");
223 ui->hs_Pitch->setValue(0);
226 void CSituationForm::headingEntered()
228 const double ad = this->getHeadingAngleDegrees();
229 QString n = QString::number(ad,
'g', 3 + RoundDigits);
231 ui->le_Heading->setText(n);
232 const int angle = clampAngle(qRound(ad));
233 if (angle == ui->hs_Heading->value()) {
return; }
234 ui->hs_Heading->setValue(angle);
237 void CSituationForm::resetHeading()
239 ui->le_Heading->setText(
"0");
240 ui->hs_Heading->setValue(0);
243 void CSituationForm::pressureEntered()
245 const double pd = this->getBarometricPressureMslMillibar();
246 QString n = QString::number(pd,
'g', 4 + RoundDigits);
248 ui->le_Pressure->setText(n);
249 const int pi = qRound(pd);
250 if (pi == ui->hs_Pressure->value()) {
return; }
251 ui->hs_Pressure->setValue(pi);
254 void CSituationForm::resetPressure()
256 static const int v = CAltitude::standardISASeaLevelPressure().valueInteger(CPressureUnit::mbar());
258 QString::number(CAltitude::standardISASeaLevelPressure().valueRounded(CPressureUnit::mbar(), 2))));
259 ui->le_Pressure->setText(vs);
260 ui->hs_Pressure->setValue(v);
263 void CSituationForm::presetOwnAircraftSituation()
const context::IContextOwnAircraft * getIContextOwnAircraft() const
Direct access to contexts if a CCoreFacade has been initialized.
bool isShuttingDown() const
Is application shutting down?
virtual swift::misc::aviation::CAircraftSituation getOwnAircraftSituation() const =0
Get own aircraft.
void push_back(const T &value)
Appends an element at the end of the sequence.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information of an aircraft's situation.
void setPressureAltitude(const CAltitude &altitude)
Set pressure altitude.
void setGroundSpeed(const physical_quantities::CSpeed &groundspeed)
Set ground speed.
const CHeading & getHeading() const
Get heading.
void setBank(const physical_quantities::CAngle &bank)
Set bank (angle)
void setHeading(const CHeading &heading)
Set heading.
void setPitch(const physical_quantities::CAngle &pitch)
Set pitch.
const physical_quantities::CAngle & getBank() const
Get bank (angle)
const physical_quantities::CAngle & getPitch() const
Get pitch.
Altitude as used in aviation, can be AGL or MSL altitude.
AltitudeType getAltitudeType() const
Current altitude type.
CAltitude toPressureAltitude(const physical_quantities::CPressure &seaLevelPressure) const
Returns the altitude converted to pressure altitude. Requires the current barometric pressure at MSL.
Heading as used in aviation, can be true or magnetic heading.
virtual const aviation::CAltitude & geodeticHeight() const
Height, ellipsoidal or geodetic height (used in GPS)
Physical unit angle (radians, degrees)
int valueInteger(MU unit) const
As integer value.
bool isNull() const
Is quantity null?
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Free functions in swift::misc.
SWIFT_MISC_EXPORT QString dotToLocaleDecimalPoint(QString &input)
Replace dot '.' by locale decimal point.