7 #include <QStringBuilder>
10 #include "ui_altitudedialog.h"
16 using namespace swift::misc::aviation;
17 using namespace swift::misc::physical_quantities;
21 CAltitudeDialog::CAltitudeDialog(QWidget *parent) : QDialog(parent), ui(new Ui::
CAltitudeDialog)
24 this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
34 ui->le_FLft->setFocus();
37 ui->le_FLft->setValidator(
new QIntValidator(10, 999, ui->le_FLft));
38 ui->le_AltitudeAFt->setValidator(
new QIntValidator(10, 999, ui->le_AltitudeAFt));
39 ui->le_AltitudeMm->setValidator(
new QIntValidator(10, 9999, ui->le_AltitudeMm));
40 ui->le_Sm->setValidator(
new QIntValidator(10, 9999, ui->le_Sm));
43 ui->le_AltitudeConvertedFt->setValidator(
new QIntValidator(100, 99999, ui->le_AltitudeConvertedFt));
44 ui->le_AltitudeFt->setValidator(
new QIntValidator(100, 99999, ui->le_AltitudeFt));
45 ui->le_AltitudeM->setValidator(
new QIntValidator(100, 99999, ui->le_AltitudeM));
47 connect(ui->le_AltitudeAFt, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
48 connect(ui->le_AltitudeConvertedFt, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
49 connect(ui->le_AltitudeFt, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
50 connect(ui->le_AltitudeM, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
51 connect(ui->le_AltitudeMm, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
52 connect(ui->le_FLft, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
53 connect(ui->le_Sm, &QLineEdit::editingFinished,
this, &CAltitudeDialog::onEditFinished);
55 connect(ui->rb_VFR, &QRadioButton::toggled,
this, &CAltitudeDialog::onVFRSelected);
56 connect(ui->rb_StringOnly, &QRadioButton::toggled,
this, &CAltitudeDialog::onStringOnlySelected);
57 connect(ui->cb_SimplifiedVATSIMFormat, &QCheckBox::toggled,
this,
58 &CAltitudeDialog::onSimplifiedVATSIMFormatChanged);
60 connect(ui->le_AltitudeAFt, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
61 connect(ui->le_AltitudeConvertedFt, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
62 connect(ui->le_AltitudeFt, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
63 connect(ui->le_AltitudeM, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
64 connect(ui->le_AltitudeMm, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
65 connect(ui->le_FLft, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
66 connect(ui->le_Sm, &QLineEdit::textEdited,
this, &CAltitudeDialog::onTextEdit);
73 if (ui->rb_AltitudeAFt->isChecked())
return AltitudeInHundredsOfFeet;
74 if (ui->rb_VFR->isChecked())
return VFR;
75 if (ui->rb_AltitudeConvertedFt->isChecked())
return AltitudeInMetersConvertedToFeet;
76 if (ui->rb_AltitudeFt->isChecked())
return AltitudeInFeet;
77 if (ui->rb_AltitudeM->isChecked())
return AltitudeInMeters;
78 if (ui->rb_AltitudeMm->isChecked())
return AltitudeInTensOfMeters;
79 if (ui->rb_FLft->isChecked())
return FlightFlevelInFeet;
80 if (ui->rb_Sm->isChecked())
return MetricLevelInTensOfMeters;
81 if (ui->rb_StringOnly->isChecked())
return StringOnly;
89 void CAltitudeDialog::onEditFinished()
94 case VFR: m_altitudeStr = QStringLiteral(
"VFR");
break;
95 case FlightFlevelInFeet: m_altitudeStr = u
"FL" % ui->le_FLft->text();
break;
96 case MetricLevelInTensOfMeters: m_altitudeStr = u
'S' % ui->le_Sm->text();
break;
97 case AltitudeInHundredsOfFeet: m_altitudeStr = u
'A' % ui->le_AltitudeAFt->text();
break;
98 case AltitudeInTensOfMeters: m_altitudeStr = u
'M' % ui->le_AltitudeMm->text();
break;
99 case AltitudeInFeet: m_altitudeStr = ui->le_AltitudeFt->text() % u
"ft";
break;
100 case AltitudeInMeters: m_altitudeStr = ui->le_AltitudeM->text() % u
"m";
break;
101 case AltitudeInMetersConvertedToFeet: m_altitudeStr = ui->le_AltitudeConvertedFt->text() % u
"m";
break;
102 case StringOnly: m_altitudeStr = ui->le_String->text();
return;
112 m_altitudeStr.clear();
116 if (mode == AltitudeInMetersConvertedToFeet)
118 const int ft = CAltitude::findAltitudeForMetricAltitude(m_altitude.
valueInteger(CLengthUnit::m()));
120 m_altitude =
CAltitude(ft, CAltitude::MeanSeaLevel, CLengthUnit::ft());
126 ui->le_String->setText(m_altitudeStr);
129 this->updateStyleSheet();
132 void CAltitudeDialog::onVFRSelected(
bool selected)
134 if (!selected) {
return; }
135 this->onEditFinished();
138 void CAltitudeDialog::onStringOnlySelected(
bool selected)
140 ui->le_String->setReadOnly(!selected);
141 if (!selected) {
return; }
143 this->onEditFinished();
144 this->updateStyleSheet();
147 void CAltitudeDialog::onTextEdit(
const QString &text)
150 const QObject *sender = QObject::sender();
152 if (sender == ui->le_VFR)
154 ui->rb_VFR->setChecked(
true);
157 if (sender == ui->le_AltitudeAFt)
159 ui->rb_AltitudeAFt->setChecked(
true);
162 if (sender == ui->le_AltitudeConvertedFt)
164 ui->rb_AltitudeConvertedFt->setChecked(
true);
167 if (sender == ui->le_AltitudeFt)
169 ui->rb_AltitudeFt->setChecked(
true);
172 if (sender == ui->le_AltitudeM)
174 ui->rb_AltitudeM->setChecked(
true);
177 if (sender == ui->le_AltitudeMm)
179 ui->rb_AltitudeMm->setChecked(
true);
182 if (sender == ui->le_FLft)
184 ui->rb_FLft->setChecked(
true);
187 if (sender == ui->le_Sm)
189 ui->rb_Sm->setChecked(
true);
194 void CAltitudeDialog::onSimplifiedVATSIMFormatChanged(
bool checked)
196 ui->rb_AltitudeAFt->setEnabled(!checked);
197 ui->le_AltitudeAFt->setEnabled(!checked);
198 ui->rb_AltitudeM->setEnabled(!checked);
199 ui->le_AltitudeM->setEnabled(!checked);
200 ui->rb_AltitudeMm->setEnabled(!checked);
201 ui->le_AltitudeMm->setEnabled(!checked);
202 ui->rb_Sm->setEnabled(!checked);
203 ui->le_Sm->setEnabled(!checked);
204 ui->rb_VFR->setEnabled(!checked);
209 ui->le_String->setText(m_altitudeStr);
210 ui->rb_StringOnly->setChecked(
true);
213 this->updateStyleSheet();
216 void CAltitudeDialog::updateStyleSheet()
218 const QString ss = this->styleSheet();
219 this->setStyleSheet(
"");
220 this->setStyleSheet(ss);
Dialog to get a correct altitude.
Mode getMode() const
Get mode.
void setVatsim(bool vatsim)
Set VATSIM flag.
virtual ~CAltitudeDialog()
Destructor.
bool isStringOnly() const
Manual string mode.
Mode
Which mode used to enter.
QString getMessage() const
Message.
Status messages, e.g. from Core -> GUI.
CStatusMessage toSingleMessage() const
Merge into a single message.
bool hasErrorMessages() const
Error messages.
Altitude as used in aviation, can be AGL or MSL altitude.
QString asFpVatsimAltitudeString() const
As simple VATSIM string, only FLxxx or altitude as ft.
bool parseFromFpAltitudeString(const QString &value, CStatusMessageList *msgs=nullptr)
Parse from FP altitude string.
CAltitude roundedToNearest100ft(bool roundDown) const
Round to the nearest 100ft, like needed for China and Russia.
int valueInteger(MU unit) const
As integer value.
QString valueRoundedWithUnit(const MU &unit, int digits=-1, bool withGroupSeparator=false, bool i18n=false) const
Value to QString with the given unit, e.g. "5.00m".
High level reusable GUI components.
Free functions in swift::misc.