6 #include <QIntValidator>
8 #include "ui_coordinateform.h"
18 using namespace swift::misc::geo;
19 using namespace swift::misc::aviation;
20 using namespace swift::misc::physical_quantities;
22 namespace swift::gui::editors
28 ui->lblp_LatCheck->setToolTips(
"ok",
"wrong format");
29 ui->lblp_LngCheck->setToolTips(
"ok",
"wrong format");
30 ui->lblp_ElvCheck->setToolTips(
"ok",
"wrong format");
32 ui->le_LatDeg->setValidator(
new QIntValidator(-90, 90, ui->le_LatDeg));
33 ui->le_LatMin->setValidator(
new QIntValidator(0, 60, ui->le_LatMin));
34 ui->le_LatSec->setValidator(
new QIntValidator(0, 60, ui->le_LatSec));
35 ui->le_LatSecFrag->setValidator(
new QIntValidator(0, 10E7, ui->le_LatSecFrag));
37 ui->le_LngDeg->setValidator(
new QIntValidator(-180, 180, ui->le_LngDeg));
38 ui->le_LngMin->setValidator(
new QIntValidator(0, 60, ui->le_LngMin));
39 ui->le_LngSec->setValidator(
new QIntValidator(0, 60, ui->le_LngSec));
40 ui->le_LngSecFrag->setValidator(
new QIntValidator(0, 10E7, ui->le_LngSecFrag));
42 connect(ui->le_Latitude, &QLineEdit::editingFinished,
this, &CCoordinateForm::latEntered);
43 connect(ui->le_Longitude, &QLineEdit::editingFinished,
this, &CCoordinateForm::lngEntered);
44 connect(ui->le_Elevation, &QLineEdit::editingFinished,
this, &CCoordinateForm::elvEntered);
46 connect(ui->le_LatDeg, &QLineEdit::editingFinished,
this, &CCoordinateForm::latCombinedEntered);
47 connect(ui->le_LatMin, &QLineEdit::editingFinished,
this, &CCoordinateForm::latCombinedEntered);
48 connect(ui->le_LatSec, &QLineEdit::editingFinished,
this, &CCoordinateForm::latCombinedEntered);
49 connect(ui->le_LatSecFrag, &QLineEdit::editingFinished,
this, &CCoordinateForm::latCombinedEntered);
51 connect(ui->le_LngDeg, &QLineEdit::editingFinished,
this, &CCoordinateForm::lngCombinedEntered);
52 connect(ui->le_LngMin, &QLineEdit::editingFinished,
this, &CCoordinateForm::lngCombinedEntered);
53 connect(ui->le_LngSec, &QLineEdit::editingFinished,
this, &CCoordinateForm::lngCombinedEntered);
54 connect(ui->le_LngSecFrag, &QLineEdit::editingFinished,
this, &CCoordinateForm::lngCombinedEntered);
56 connect(ui->le_Location, &QLineEdit::returnPressed,
this, &CCoordinateForm::locationEntered);
59 connect(ui->pb_OwnAircraft, &QPushButton::pressed,
this, &CCoordinateForm::presetOwnAircraftPosition);
69 if (coordinate == m_coordinate) {
return false; }
70 m_coordinate = coordinate;
73 const QString latWgs = lat.
toWgs84();
74 ui->le_Latitude->setText(latWgs);
75 ui->le_Latitude->setToolTip(QString::number(lat.
value(CAngleUnit::deg())));
76 ui->lblp_LatCheck->setTicked(!lat.
isNull());
77 if (latWgs.contains(
'S')) { ui->rb_S->setChecked(
true); }
78 else { ui->rb_N->setChecked(
true); }
81 const QString lngWgs = lng.
toWgs84();
82 ui->le_Longitude->setText(lngWgs);
83 ui->le_Longitude->setToolTip(QString::number(lng.
value(CAngleUnit::deg())));
84 ui->lblp_LngCheck->setTicked(!lng.
isNull());
85 if (lngWgs.contains(
'W')) { ui->rb_W->setChecked(
true); }
86 else { ui->rb_E->setChecked(
true); }
89 ui->le_LatDeg->setText(latParts.degAsString());
90 ui->le_LatMin->setText(latParts.minAsString());
91 ui->le_LatSec->setText(latParts.secAsString());
92 ui->le_LatSecFrag->setText(latParts.fractionalSecAsString(6));
95 ui->le_LngDeg->setText(lngParts.degAsString());
96 ui->le_LngMin->setText(lngParts.minAsString());
97 ui->le_LngSec->setText(lngParts.secAsString());
98 ui->le_LngSecFrag->setText(lngParts.fractionalSecAsString(6));
101 ui->le_Elevation->setText(elvString);
102 ui->lblp_ElvCheck->setTicked(!elvString.isEmpty());
105 ui->le_X->setText(QString::number(v[0]));
106 ui->le_Y->setText(QString::number(v[1]));
107 ui->le_Z->setText(QString::number(v[2]));
108 ui->le_X->home(
false);
109 ui->le_Y->home(
false);
110 ui->le_Z->home(
false);
117 ui->le_Elevation->setReadOnly(readonly);
118 ui->le_LatDeg->setReadOnly(readonly);
119 ui->le_Latitude->setReadOnly(readonly);
120 ui->le_LatMin->setReadOnly(readonly);
121 ui->le_LatSec->setReadOnly(readonly);
122 ui->le_LatSecFrag->setReadOnly(readonly);
123 ui->le_LngDeg->setReadOnly(readonly);
124 ui->le_LngMin->setReadOnly(readonly);
125 ui->le_LngSec->setReadOnly(readonly);
126 ui->le_LngSecFrag->setReadOnly(readonly);
127 ui->le_Longitude->setReadOnly(readonly);
129 ui->rb_E->setEnabled(!readonly);
130 ui->rb_N->setEnabled(!readonly);
131 ui->rb_S->setEnabled(!readonly);
132 ui->rb_W->setEnabled(!readonly);
134 ui->le_Location->setReadOnly(readonly);
135 ui->le_Location->setVisible(!readonly);
136 ui->lbl_Location->setVisible(!readonly);
153 ui->le_Elevation->setVisible(show);
154 ui->lbl_Elevation->setVisible(show);
155 ui->lblp_ElvCheck->setVisible(show);
159 void CCoordinateForm::locationEntered()
161 const QString l = ui->le_Location->text().trimmed().simplified().toUpper();
190 const QStringList parts = l.split(
' ');
191 for (
const QString &p : parts)
193 if (p.contains(
'S') || p.contains(
'N')) { lat = p; }
194 else if (p.contains(
'E') || p.contains(
'W')) { lng = p; }
196 if (!lat.isEmpty() && !lng.isEmpty())
205 void CCoordinateForm::latEntered()
207 const QString ls = ui->le_Latitude->text();
208 const CLatitude l = CLatitude::fromWgs84(ls);
209 ui->lblp_LatCheck->setTicked(!l.
isNull());
215 void CCoordinateForm::latCombinedEntered()
218 int deg = ui->le_LatDeg->text().trimmed().toInt(&ok);
221 int min = ui->le_LatMin->text().trimmed().toInt(&ok);
224 const QString secStr = ui->le_LatSec->text().trimmed() +
"." + ui->le_LatSecFrag->text().trimmed();
225 double sec = secStr.toDouble(&ok);
228 CAngle::unifySign(deg, min, sec);
229 const CAngle a(deg, min, sec);
231 lat.roundToEpsilon();
237 void CCoordinateForm::lngEntered()
239 const QString ls = ui->le_Longitude->text();
240 const CLongitude l = CLongitude::fromWgs84(ls);
241 ui->lblp_LatCheck->setTicked(!l.
isNull());
247 void CCoordinateForm::lngCombinedEntered()
250 int deg = ui->le_LngDeg->text().trimmed().toInt(&ok);
253 int min = ui->le_LngMin->text().trimmed().toInt(&ok);
256 const QString secStr = ui->le_LngSec->text().trimmed() +
"." + ui->le_LngSecFrag->text().trimmed();
257 double sec = secStr.toDouble(&ok);
260 CAngle::unifySign(deg, min, sec);
261 const CAngle a(deg, min, sec);
263 lng.roundToEpsilon();
269 void CCoordinateForm::elvEntered()
271 const QString e = ui->le_Elevation->text().trimmed();
274 ui->lblp_ElvCheck->setTicked(!e.isNull());
280 void CCoordinateForm::presetOwnAircraftPosition()
SWIFT_CORE_EXPORT swift::core::CApplication * sApp
Single instance of application object.
const context::IContextOwnAircraft * getIContextOwnAircraft() const
Direct access to contexts if a CCoreFacade has been initialized.
bool hasWebDataServices() const
Web data services available?
bool isShuttingDown() const
Is application shutting down?
CWebDataServices * getWebDataServices() const
Get the web data services.
swift::misc::aviation::CAirport getAirportForIcaoDesignator(const QString &icao) const
Get airport for ICAO designator.
int getAirportsCount() const
Get airports count.
swift::misc::aviation::CAirport getAirportForNameOrLocation(const QString &nameOrLocation) const
Get airport for name of location.
virtual swift::misc::simulation::CSimulatedAircraft getOwnAircraft() const =0
Get own aircraft.
Status messages, e.g. from Core -> GUI.
Value object encapsulating information about an airpot.
Altitude as used in aviation, can be AGL or MSL altitude.
void parseFromString(const QString &value)
Parse value from string.
bool hasValidDbKey() const
Has valid DB key.
void setLatLongFromWgs84(const QString &latitude, const QString &longitude)
Set latitude and longitude.
void setLatitude(const CLatitude &latitude)
Set latitude.
void setGeodeticHeightToNull()
Set height to NULL.
void setGeodeticHeight(const aviation::CAltitude &height)
Set height (ellipsoidal or geodetic height)
void setLongitude(const CLongitude &longitude)
Set longitude.
QString toWgs84(int fractionalDigits=3) const
To WGS84 string.
QString toWgs84(int withFragmentSecDigits=3) const
To WGS84 string.
Geodetic coordinate, a position in 3D space relative to the reference geoid.
virtual CLongitude longitude() const =0
Longitude.
virtual std::array< double, 3 > normalVectorDouble() const =0
Normal vector with double precision.
QString geodeticHeightAsString() const
Height as string.
virtual CLatitude latitude() const =0
Latitude.
Physical unit angle (radians, degrees)
DegMinSecFractionalSec asSexagesimalDegMinSec(bool range180Degrees=false) const
As individual values.
bool isNull() const
Is quantity null?
double value(MU unit) const
Value in given unit.
const aviation::CAircraftSituation & getSituation() const
Get situation.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
Free functions in swift::misc.