From 7753fa787a489535053890e947596d52f113cf09 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 19 Jul 2018 00:56:10 +0200 Subject: [PATCH] Ref T268, elevation tab allowing to request elevation at arbitrary position --- .../components/interpolationlogdisplay.cpp | 49 ++++++++++++-- .../components/interpolationlogdisplay.h | 15 ++++- .../components/interpolationlogdisplay.ui | 65 ++++++++++++++++++- 3 files changed, 119 insertions(+), 10 deletions(-) diff --git a/src/blackgui/components/interpolationlogdisplay.cpp b/src/blackgui/components/interpolationlogdisplay.cpp index afd891d7f..12f0d8b95 100644 --- a/src/blackgui/components/interpolationlogdisplay.cpp +++ b/src/blackgui/components/interpolationlogdisplay.cpp @@ -9,6 +9,7 @@ #include "interpolationlogdisplay.h" #include "ui_interpolationlogdisplay.h" +#include "blackgui/editors/coordinateform.h" #include "blackgui/guiapplication.h" #include "blackcore/context/contextnetworkimpl.h" #include "blackcore/context/contextsimulator.h" @@ -18,6 +19,7 @@ using namespace BlackCore; using namespace BlackCore::Context; using namespace BlackGui::Views; +using namespace BlackGui::Editors; using namespace BlackMisc; using namespace BlackMisc::Aviation; using namespace BlackMisc::Geo; @@ -66,6 +68,7 @@ namespace BlackGui connect(ui->pb_InjectElevation, &QPushButton::released, this, &CInterpolationLogDisplay::onInjectElevation); connect(ui->tvp_InboundAircraftSituations, &CAircraftSituationView::requestElevation, this, &CInterpolationLogDisplay::requestElevation); connect(ui->le_InjectElevation, &QLineEdit::returnPressed, this, &CInterpolationLogDisplay::onInjectElevation); + connect(ui->editor_ElevationCoordinate, &CCoordinateForm::changedCoordinate, this, &CInterpolationLogDisplay::requestElevationAtPosition); connect(sGui, &CGuiApplication::aboutToShutdown, this, &CInterpolationLogDisplay::onAboutToShutdown); } @@ -178,7 +181,7 @@ namespace BlackGui void CInterpolationLogDisplay::displayLoopback() { - if (!m_simulator) { return; } + if (!m_simulator || m_callsign.isEmpty()) { return; } ui->tvp_LoopbackAircraftSituations->updateContainerAsync(m_simulator->getLoopbackSituations(m_callsign)); ui->tvp_InterpolatedAircraftSituations->updateContainerAsync(m_lastInterpolations); } @@ -314,11 +317,17 @@ namespace BlackGui ui->led_Parts->blink(); } - void CInterpolationLogDisplay::onElevationReceived(const CElevationPlane &plane, const CCallsign &callsign) + void CInterpolationLogDisplay::onElevationReceived(const CElevationPlane &elevationPlane, const CCallsign &callsign) { - if (!this->logCallsign(callsign)) { return; } m_elvReceived++; - ui->le_Elevation->setText(plane.toQString()); + if (callsign == CInterpolationLogDisplay::pseudoCallsignElevation()) + { + this->displayArbitraryElevation(elevationPlane); + return; + } + + if (!this->logCallsign(callsign)) { return; } + ui->le_Elevation->setText(elevationPlane.toQString()); this->displayElevationRequestReceive(); ui->led_Elevation->blink(); } @@ -344,6 +353,7 @@ namespace BlackGui alt.parseFromString(elv); const CElevationPlane ep(situations.latestAdjustedObject(), alt, CElevationPlane::singlePointRadius()); + // inject as received from simulator m_simulator->callbackReceivedRequestedElevation(ep, m_callsign); } @@ -371,7 +381,6 @@ namespace BlackGui ui->le_Limited->clear(); m_elvReceived = m_elvRequested = 0; m_lastInterpolations.clear(); - m_lastLoopbackSituations.clear(); } bool CInterpolationLogDisplay::checkLogPrerequisites() @@ -407,7 +416,7 @@ namespace BlackGui while (false); this->stop(); - if (!m.isEmpty()) { this->showOverlayMessage(m); } + if (!m.isEmpty()) { this->showOverlayMessage(m, 5000); } return false; } @@ -432,6 +441,11 @@ namespace BlackGui ui->le_ElevationReqRec->setText(info.arg(m_elvRequested).arg(m_elvReceived).arg(foundMissed, reqTimes)); } + void CInterpolationLogDisplay::displayArbitraryElevation(const CElevationPlane &elevation) + { + ui->pte_ElevationAtPosition->appendPlainText(elevation.toQString()); + } + void CInterpolationLogDisplay::requestElevationClicked() { if (m_callsign.isEmpty()) { return; } @@ -446,6 +460,29 @@ namespace BlackGui m_simulator->requestElevationBySituation(situation); } + void CInterpolationLogDisplay::requestElevationAtPosition() + { + if (!m_simulator) { return; } + const CCoordinateGeodetic coordinate = ui->editor_ElevationCoordinate->getCoordinate(); + const bool ok = m_simulator->requestElevation(coordinate, CInterpolationLogDisplay::pseudoCallsignElevation()); + if (ok) + { + static const QString info("Requesting elevation: %1"); + ui->pte_ElevationAtPosition->setPlainText(info.arg(coordinate.toQString())); + } + else + { + static const QString info("Cannot request elevation"); + ui->pte_ElevationAtPosition->setPlainText(info); + } + } + + const CCallsign &CInterpolationLogDisplay::pseudoCallsignElevation() + { + static const CCallsign cs("SW1LOX"); + return cs; + } + void CInterpolationLogDisplay::linkWithAirspaceMonitor() { if (!sGui || sGui->isShuttingDown() || !sGui->supportsContexts()) { return; } diff --git a/src/blackgui/components/interpolationlogdisplay.h b/src/blackgui/components/interpolationlogdisplay.h index 6d10ad7b1..602ba51e5 100644 --- a/src/blackgui/components/interpolationlogdisplay.h +++ b/src/blackgui/components/interpolationlogdisplay.h @@ -47,7 +47,8 @@ namespace BlackGui TabFlow2, TabInterpolation, TabLoopback, - TabTextLog + TabTextLog, + TabElevation }; //! Constructor @@ -118,7 +119,7 @@ namespace BlackGui void onSimulatorStatusChanged(BlackCore::ISimulator::SimulatorStatus status); //! \copydoc BlackCore::ISimulator::receivedRequestedElevation - void onElevationReceived(const BlackMisc::Geo::CElevationPlane &plane, const BlackMisc::Aviation::CCallsign &callsign); + void onElevationReceived(const BlackMisc::Geo::CElevationPlane &elevationPlane, const BlackMisc::Aviation::CCallsign &callsign); //! \copydoc BlackCore::ISimulator::requestedElevation void onElevationRequested(const BlackMisc::Aviation::CCallsign &callsign); @@ -144,18 +145,26 @@ namespace BlackGui //! Display elevation requested/receive void displayElevationRequestReceive(); + //! Display arbitrary elevation + void displayArbitraryElevation(const BlackMisc::Geo::CElevationPlane &elevation); + //! Do request elevation void requestElevationClicked(); //! Do request elevation void requestElevation(const BlackMisc::Aviation::CAircraftSituation &situation); + //! Request arbitrary elevation + void requestElevationAtPosition(); + + //! Pseudo callsign for CInterpolationLogDisplay::requestElevationAtPosition + static const BlackMisc::Aviation::CCallsign &pseudoCallsignElevation(); + QScopedPointer ui; QTimer m_updateTimer; QPointer m_simulator; //!< related simulator QPointer m_airspaceMonitor; //!< related airspace monitor BlackMisc::Aviation::CAircraftSituationList m_lastInterpolations; - BlackMisc::Aviation::CAircraftSituationList m_lastLoopbackSituations; BlackMisc::Aviation::CCallsign m_callsign; //!< current callsign int m_elvRequested = 0; //!< counted via signal int m_elvReceived = 0; //!< counted via signal diff --git a/src/blackgui/components/interpolationlogdisplay.ui b/src/blackgui/components/interpolationlogdisplay.ui index 0358cf632..471c8769b 100644 --- a/src/blackgui/components/interpolationlogdisplay.ui +++ b/src/blackgui/components/interpolationlogdisplay.ui @@ -241,7 +241,7 @@ - 0 + 5 @@ -812,6 +812,60 @@ + + + Elevation + + + + + + Coordinates + + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 170 + + + + + + + + + + + Result + + + + + + true + + + + + + + + @@ -844,6 +898,12 @@ QTableView
blackgui/views/aircraftsituationchangeview.h
+ + BlackGui::Editors::CCoordinateForm + QFrame +
blackgui/editors/coordinateform.h
+ 1 +
le_UpdateTime @@ -879,7 +939,10 @@ te_LastInterpolatedSituation te_SituationChange te_LastInterpolatedParts + tvp_InterpolatedAircraftSituations + tvp_LoopbackAircraftSituations te_TextLog + pte_ElevationAtPosition