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;
//! 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
//! \note might be slow since list can be big

View File

@@ -73,8 +73,9 @@ namespace BlackCore
}
//! \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);
return BlackMisc::Aviation::CAirportList();
}

View File

@@ -166,7 +166,7 @@ namespace BlackCore
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 no ISimulator object is available, return a dummy.
@@ -176,7 +176,7 @@ namespace BlackCore
}
Q_ASSERT(m_simulatorPlugin.second);
return m_simulatorPlugin.second->getAirportsInRange();
return m_simulatorPlugin.second->getAirportsInRange(recalculateDistance);
}
CAircraftModelList CContextSimulator::getModelSet() const

View File

@@ -78,7 +78,7 @@ namespace BlackCore
virtual int checkListeners() override;
virtual int getSimulatorStatus() 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::CSimulatorInfo getModelSetLoaderSimulator() const 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"));
}
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

View File

@@ -62,7 +62,7 @@ namespace BlackCore
virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override;
virtual int checkListeners() 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::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override;

View File

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

View File

@@ -144,7 +144,7 @@ namespace BlackCore
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0;
//! 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
//! \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);
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
int m_timerId = -1; //!< dispatch timer id
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
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(withFilter);
int ac = this->indexOf(ui->tb_AircraftInRange);
int ap = this->indexOf(ui->tb_AirportsInRange);
const int ac = this->indexOf(ui->tb_AircraftInRange);
const int ap = this->indexOf(ui->tb_AirportsInRange);
QString acs = this->tabBar()->tabText(ac);
QString aps = this->tabBar()->tabText(ap);
acs = CGuiUtility::replaceTabCountValue(acs, this->countAircraftInView());

View File

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

View File

@@ -43,7 +43,7 @@ namespace BlackSimPlugin
virtual bool isTimeSynchronized() const override { return m_simTimeSynced; }
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const 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 ------------------
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)

View File

@@ -129,7 +129,7 @@ namespace BlackSimPlugin
virtual bool updateOwnSimulatorSelcal(const BlackMisc::Aviation::CSelcal &selcal, const BlackMisc::CIdentifier &originator) override;
virtual void displayStatusMessage(const BlackMisc::CStatusMessage &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 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;