6 #include <QDoubleValidator>
8 #include "ui_pbhsform.h"
13 using namespace swift::misc::aviation;
14 using namespace swift::misc::physical_quantities;
16 namespace swift::gui::editors
22 ui->le_Bank->setValidator(
new QDoubleValidator(-180.0 + CAngleUnit::deg().getEpsilon(), 180.0, 3, ui->le_Bank));
23 ui->le_Pitch->setValidator(
24 new QDoubleValidator(-180.0 + CAngleUnit::deg().getEpsilon(), 180.0, 3, ui->le_Pitch));
26 connect(ui->hs_Bank, &QSlider::valueChanged,
this, &CPbhsForm::bankSliderChanged);
27 connect(ui->hs_Pitch, &QSlider::valueChanged,
this, &CPbhsForm::pitchSliderChanged);
28 connect(ui->hs_Heading, &QSlider::valueChanged,
this, &CPbhsForm::headingSliderChanged);
29 connect(ui->le_Bank, &QLineEdit::editingFinished,
this, &CPbhsForm::bankEntered);
30 connect(ui->le_Pitch, &QLineEdit::editingFinished,
this, &CPbhsForm::pitchEntered);
31 connect(ui->le_Heading, &QLineEdit::editingFinished,
this, &CPbhsForm::headingEntered);
32 connect(ui->tb_ResetBank, &QToolButton::clicked,
this, &CPbhsForm::resetBank);
33 connect(ui->tb_ResetPitch, &QToolButton::clicked,
this, &CPbhsForm::resetPitch);
34 connect(ui->tb_ResetHeading, &QToolButton::clicked,
this, &CPbhsForm::resetHeading);
45 ui->le_Bank->setText(QString::number(value));
46 ui->hs_Bank->setValue(value);
49 double CPbhsForm::getBankAngleDegrees()
const
51 const QString v(ui->le_Bank->text().replace(
',',
'.'));
53 double vd = v.toDouble(&ok);
54 if (!ok) { vd = 0.0; }
55 return CAngle::normalizeDegrees180(vd, RoundDigits);
63 ui->le_Pitch->setText(QString::number(value));
64 ui->hs_Pitch->setValue(value);
67 double CPbhsForm::getPitchAngleDegrees()
const
69 const QString v(ui->le_Pitch->text().replace(
',',
'.'));
71 double vd = v.toDouble(&ok);
72 if (!ok) { vd = 0.0; }
73 return CAngle::normalizeDegrees180(vd, RoundDigits);
83 ui->le_Heading->setText(QString::number(value));
84 ui->hs_Heading->setValue(value);
87 double CPbhsForm::getHeadingAngleDegrees()
const
89 const QString v(ui->le_Heading->text().replace(
',',
'.'));
91 double vd = v.toDouble(&ok);
92 if (!ok) { vd = 0.0; }
93 return CAngle::normalizeDegrees180(vd, RoundDigits);
98 const int gsKts = ui->sb_GsKts->value();
99 return CSpeed(gsKts, CSpeedUnit::kts());
119 ui->le_Bank->setReadOnly(readOnly);
120 ui->le_Heading->setReadOnly(readOnly);
121 ui->le_Pitch->setReadOnly(readOnly);
123 ui->hs_Bank->setEnabled(!readOnly);
124 ui->hs_Heading->setEnabled(!readOnly);
125 ui->hs_Pitch->setEnabled(!readOnly);
130 void CPbhsForm::bankSliderChanged(
int value)
132 const int angle = clampAngle(qRound(this->getBankAngleDegrees()));
133 if (value == angle) {
return; }
134 ui->le_Bank->setText(QString::number(value));
137 void CPbhsForm::pitchSliderChanged(
int value)
139 const int angle = clampAngle(qRound(this->getPitchAngleDegrees()));
140 if (value == angle) {
return; }
141 ui->le_Pitch->setText(QString::number(value));
144 void CPbhsForm::headingSliderChanged(
int value)
146 const int angle = clampAngle(qRound(this->getHeadingAngleDegrees()));
147 if (value == angle) {
return; }
148 ui->le_Heading->setText(QString::number(value));
151 void CPbhsForm::bankEntered()
153 const double ad = this->getBankAngleDegrees();
154 QString n = QString::number(ad,
'g', 3 + RoundDigits);
156 ui->le_Bank->setText(n);
157 const int angle = clampAngle(qRound(ad));
158 if (angle == ui->hs_Bank->value()) {
return; }
159 ui->hs_Bank->setValue(angle);
162 void CPbhsForm::resetBank()
164 ui->le_Bank->setText(
"0");
165 ui->hs_Bank->setValue(0);
168 void CPbhsForm::pitchEntered()
170 const double ad = this->getPitchAngleDegrees();
171 QString n = QString::number(ad,
'g', 3 + RoundDigits);
173 ui->le_Pitch->setText(n);
174 const int angle = clampAngle(qRound(ad));
175 if (angle == ui->hs_Pitch->value()) {
return; }
176 ui->hs_Pitch->setValue(angle);
179 void CPbhsForm::resetPitch()
181 ui->le_Pitch->setText(
"0");
182 ui->hs_Pitch->setValue(0);
185 void CPbhsForm::headingEntered()
187 const double ad = this->getHeadingAngleDegrees();
188 QString n = QString::number(ad,
'g', 3 + RoundDigits);
190 ui->le_Heading->setText(n);
191 const int angle = clampAngle(qRound(ad));
192 if (angle == ui->hs_Heading->value()) {
return; }
193 ui->hs_Heading->setValue(angle);
196 void CPbhsForm::resetHeading()
198 ui->le_Heading->setText(
"0");
199 ui->hs_Heading->setValue(0);
Value object encapsulating information of an aircraft's situation.
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.
Heading as used in aviation, can be true or magnetic heading.
Physical unit angle (radians, degrees)
int valueInteger(MU unit) const
As integer value.
Free functions in swift::misc.
SWIFT_MISC_EXPORT QString dotToLocaleDecimalPoint(QString &input)
Replace dot '.' by locale decimal point.