From 89c5a474b07c9d3533e9e49e48f08358d4baca4d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 9 Jul 2018 22:25:33 +0200 Subject: [PATCH] Ref T268, improvements in log display * can request elevation * more detailed statistics --- .../components/interpolationlogdisplay.cpp | 51 ++++++++++++- .../components/interpolationlogdisplay.h | 16 ++++- .../components/interpolationlogdisplay.ui | 72 ++++++++++++++++--- 3 files changed, 123 insertions(+), 16 deletions(-) diff --git a/src/blackgui/components/interpolationlogdisplay.cpp b/src/blackgui/components/interpolationlogdisplay.cpp index 7e3bd7183..23f5d4ae6 100644 --- a/src/blackgui/components/interpolationlogdisplay.cpp +++ b/src/blackgui/components/interpolationlogdisplay.cpp @@ -18,6 +18,7 @@ using namespace BlackCore; using namespace BlackCore::Context; +using namespace BlackGui::Views; using namespace BlackMisc; using namespace BlackMisc::Aviation; using namespace BlackMisc::Geo; @@ -50,14 +51,20 @@ namespace BlackGui ui->led_Updating->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "Just updating", "Idle", 14); m_callsign = ui->comp_CallsignCompleter->getCallsign(); + ui->tvp_AircraftSituations->setWithMenuRequestElevation(true); connect(&m_updateTimer, &QTimer::timeout, this, &CInterpolationLogDisplay::updateLog); connect(ui->comp_CallsignCompleter, &CCallsignCompleter::validCallsignEntered, this, &CInterpolationLogDisplay::onCallsignEntered); connect(ui->hs_UpdateTime, &QSlider::valueChanged, this, &CInterpolationLogDisplay::onSliderChanged); connect(ui->pb_StartStop, &QPushButton::released, this, &CInterpolationLogDisplay::toggleStartStop); connect(ui->pb_ResetStats, &QPushButton::released, this, &CInterpolationLogDisplay::resetStatistics); - connect(ui->pb_ShowInSimulator, &QPushButton::released, this, &CInterpolationLogDisplay::showLogInSimulator); + connect(ui->pb_ShowLogInSimulator, &QPushButton::released, this, &CInterpolationLogDisplay::showLogInSimulator); + connect(ui->pb_FollowInSimulator, &QPushButton::released, this, &CInterpolationLogDisplay::followInSimulator); + connect(ui->pb_RequestElevation, &QPushButton::released, this, &CInterpolationLogDisplay::requestElevationClicked); connect(ui->pb_GetLastInterpolation, &QPushButton::released, this, &CInterpolationLogDisplay::displayLastInterpolation); + connect(ui->pb_InjectElevation, &QPushButton::released, this, &CInterpolationLogDisplay::onInjectElevation); + connect(ui->tvp_AircraftSituations, &CAircraftSituationView::requestElevation, this, &CInterpolationLogDisplay::requestElevation); + connect(ui->le_InjectElevation, &QLineEdit::returnPressed, this, &CInterpolationLogDisplay::onInjectElevation); connect(sGui, &CGuiApplication::aboutToShutdown, this, &CInterpolationLogDisplay::onAboutToShutdown); } @@ -212,6 +219,13 @@ namespace BlackGui sGui->getIContextSimulator()->parseCommandLine(cmd, this->identifier()); } + void CInterpolationLogDisplay::followInSimulator() + { + if (m_callsign.isEmpty()) { return; } + if (!m_simulatorCommon) { return; } + m_simulatorCommon->followAircraft(m_callsign); + } + bool CInterpolationLogDisplay::start() { if (m_updateTimer.isActive()) { return false; } @@ -297,6 +311,22 @@ namespace BlackGui ui->led_Elevation->blink(); } + void CInterpolationLogDisplay::onInjectElevation() + { + if (!m_simulatorCommon) { return; } + const QString elv = ui->le_InjectElevation->text().trimmed(); + if (elv.isEmpty()) { return; } + + const CAircraftSituationList situations = m_airspaceMonitor->remoteAircraftSituations(m_callsign); + if (situations.isEmpty()) { return; } + + CAltitude alt; + alt.parseFromString(elv); + const CElevationPlane ep(situations.latestAdjustedObject(), alt, CElevationPlane::singlePointRadius()); + + m_simulatorCommon->callbackReceivedRequestedElevation(ep, m_callsign); + } + void CInterpolationLogDisplay::resetStatistics() { if (m_simulatorCommon) { m_simulatorCommon->resetAircraftStatistics(); } @@ -369,9 +399,24 @@ namespace BlackGui void CInterpolationLogDisplay::displayElevationRequestReceive() { if (!m_airspaceMonitor) { return; } - static const QString info("%1/%2 hits %3"); + static const QString info("%1/%2 hits %3 times: %4"); const QString foundMissed = m_airspaceMonitor->getElevationsFoundMissedInfo(); - ui->le_ElevationReqRec->setText(info.arg(m_elvRequested).arg(m_elvReceived).arg(foundMissed)); + const QString reqTimes = m_airspaceMonitor->getElevationRequestTimesInfo(); + ui->le_ElevationReqRec->setText(info.arg(m_elvRequested).arg(m_elvReceived).arg(foundMissed, reqTimes)); + } + + void CInterpolationLogDisplay::requestElevationClicked() + { + if (m_callsign.isEmpty()) { return; } + const CAircraftSituationList situations = m_airspaceMonitor->remoteAircraftSituations(m_callsign); + if (situations.isEmpty()) { return; } + this->requestElevation(situations.latestAdjustedObject()); + } + + void CInterpolationLogDisplay::requestElevation(const CAircraftSituation &situation) + { + if (!m_simulatorCommon) { return; } + m_simulatorCommon->requestElevationBySituation(situation); } void CInterpolationLogDisplay::linkWithAirspaceMonitor() diff --git a/src/blackgui/components/interpolationlogdisplay.h b/src/blackgui/components/interpolationlogdisplay.h index ab820d8e8..bbd0080e0 100644 --- a/src/blackgui/components/interpolationlogdisplay.h +++ b/src/blackgui/components/interpolationlogdisplay.h @@ -81,6 +81,9 @@ namespace BlackGui //! Display log in simulator void showLogInSimulator(); + //! Follow aircraft in simulator + void followInSimulator(); + //! Start displaying bool start(); @@ -111,6 +114,9 @@ namespace BlackGui //! \copydoc BlackCore::CSimulatorCommon::requestedElevation void onElevationRequested(const BlackMisc::Aviation::CCallsign &callsign); + //! Call the callback of requested elevations as it would come from the simulator + void onInjectElevation(); + //! \copydoc BlackCore::CSimulatorCommon::resetAircraftStatistics void resetStatistics(); @@ -126,13 +132,19 @@ namespace BlackGui //! Display elevation requested/receive void displayElevationRequestReceive(); + //! Do request elevation + void requestElevationClicked(); + + //! Do request elevation + void requestElevation(const BlackMisc::Aviation::CAircraftSituation &situation); + QScopedPointer ui; QTimer m_updateTimer; QPointer m_simulatorCommon; //!< related simulator QPointer m_airspaceMonitor; //!< related airspace monitor BlackMisc::Aviation::CCallsign m_callsign; //!< current callsign - int m_elvRequested = 0; - int m_elvReceived = 0; + int m_elvRequested = 0; //!< counted via signal + int m_elvReceived = 0; //!< counted via signal static const QString &startText(); static const QString &stopText(); diff --git a/src/blackgui/components/interpolationlogdisplay.ui b/src/blackgui/components/interpolationlogdisplay.ui index 63d8abb47..7cc2685ca 100644 --- a/src/blackgui/components/interpolationlogdisplay.ui +++ b/src/blackgui/components/interpolationlogdisplay.ui @@ -130,7 +130,7 @@ - + 3 @@ -184,9 +184,16 @@ - + - show in sim. + log in sim. + + + + + + + follow @@ -575,11 +582,49 @@ 4 - - - - last interpolation + + + + Interpolation + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + + + inject elv. + + + + + + + req.elevation + + + + + + + last interpolation + + + + @@ -720,7 +765,8 @@ le_UpdateTime hs_UpdateTime pb_ResetStats - pb_ShowInSimulator + pb_ShowLogInSimulator + pb_FollowInSimulator pb_StartStop tw_LogTabs le_CG @@ -737,12 +783,16 @@ le_Elevation le_SimulatorSpecific tvp_AircraftSituations - tvp_AircraftParts + tvp_Changes + le_InjectElevation + pb_InjectElevation + pb_RequestElevation + pb_GetLastInterpolation te_LastInterpolatedSituation - te_SituationChange te_TextLog te_LastInterpolatedParts - pb_GetLastInterpolation + tvp_AircraftParts + te_SituationChange