mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
Ref T268, elevation tab allowing to request elevation at arbitrary position
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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::CInterpolationLogDisplay> ui;
|
||||
QTimer m_updateTimer;
|
||||
QPointer<BlackCore::ISimulator> m_simulator; //!< related simulator
|
||||
QPointer<BlackCore::CAirspaceMonitor> 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
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tw_LogTabs">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>5</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tb_DataFlow">
|
||||
<attribute name="title">
|
||||
@@ -812,6 +812,60 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tb_ElevationAtPosition">
|
||||
<attribute name="title">
|
||||
<string>Elevation</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="gb_ElevationAtPositionCoordinates">
|
||||
<property name="title">
|
||||
<string>Coordinates</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="vl_ElevationAtPositionCoordinates">
|
||||
<property name="leftMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="BlackGui::Editors::CCoordinateForm" name="editor_ElevationCoordinate">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>170</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="gb_ElevationAtPositionResult">
|
||||
<property name="title">
|
||||
<string>Result</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="vl_ElevationAtPositionResult">
|
||||
<item>
|
||||
<widget class="QPlainTextEdit" name="pte_ElevationAtPosition">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -844,6 +898,12 @@
|
||||
<extends>QTableView</extends>
|
||||
<header>blackgui/views/aircraftsituationchangeview.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>BlackGui::Editors::CCoordinateForm</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>blackgui/editors/coordinateform.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>le_UpdateTime</tabstop>
|
||||
@@ -879,7 +939,10 @@
|
||||
<tabstop>te_LastInterpolatedSituation</tabstop>
|
||||
<tabstop>te_SituationChange</tabstop>
|
||||
<tabstop>te_LastInterpolatedParts</tabstop>
|
||||
<tabstop>tvp_InterpolatedAircraftSituations</tabstop>
|
||||
<tabstop>tvp_LoopbackAircraftSituations</tabstop>
|
||||
<tabstop>te_TextLog</tabstop>
|
||||
<tabstop>pte_ElevationAtPosition</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
Reference in New Issue
Block a user