Ref T342, distance of airport can be recalculated

This commit is contained in:
Klaus Basan
2018-09-09 23:39:03 +02:00
parent 3c9b8f98ca
commit 7e9f3a6c7f
13 changed files with 32 additions and 24 deletions

View File

@@ -155,7 +155,7 @@ namespace BlackCore
virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const = 0; virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const = 0;
//! Airports in range //! Airports in range
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const = 0;
//! Installed models in simulator eco system //! Installed models in simulator eco system
//! \note might be slow since list can be big //! \note might be slow since list can be big

View File

@@ -73,8 +73,9 @@ namespace BlackCore
} }
//! \copydoc IContextSimulator::getAirportsInRange //! \copydoc IContextSimulator::getAirportsInRange
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override
{ {
Q_UNUSED(recalculatePosition);
logEmptyContextWarning(Q_FUNC_INFO); logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::Aviation::CAirportList(); return BlackMisc::Aviation::CAirportList();
} }

View File

@@ -166,7 +166,7 @@ namespace BlackCore
return m_simulatorPlugin.second->getSimulatorInternals(); return m_simulatorPlugin.second->getSimulatorInternals();
} }
CAirportList CContextSimulator::getAirportsInRange() const CAirportList CContextSimulator::getAirportsInRange(bool recalculateDistance) const
{ {
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; } if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
// If no ISimulator object is available, return a dummy. // If no ISimulator object is available, return a dummy.
@@ -176,7 +176,7 @@ namespace BlackCore
} }
Q_ASSERT(m_simulatorPlugin.second); Q_ASSERT(m_simulatorPlugin.second);
return m_simulatorPlugin.second->getAirportsInRange(); return m_simulatorPlugin.second->getAirportsInRange(recalculateDistance);
} }
CAircraftModelList CContextSimulator::getModelSet() const CAircraftModelList CContextSimulator::getModelSet() const

View File

@@ -78,7 +78,7 @@ namespace BlackCore
virtual int checkListeners() override; virtual int checkListeners() override;
virtual int getSimulatorStatus() const override; virtual int getSimulatorStatus() const override;
virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override; virtual BlackMisc::Simulation::CSimulatorInternals getSimulatorInternals() const override;
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override; virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;

View File

@@ -101,9 +101,9 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<int>(QLatin1String("getSimulatorStatus")); return m_dBusInterface->callDBusRet<int>(QLatin1String("getSimulatorStatus"));
} }
CAirportList CContextSimulatorProxy::getAirportsInRange() const CAirportList CContextSimulatorProxy::getAirportsInRange(bool recalculatePosition) const
{ {
return m_dBusInterface->callDBusRet<BlackMisc::Aviation::CAirportList>(QLatin1String("getAirportsInRange")); return m_dBusInterface->callDBusRet<BlackMisc::Aviation::CAirportList>(QLatin1String("getAirportsInRange"), recalculatePosition);
} }
CAircraftModelList CContextSimulatorProxy::getModelSet() const CAircraftModelList CContextSimulatorProxy::getModelSet() const

View File

@@ -62,7 +62,7 @@ namespace BlackCore
virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override;
virtual int checkListeners() override; virtual int checkListeners() override;
virtual int getSimulatorStatus() const override; virtual int getSimulatorStatus() const override;
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override; virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override; virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override; virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override;

View File

@@ -796,7 +796,7 @@ namespace BlackCore
return m_loopbackSituations.value(callsign); return m_loopbackSituations.value(callsign);
} }
CAirportList ISimulator::getAirportsInRange() const CAirportList ISimulator::getAirportsInRange(bool recalculateDistance) const
{ {
// default implementation // default implementation
if (this->isShuttingDown()) { return CAirportList(); } if (this->isShuttingDown()) { return CAirportList(); }
@@ -805,9 +805,9 @@ namespace BlackCore
const CAirportList airports = sApp->getWebDataServices()->getAirports(); const CAirportList airports = sApp->getWebDataServices()->getAirports();
if (airports.isEmpty()) { return airports; } if (airports.isEmpty()) { return airports; }
const CCoordinateGeodetic ownPosition = this->getOwnAircraftPosition(); const CCoordinateGeodetic ownPosition = this->getOwnAircraftPosition();
CAirportList airportInRange = airports.findClosest(maxAirportsInRange(), ownPosition); CAirportList airportsInRange = airports.findClosest(maxAirportsInRange(), ownPosition);
if (m_autoCalcAirportDistance) { airportInRange.calculcateAndUpdateRelativeDistanceAndBearing(ownPosition); } if (recalculateDistance) { airportsInRange.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition()); }
return airportInRange; return airportsInRange;
} }
CAircraftModel ISimulator::reverseLookupModel(const CAircraftModel &model) CAircraftModel ISimulator::reverseLookupModel(const CAircraftModel &model)

View File

@@ -144,7 +144,7 @@ namespace BlackCore
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0; virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0;
//! Airports in range from simulator, or if not available from web service //! Airports in range from simulator, or if not available from web service
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const;
//! Set time synchronization between simulator and user's computer time //! Set time synchronization between simulator and user's computer time
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature //! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
@@ -499,7 +499,6 @@ namespace BlackCore
static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model); static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model);
bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold) bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold)
bool m_autoCalcAirportDistance = true; //!< automatically calculate airport distance and bearing
bool m_updateRemoteAircraftInProgress = false; //!< currently updating remote aircraft bool m_updateRemoteAircraftInProgress = false; //!< currently updating remote aircraft
int m_timerId = -1; //!< dispatch timer id int m_timerId = -1; //!< dispatch timer id
int m_statsUpdateAircraftRuns = 0; //!< statistics update count int m_statsUpdateAircraftRuns = 0; //!< statistics update count

View File

@@ -108,7 +108,7 @@ namespace BlackGui
const bool counter = ((m_updateCounter % 5) == 0); // less frequent than aircraft const bool counter = ((m_updateCounter % 5) == 0); // less frequent than aircraft
if (this->countAirportsInRangeInView() < 1 || (visible && counter)) if (this->countAirportsInRangeInView() < 1 || (visible && counter))
{ {
ui->tvp_AirportsInRange->updateContainerMaybeAsync(sGui->getIContextSimulator()->getAirportsInRange()); ui->tvp_AirportsInRange->updateContainerMaybeAsync(sGui->getIContextSimulator()->getAirportsInRange(true));
} }
} }
@@ -142,8 +142,8 @@ namespace BlackGui
{ {
Q_UNUSED(count); Q_UNUSED(count);
Q_UNUSED(withFilter); Q_UNUSED(withFilter);
int ac = this->indexOf(ui->tb_AircraftInRange); const int ac = this->indexOf(ui->tb_AircraftInRange);
int ap = this->indexOf(ui->tb_AirportsInRange); const int ap = this->indexOf(ui->tb_AirportsInRange);
QString acs = this->tabBar()->tabText(ac); QString acs = this->tabBar()->tabText(ac);
QString aps = this->tabBar()->tabText(ap); QString aps = this->tabBar()->tabText(ap);
acs = CGuiUtility::replaceTabCountValue(acs, this->countAircraftInView()); acs = CGuiUtility::replaceTabCountValue(acs, this->countAircraftInView());

View File

@@ -118,10 +118,15 @@ namespace BlackSimPlugin
return true; return true;
} }
CAirportList CSimulatorFsCommon::getAirportsInRange() const CAirportList CSimulatorFsCommon::getAirportsInRange(bool recalculateDistance) const
{ {
if (!m_airportsInRangeFromSimulator.isEmpty()) { return m_airportsInRangeFromSimulator; } if (!m_airportsInRangeFromSimulator.isEmpty())
return ISimulator::getAirportsInRange(); {
CAirportList airports = m_airportsInRangeFromSimulator;
if (recalculateDistance) { airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition()); }
return airports;
}
return ISimulator::getAirportsInRange(recalculateDistance);
} }
void CSimulatorFsCommon::onSwiftDbAirportsRead() void CSimulatorFsCommon::onSwiftDbAirportsRead()

View File

@@ -43,7 +43,7 @@ namespace BlackSimPlugin
virtual bool isTimeSynchronized() const override { return m_simTimeSynced; } virtual bool isTimeSynchronized() const override { return m_simTimeSynced; }
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override; virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override;
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
// ---------------------- ISimulator ------------------ // ---------------------- ISimulator ------------------
protected: protected:

View File

@@ -432,9 +432,12 @@ namespace BlackSimPlugin
} }
} }
CAirportList CSimulatorXPlane::getAirportsInRange() const CAirportList CSimulatorXPlane::getAirportsInRange(bool recalculateDistance) const
{ {
return m_airportsInRange; if (!recalculateDistance) { return m_airportsInRange; }
CAirportList airports(m_airportsInRange);
airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition());
return airports;
} }
bool CSimulatorXPlane::setTimeSynchronization(bool enable, const PhysicalQuantities::CTime &offset) bool CSimulatorXPlane::setTimeSynchronization(bool enable, const PhysicalQuantities::CTime &offset)

View File

@@ -129,7 +129,7 @@ namespace BlackSimPlugin
virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override; virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override;
virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override; virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override;
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override; virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override;
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override; virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override; virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override;
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); } virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); }
virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override; virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;