refactor: Remove airport view

This commit is contained in:
Lars Toenning
2024-12-30 00:13:19 +01:00
parent f2dd54d77b
commit edbabe34be
35 changed files with 1 additions and 621 deletions

View File

@@ -164,9 +164,6 @@ namespace swift::core::context
//! Simulator setup
virtual swift::misc::simulation::CSimulatorInternals getSimulatorInternals() const = 0;
//! Airports in range
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const = 0;
//! Installed models in simulator eco system
//! \note might be slow since list can be big
virtual swift::misc::simulation::CAircraftModelList getModelSet() const = 0;

View File

@@ -80,14 +80,6 @@ namespace swift::core::context
logEmptyContextWarning(Q_FUNC_INFO);
}
//! \copydoc IContextSimulator::getAirportsInRange
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override
{
Q_UNUSED(recalculatePosition)
logEmptyContextWarning(Q_FUNC_INFO);
return swift::misc::aviation::CAirportList();
}
//! \copydoc IContextSimulator::getModelSet
virtual swift::misc::simulation::CAircraftModelList getModelSet() const override
{

View File

@@ -214,14 +214,6 @@ namespace swift::core::context
return m_simulatorPlugin.second->getSimulatorInternals();
}
CAirportList CContextSimulator::getAirportsInRange(bool recalculateDistance) const
{
if (isDebugEnabled()) { CLogMessage(this, CLogCategories::contextSlot()).debug() << Q_FUNC_INFO; }
// If no ISimulator object is available, return a dummy.
if (!m_simulatorPlugin.second || m_simulatorPlugin.first.isUnspecified()) { return CAirportList(); }
return m_simulatorPlugin.second->getAirportsInRange(recalculateDistance);
}
CAircraftModelList CContextSimulator::getModelSet() const
{
if (isDebugEnabled()) { CLogMessage(this, CLogCategories::contextSlot()).debug() << Q_FUNC_INFO; }

View File

@@ -103,9 +103,6 @@ namespace swift::core
//! \copydoc swift::core::context::IContextSimulator::getSimulatorInternals
virtual swift::misc::simulation::CSimulatorInternals getSimulatorInternals() const override;
//! \copydoc swift::core::context::IContextSimulator::getAirportsInRange
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
//! \copydoc swift::core::context::IContextSimulator::getModelSetLoaderSimulator
virtual swift::misc::simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;

View File

@@ -136,11 +136,6 @@ namespace swift::core::context
return m_dBusInterface->callDBusRet<ISimulator::SimulatorStatus>(QLatin1String("getSimulatorStatus"));
}
CAirportList CContextSimulatorProxy::getAirportsInRange(bool recalculatePosition) const
{
return m_dBusInterface->callDBusRet<CAirportList>(QLatin1String("getAirportsInRange"), recalculatePosition);
}
CAircraftModelList CContextSimulatorProxy::getModelSet() const
{
return m_dBusInterface->callDBusRet<CAircraftModelList>(QLatin1String("getModelSet"));

View File

@@ -83,9 +83,6 @@ namespace swift::core
//! \copydoc swift::core::context::IContextSimulator::getSimulatorStatus
virtual ISimulator::SimulatorStatus getSimulatorStatus() const override;
//! \copydoc swift::core::context::IContextSimulator::getAirportsInRange
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override;
//! \copydoc swift::core::context::IContextSimulator::getModelSet
virtual swift::misc::simulation::CAircraftModelList getModelSet() const override;

View File

@@ -634,8 +634,6 @@ namespace swift::core
{
connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbAllDataRead, this,
&ISimulator::onSwiftDbAllDataRead, Qt::QueuedConnection);
connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbAirportsRead, this,
&ISimulator::onSwiftDbAirportsRead, Qt::QueuedConnection);
connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbModelMatchingEntitiesRead, this,
&ISimulator::onSwiftDbModelMatchingEntitiesRead, Qt::QueuedConnection);
}
@@ -751,26 +749,6 @@ namespace swift::core
return r;
}
CAirportList ISimulator::getWebServiceAirports() const
{
if (this->isShuttingDown()) { return {}; }
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return {}; }
return sApp->getWebDataServices()->getAirports();
}
CAirport ISimulator::getWebServiceAirport(const CAirportIcaoCode &icao) const
{
if (this->isShuttingDown()) { return {}; }
if (!sApp || sApp->isShuttingDown() || !sApp->hasWebDataServices()) { return {}; }
return sApp->getWebDataServices()->getAirports().findFirstByIcao(icao);
}
int ISimulator::maxAirportsInRange() const
{
// might change in future or become a setting or such
return 20;
}
void ISimulator::onSwiftDbAllDataRead()
{
// void, can be overridden in specialized drivers
@@ -781,11 +759,6 @@ namespace swift::core
// void, can be overridden in specialized drivers
}
void ISimulator::onSwiftDbAirportsRead()
{
// void, can be overridden in specialized drivers
}
void ISimulator::initSimulatorInternals()
{
const CSpecializedSimulatorSettings s = this->getSimulatorSettings();
@@ -887,23 +860,6 @@ namespace swift::core
return m_loopbackSituations.value(callsign);
}
CAirportList ISimulator::getAirportsInRange(bool recalculateDistance) const
{
// default implementation
if (this->isShuttingDown()) { return {}; }
if (!sApp || !sApp->hasWebDataServices()) { return {}; }
const CAirportList airports = sApp->getWebDataServices()->getAirports();
if (airports.isEmpty()) { return airports; }
const CCoordinateGeodetic ownPosition = this->getOwnAircraftPosition();
CAirportList airportsInRange = airports.findClosest(maxAirportsInRange(), ownPosition);
if (recalculateDistance)
{
airportsInRange.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition());
}
return airportsInRange;
}
CAircraftModel ISimulator::reverseLookupModel(const CAircraftModel &model)
{
bool modified = false;

View File

@@ -133,9 +133,6 @@ namespace swift::core
//! Display a text message
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const = 0;
//! Airports in range from simulator, or if not available from web service
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const;
//! Is the aircraft rendered (displayed in simulator)?
//! This shall only return true if the aircraft is really visible in the simulator
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const = 0;
@@ -407,7 +404,6 @@ namespace swift::core
//! When swift DB data are read
virtual void onSwiftDbAllDataRead();
virtual void onSwiftDbModelMatchingEntitiesRead();
virtual void onSwiftDbAirportsRead();
//! @}
//! Init the internals info from the simulator
@@ -416,15 +412,6 @@ namespace swift::core
//! Parsed in derived classes
virtual bool parseDetails(const swift::misc::CSimpleCommandParser &parser) = 0;
//! Airports from web services
swift::misc::aviation::CAirportList getWebServiceAirports() const;
//! Airport from web services by ICAO code
swift::misc::aviation::CAirport getWebServiceAirport(const swift::misc::aviation::CAirportIcaoCode &icao) const;
//! Max.airports in range
int maxAirportsInRange() const;
//! Recalculate the rendered aircraft, this happens when restrictions are applied (max. aircraft, range)
virtual void onRecalculatedRenderedAircraft(const swift::misc::simulation::CAirspaceAircraftSnapshot &snapshot);

View File

@@ -675,8 +675,6 @@ add_library(gui SHARED
models/airlineicaofilter.h
models/airlineicaolistmodel.cpp
models/airlineicaolistmodel.h
models/airportlistmodel.cpp
models/airportlistmodel.h
models/allmodelcontainers.h
models/allmodels.h
models/applicationinfolistmodel.cpp
@@ -818,8 +816,6 @@ add_library(gui SHARED
views/aircraftsituationview.h
views/airlineicaoview.cpp
views/airlineicaoview.h
views/airportview.cpp
views/airportview.h
views/applicationinfoview.cpp
views/applicationinfoview.h
views/atcstationtreeview.cpp

View File

@@ -17,7 +17,6 @@
#include "gui/guiutility.h"
#include "gui/infoarea.h"
#include "gui/models/simulatedaircraftlistmodel.h"
#include "gui/views/airportview.h"
#include "gui/views/simulatedaircraftview.h"
#include "gui/views/viewbase.h"
#include "misc/network/fsdsetup.h"
@@ -46,7 +45,6 @@ namespace swift::gui::components
this->setCurrentIndex(0);
this->tabBar()->setExpanding(false);
this->tabBar()->setUsesScrollButtons(true);
ui->tvp_AirportsInRange->setResizeMode(CAirportView::ResizingOnce);
ui->tvp_AircraftInRange->setAircraftMode(CSimulatedAircraftListModel::NetworkMode);
ui->tvp_AircraftInRange->configureMenu(true, true, false, true, true, true);
@@ -54,8 +52,6 @@ namespace swift::gui::components
&CAircraftComponent::onRowCountChanged);
connect(ui->tvp_AircraftInRange, &CSimulatedAircraftView::requestTextMessageWidget, this,
&CAircraftComponent::requestTextMessageWidget);
connect(ui->tvp_AirportsInRange, &CSimulatedAircraftView::modelDataChangedDigest, this,
&CAircraftComponent::onRowCountChanged);
connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this,
&CAircraftComponent::onConnectionStatusChanged, Qt::QueuedConnection);
connect(sGui->getIContextOwnAircraft(), &IContextOwnAircraft::movedAircraft, this,
@@ -74,12 +70,6 @@ namespace swift::gui::components
return ui->tvp_AircraftInRange->rowCount();
}
int CAircraftComponent::countAirportsInRangeInView() const
{
Q_ASSERT(ui->tvp_AirportsInRange);
return ui->tvp_AirportsInRange->rowCount();
}
bool CAircraftComponent::setParentDockWidgetInfoArea(CDockWidgetInfoArea *parentDockableWidget)
{
CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea(parentDockableWidget);
@@ -103,16 +93,6 @@ namespace swift::gui::components
ui->tvp_AircraftInRange->updateContainerMaybeAsync(sGui->getIContextNetwork()->getAircraftInRange());
}
}
if (sGui->getIContextSimulator()->getSimulatorStatus() > 0)
{
const bool visible = (this->isVisibleWidget() && this->currentWidget() == ui->tb_AirportsInRange);
const bool counter = ((m_updateCounter % 5) == 0); // less frequent than aircraft
if (this->countAirportsInRangeInView() < 1 || (visible && counter))
{
ui->tvp_AirportsInRange->updateContainerMaybeAsync(
sGui->getIContextSimulator()->getAirportsInRange(true));
}
}
m_updateCounter++;
}
@@ -127,7 +107,6 @@ namespace swift::gui::components
{
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextNetwork() || !sGui->getIContextSimulator()) { return; }
ui->tvp_AircraftInRange->updateContainerMaybeAsync(sGui->getIContextNetwork()->getAircraftInRange());
ui->tvp_AirportsInRange->updateContainerMaybeAsync(sGui->getIContextSimulator()->getAirportsInRange(true));
}
void CAircraftComponent::onInfoAreaTabBarChanged(int index)
@@ -151,13 +130,8 @@ namespace swift::gui::components
Q_UNUSED(count)
Q_UNUSED(withFilter)
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());
aps = CGuiUtility::replaceTabCountValue(aps, this->countAirportsInRangeInView());
this->tabBar()->setTabText(ac, acs);
this->tabBar()->setTabText(ap, aps);
}
void CAircraftComponent::onConnectionStatusChanged(const CConnectionStatus &from, const CConnectionStatus &to)

View File

@@ -61,9 +61,6 @@ namespace swift::gui
//! Aircraft in range
int countAircraftInView() const;
//! Airports in range
int countAirportsInRangeInView() const;
//! \copydoc CEnableForDockWidgetInfoArea::setParentDockWidgetInfoArea
virtual bool setParentDockWidgetInfoArea(swift::gui::CDockWidgetInfoArea *parentDockableWidget) override;

View File

@@ -10,9 +10,6 @@
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Airports in range</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
@@ -51,41 +48,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tb_AirportsInRange">
<attribute name="title">
<string>Airports in range</string>
</attribute>
<layout class="QVBoxLayout" name="vl_AirportsInRange">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="swift::gui::views::CAirportView" name="tvp_AirportsInRange">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</widget>
<customwidgets>
<customwidget>
@@ -93,11 +55,6 @@
<extends>QTableView</extends>
<header>gui/views/simulatedaircraftview.h</header>
</customwidget>
<customwidget>
<class>swift::gui::views::CAirportView</class>
<extends>QTableView</extends>
<header>gui/views/airportview.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@@ -1,42 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
#include "gui/models/airportlistmodel.h"
#include <Qt>
#include <QtGlobal>
#include "gui/models/columnformatters.h"
#include "gui/models/columns.h"
#include "misc/geo/coordinategeodetic.h"
#include "misc/pq/length.h"
#include "misc/pq/units.h"
using namespace swift::misc::aviation;
using namespace swift::misc::geo;
using namespace swift::misc::physical_quantities;
namespace swift::gui::models
{
CAirportListModel::CAirportListModel(QObject *parent) : CListModelBase("AirportListModel", parent)
{
m_columns.addColumn(CColumn::standardValueObject("ICAO", CAirport::IndexIcao));
m_columns.addColumn(CColumn("distance", CAirport::IndexRelativeDistance, new CAirspaceDistanceFormatter()));
m_columns.addColumn(CColumn("bearing", CAirport::IndexRelativeBearing, new CAngleDegreeFormatter()));
m_columns.addColumn(CColumn::standardString("name", CAirport::IndexDescriptiveName));
m_columns.addColumn(CColumn("elevation", CAirport::IndexElevation, new CAltitudeFormatter()));
m_columns.addColumn(CColumn("latitude", CAirport::IndexLatitude, new CLatLonFormatter()));
m_columns.addColumn(CColumn("longitude", CAirport::IndexLongitude, new CLatLonFormatter()));
// default sort order
this->setSortColumnByPropertyIndex(CAirport::IndexRelativeDistance);
m_sortOrder = Qt::AscendingOrder;
// force strings for translation in resource files
(void)QT_TRANSLATE_NOOP("ModelAirportList", "ICAO");
(void)QT_TRANSLATE_NOOP("ModelAirportList", "distance");
(void)QT_TRANSLATE_NOOP("ModelAirportList", "name");
(void)QT_TRANSLATE_NOOP("ModelAirportList", "elevation");
(void)QT_TRANSLATE_NOOP("ModelAirportList", "bearing");
}
} // namespace swift::gui::models

View File

@@ -1,30 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \file
#ifndef SWIFT_GUI_MODELS_AIRPORTLISTMODEL_H
#define SWIFT_GUI_MODELS_AIRPORTLISTMODEL_H
#include "gui/models/listmodelbase.h"
#include "gui/swiftguiexport.h"
#include "misc/aviation/airportlist.h"
class QObject;
namespace swift::gui::models
{
//! Airport list model
class SWIFT_GUI_EXPORT CAirportListModel : public CListModelBase<swift::misc::aviation::CAirportList, true>
{
Q_OBJECT
public:
//! Constructor
explicit CAirportListModel(QObject *parent = nullptr);
//! Destructor
virtual ~CAirportListModel() override {}
};
} // namespace swift::gui::models
#endif // SWIFT_GUI_MODELS_AIRPORTLISTMODEL_H

View File

@@ -12,7 +12,6 @@
#include "gui/models/aircraftsituationchangelistmodel.h"
#include "gui/models/aircraftsituationlistmodel.h"
#include "gui/models/airlineicaolistmodel.h"
#include "gui/models/airportlistmodel.h"
#include "gui/models/applicationinfolistmodel.h"
#include "gui/models/atcstationlistmodel.h"
#include "gui/models/audiodeviceinfolistmodel.h"

View File

@@ -1,14 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
#include "gui/views/airportview.h"
#include "gui/models/airportlistmodel.h"
using namespace swift::misc;
using namespace swift::gui::models;
namespace swift::gui::views
{
CAirportView::CAirportView(QWidget *parent) : CViewBase(parent) { this->standardInit(new CAirportListModel(this)); }
} // namespace swift::gui::views

View File

@@ -1,26 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \file
#ifndef SWIFT_GUI_VIEWS_AIRPORTVIEW_H
#define SWIFT_GUI_VIEWS_AIRPORTVIEW_H
#include "gui/models/airportlistmodel.h"
#include "gui/swiftguiexport.h"
#include "gui/views/viewbase.h"
namespace swift::gui::views
{
//! Airports view
class SWIFT_GUI_EXPORT CAirportView : public CViewBase<models::CAirportListModel>
{
Q_OBJECT
public:
//! Constructor
explicit CAirportView(QWidget *parent = nullptr);
};
} // namespace swift::gui::views
#endif // SWIFT_GUI_VIEWS_AIRPORTVIEW_H

View File

@@ -11,7 +11,6 @@ namespace swift::gui::views
template class CViewBase<swift::gui::models::CAirlineIcaoCodeListModel>;
template class CViewBase<swift::gui::models::CAircraftCategoryListModel>;
template class CViewBase<swift::gui::models::CAircraftIcaoCodeListModel>;
template class CViewBase<swift::gui::models::CAirportListModel>;
template class CViewBase<swift::gui::models::CAtcStationListModel>;
template class CViewBase<swift::gui::models::CLiveryListModel>;
} // namespace swift::gui::views

View File

@@ -103,10 +103,6 @@ namespace swift::simplugin::flightgear
const QString &icao, const QString &modelString, const QString &name,
const QString &description);
//! Airports in range are updated
void airportsInRangeUpdated(const QStringList &icaoCodes, const QStringList &names, const QList<double> &lats,
const QList<double> &lons, const QList<double> &alts);
public slots:
//! Get Flightgear version number
int getVersionNumber();

View File

@@ -356,8 +356,6 @@ namespace swift::simplugin::flightgear
setSimulatorDetails("Flightgear", {}, "");
connect(m_serviceProxy, &CFGSwiftBusServiceProxy::aircraftModelChanged, this,
&CSimulatorFlightgear::emitOwnAircraftModelChanged);
connect(m_serviceProxy, &CFGSwiftBusServiceProxy::airportsInRangeUpdated, this,
&CSimulatorFlightgear::setAirportsInRange);
connect(m_trafficProxy, &CFGSwiftBusTrafficProxy::simFrame, this, &CSimulatorFlightgear::updateRemoteAircraft);
connect(m_trafficProxy, &CFGSwiftBusTrafficProxy::remoteAircraftAdded, this,
&CSimulatorFlightgear::onRemoteAircraftAdded);
@@ -432,36 +430,6 @@ namespace swift::simplugin::flightgear
m_serviceProxy->addTextMessage(message.getSenderCallsign().toQString() + ": " + message.getMessage());
}
void CSimulatorFlightgear::setAirportsInRange(const QStringList &icaos, const QStringList &names,
const CSequence<double> &lats, const CSequence<double> &lons,
const CSequence<double> &alts)
{
//! \todo restrict to maxAirportsInRange()
m_airportsInRange.clear();
auto icaoIt = icaos.begin();
auto nameIt = names.begin();
auto latIt = lats.begin();
auto lonIt = lons.begin();
auto altIt = alts.begin();
for (; icaoIt != icaos.end() && nameIt != names.end() && latIt != lats.end() && lonIt != lons.end() &&
altIt != alts.end();
++icaoIt, ++nameIt, ++latIt, ++lonIt, ++altIt)
{
m_airportsInRange.push_back({ *icaoIt,
{ CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()),
CAltitude(*altIt, CLengthUnit::m()) },
*nameIt });
}
}
CAirportList CSimulatorFlightgear::getAirportsInRange(bool recalculateDistance) const
{
if (!recalculateDistance) { return m_airportsInRange; }
CAirportList airports(m_airportsInRange);
airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition());
return airports;
}
bool CSimulatorFlightgear::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
{
return m_flightgearAircraftObjects.contains(callsign);

View File

@@ -131,7 +131,6 @@ namespace swift::simplugin::flightgear
const swift::misc::CIdentifier &originator) override;
virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const override;
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const override;
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const override;
virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const override;
virtual void unload() override;
@@ -171,9 +170,6 @@ namespace swift::simplugin::flightgear
using QDoubleList = QList<double>;
void setAirportsInRange(const QStringList &icaoCodes, const QStringList &names,
const swift::misc::CSequence<double> &lats, const swift::misc::CSequence<double> &lons,
const swift::misc::CSequence<double> &alts);
void emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery,
const QString &icao, const QString &modelString, const QString &name,
const QString &description);
@@ -234,7 +230,6 @@ namespace swift::simplugin::flightgear
QTimer m_slowTimer;
QTimer m_airportUpdater;
QTimer m_pendingAddedTimer;
swift::misc::aviation::CAirportList m_airportsInRange; //!< aiports in range of own aircraft
swift::misc::CData<swift::misc::simulation::data::TModelSetCacheFG> m_modelSet {
this
}; //!< Flightgear model set

View File

@@ -58,25 +58,4 @@ namespace swift::simplugin::fscommon
this->emitSimulatorCombinedStatus();
return r;
}
CAirportList CSimulatorFsCommon::getAirportsInRange(bool recalculateDistance) const
{
if (!m_airportsInRangeFromSimulator.isEmpty())
{
CAirportList airports = m_airportsInRangeFromSimulator;
if (recalculateDistance)
{
airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition());
}
return airports;
}
return ISimulator::getAirportsInRange(recalculateDistance);
}
void CSimulatorFsCommon::onSwiftDbAirportsRead()
{
const CAirportList webServiceAirports = this->getWebServiceAirports();
if (!webServiceAirports.isEmpty()) { m_airportsInRangeFromSimulator.updateMissingParts(webServiceAirports); }
ISimulator::onSwiftDbAirportsRead();
}
} // namespace swift::simplugin::fscommon

View File

@@ -32,7 +32,6 @@ namespace swift::simplugin::fscommon
// ---------------------- ISimulator ------------------
virtual bool disconnectFrom() override;
virtual bool isPaused() const override { return m_simPaused; }
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
// ---------------------- ISimulator ------------------
protected:
@@ -45,9 +44,6 @@ namespace swift::simplugin::fscommon
//! Init the internal objects
virtual void initSimulatorInternals() override;
//! When swift DB data are read
virtual void onSwiftDbAirportsRead() override;
//! \copydoc swift::core::ISimulator::reset
virtual void reset() override;
@@ -58,7 +54,6 @@ namespace swift::simplugin::fscommon
0; //!< own aircraft updates, even with 50 updates/sec long enough even for 32bit
int m_skipCockpitUpdateCycles = 0; //!< skip some update cycles to allow changes in simulator cockpit to be set
bool m_simPaused = false; //!< simulator paused?
swift::misc::aviation::CAirportList m_airportsInRangeFromSimulator; //!< airports in range of own aircraft
// cockpit as set in SIM
swift::misc::aviation::CComSystem m_simCom1; //!< cockpit COM1 state in simulator

View File

@@ -2211,39 +2211,6 @@ namespace swift::simplugin::fsxcommon
return ok;
}
void CSimulatorFsxCommon::triggerUpdateAirports(const CAirportList &airports)
{
if (this->isShuttingDownOrDisconnected()) { return; }
if (airports.isEmpty()) { return; }
QPointer<CSimulatorFsxCommon> myself(this);
QTimer::singleShot(0, this, [=] {
if (!myself) { return; }
this->updateAirports(airports);
});
}
void CSimulatorFsxCommon::updateAirports(const CAirportList &airports)
{
if (airports.isEmpty()) { return; }
static const CLength maxDistance(200.0, CLengthUnit::NM());
const CCoordinateGeodetic posAircraft(this->getOwnAircraftPosition());
for (const CAirport &airport : airports)
{
CAirport consolidatedAirport(airport);
const CLength d = consolidatedAirport.calculcateAndUpdateRelativeDistanceAndBearing(posAircraft);
if (d > maxDistance) { continue; }
consolidatedAirport.updateMissingParts(this->getWebServiceAirport(airport.getIcao()));
m_airportsInRangeFromSimulator.replaceOrAddByIcao(consolidatedAirport);
if (m_airportsInRangeFromSimulator.size() > this->maxAirportsInRange())
{
m_airportsInRangeFromSimulator.sortByDistanceToReferencePosition();
m_airportsInRangeFromSimulator.truncate(this->maxAirportsInRange());
}
}
}
bool CSimulatorFsxCommon::sendRemoteAircraftPartsToSimulator(const CSimConnectObject &simObject,
const CAircraftParts &parts)
{

View File

@@ -461,12 +461,6 @@ namespace swift::simplugin::fsxcommon
bool updateRemoteAircraftParts(const CSimConnectObject &simObject,
const swift::misc::simulation::CInterpolationResult &result, bool forcedUpdate);
//! Calling CSimulatorFsxCommon::updateAirports
void triggerUpdateAirports(const swift::misc::aviation::CAirportList &airports);
//! Update airports from simulator
void updateAirports(const swift::misc::aviation::CAirportList &airports);
//! Send parts to simulator
//! \remark does not send if there is no change
bool sendRemoteAircraftPartsToSimulator(const CSimConnectObject &simObject,

View File

@@ -368,32 +368,6 @@ namespace swift::simplugin::fsxcommon
}
break; // SIMCONNECT_RECV_ID_SIMOBJECT_DATA
}
case SIMCONNECT_RECV_ID_AIRPORT_LIST:
{
const SIMCONNECT_RECV_AIRPORT_LIST *pAirportList = static_cast<SIMCONNECT_RECV_AIRPORT_LIST *>(pData);
CAirportList simAirports;
for (unsigned i = 0; i < pAirportList->dwArraySize; ++i)
{
const SIMCONNECT_DATA_FACILITY_AIRPORT *pFacilityAirport = pAirportList->rgData + i;
if (!pFacilityAirport) { break; }
const QString icao(pFacilityAirport->Icao);
if (icao.isEmpty()) { continue; } // airfield without ICAO code
if (!CAirportIcaoCode::isValidIcaoDesignator(icao, true))
{
continue;
} // tiny airfields/strips in simulator
if (CAirportIcaoCode::containsNumbers(icao)) { continue; } // tiny airfields/strips in simulator
const CCoordinateGeodetic pos(pFacilityAirport->Latitude, pFacilityAirport->Longitude,
pFacilityAirport->Altitude);
const CAirport airport(CAirportIcaoCode(icao), pos);
simAirports.push_back(airport);
}
if (!simAirports.isEmpty())
{
simulatorFsxP3D->triggerUpdateAirports(simAirports); // real "work" outside SimConnectProc
}
break; // SIMCONNECT_RECV_ID_AIRPORT_LIST
}
case SIMCONNECT_RECV_ID_CLIENT_DATA:
{
if (!simulatorFsxP3D->m_useSbOffsets) { break; }

View File

@@ -498,8 +498,6 @@ namespace swift::simplugin::xplane
setSimulatorDetails("X-Plane", {}, xplaneVersion);
connect(m_serviceProxy, &CXSwiftBusServiceProxy::aircraftModelChanged, this,
&CSimulatorXPlane::emitOwnAircraftModelChanged);
connect(m_serviceProxy, &CXSwiftBusServiceProxy::airportsInRangeUpdated, this,
&CSimulatorXPlane::setAirportsInRange);
m_serviceProxy->updateAirportsInRange();
connect(m_trafficProxy, &CXSwiftBusTrafficProxy::simFrame, this, &CSimulatorXPlane::updateRemoteAircraft);
connect(m_trafficProxy, &CXSwiftBusTrafficProxy::remoteAircraftAdded, this,
@@ -606,36 +604,6 @@ namespace swift::simplugin::xplane
color.redF(), color.greenF(), color.blueF());
}
void CSimulatorXPlane::setAirportsInRange(const QStringList &icaos, const QStringList &names,
const CSequence<double> &lats, const CSequence<double> &lons,
const CSequence<double> &alts)
{
//! \todo restrict to maxAirportsInRange()
m_airportsInRange.clear();
auto icaoIt = icaos.begin();
auto nameIt = names.begin();
auto latIt = lats.begin();
auto lonIt = lons.begin();
auto altIt = alts.begin();
for (; icaoIt != icaos.end() && nameIt != names.end() && latIt != lats.end() && lonIt != lons.end() &&
altIt != alts.end();
++icaoIt, ++nameIt, ++latIt, ++lonIt, ++altIt)
{
m_airportsInRange.push_back({ *icaoIt,
{ CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()),
CAltitude(*altIt, CLengthUnit::m()) },
*nameIt });
}
}
CAirportList CSimulatorXPlane::getAirportsInRange(bool recalculateDistance) const
{
if (!recalculateDistance) { return m_airportsInRange; }
CAirportList airports(m_airportsInRange);
airports.calculcateAndUpdateRelativeDistanceAndBearing(this->getOwnAircraftPosition());
return airports;
}
bool CSimulatorXPlane::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
{
return m_xplaneAircraftObjects.contains(callsign);

View File

@@ -135,7 +135,6 @@ namespace swift::simplugin::xplane
const swift::misc::CIdentifier &originator) override;
virtual void displayStatusMessage(const swift::misc::CStatusMessage &message) const override;
virtual void displayTextMessage(const swift::misc::network::CTextMessage &message) const override;
virtual swift::misc::aviation::CAirportList getAirportsInRange(bool recalculateDistance) const override;
virtual bool isPhysicallyRenderedAircraft(const swift::misc::aviation::CCallsign &callsign) const override;
virtual swift::misc::aviation::CCallsignSet physicallyRenderedAircraft() const override;
virtual bool followAircraft(const swift::misc::aviation::CCallsign &callsign) override;
@@ -188,9 +187,6 @@ namespace swift::simplugin::xplane
using QDoubleList = QList<double>;
using QBoolList = QList<bool>;
void setAirportsInRange(const QStringList &icaoCodes, const QStringList &names,
const swift::misc::CSequence<double> &lats, const swift::misc::CSequence<double> &lons,
const swift::misc::CSequence<double> &alts);
void emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery,
const QString &icao, const QString &modelString, const QString &name,
const QString &description);
@@ -284,7 +280,6 @@ namespace swift::simplugin::xplane
unsigned int m_fastTimerCalls = 0; //!< how often called
unsigned int m_slowTimerCalls = 0; //!< how often called
swift::misc::aviation::CAirportList m_airportsInRange; //!< aiports in range of own aircraft
CXPlaneMPAircraftObjects m_xplaneAircraftObjects; //!< XPlane multiplayer aircraft
swift::misc::simulation::CSimulatedAircraftList m_pendingToBeAddedAircraft; //!< aircraft to be added

View File

@@ -86,10 +86,6 @@ namespace swift::simplugin::xplane
const QString &icao, const QString &modelString, const QString &name,
const QString &description);
//! Airports in range are updated
void airportsInRangeUpdated(const QStringList &icaoCodes, const QStringList &names, const QList<double> &lats,
const QList<double> &lons, const QList<double> &alts);
//! Scenery was loaded
void sceneryLoaded();

View File

@@ -32,8 +32,6 @@ add_library(xswiftbus SHARED
menus.h
messages.cpp
messages.h
navdatareference.cpp
navdatareference.h
plugin.cpp
plugin.h
service.cpp

View File

@@ -1,36 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \cond PRIVATE
#include "navdatareference.h"
#include <cmath>
namespace XSwiftBus
{
inline double degreeToRadian(double angle)
{
static const double PI = acos(-1);
return PI * angle / 180.0;
}
double calculateGreatCircleDistance(const CNavDataReference &a, const CNavDataReference &b)
{
const static double c_earthRadiusKm = 6372.8;
const double latRad1 = degreeToRadian(a.latitude());
const double latRad2 = degreeToRadian(b.latitude());
const double lonRad1 = degreeToRadian(a.longitude());
const double lonRad2 = degreeToRadian(b.longitude());
const double diffLa = latRad2 - latRad1;
const double doffLo = lonRad2 - lonRad1;
const double computation = asin(
sqrt(sin(diffLa / 2) * sin(diffLa / 2) + cos(latRad1) * cos(latRad2) * sin(doffLo / 2) * sin(doffLo / 2)));
return 2 * c_earthRadiusKm * computation;
}
} // namespace XSwiftBus
//! \endcond

View File

@@ -1,43 +0,0 @@
// SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
//! \file
#ifndef SWIFT_SIM_XSWIFTBUS_NAVDATAREFERENCE_H
#define SWIFT_SIM_XSWIFTBUS_NAVDATAREFERENCE_H
namespace XSwiftBus
{
//! Simplified version of CNavDataReference of \sa swift::misc::simulation::XPlane::CNavDataReference
class CNavDataReference
{
public:
//! Default constructor
CNavDataReference() = default;
//! Constructor
CNavDataReference(int id, double latitudeDegrees, double longitudeDegrees)
: m_id(id), m_latitudeDegrees(latitudeDegrees), m_longitudeDegrees(longitudeDegrees)
{}
//! \copydoc swift::misc::simulation::xplane::CNavDataReference::id
int id() const { return m_id; }
//! \copydoc swift::misc::simulation::xplane::CNavDataReference::latitude
double latitude() const { return m_latitudeDegrees; }
//! \copydoc swift::misc::simulation::xplane::CNavDataReference::longitude
double longitude() const { return m_longitudeDegrees; }
private:
int m_id = 0;
double m_latitudeDegrees = 0.0;
double m_longitudeDegrees = 0.0;
};
//! Free function to calculate great circle distance
double calculateGreatCircleDistance(const CNavDataReference &a, const CNavDataReference &b);
} // namespace XSwiftBus
#endif // SWIFT_SIM_XSWIFTBUS_NAVDATAREFERENCE_H

View File

@@ -150,11 +150,7 @@ namespace XSwiftBus
void CPlugin::onAircraftRepositioned()
{
if (m_service)
{
m_service->updateAirportsInRange();
m_service->resetFrameTotals();
}
if (m_service) { m_service->resetFrameTotals(); }
}
void CPlugin::onSceneryLoaded()

View File

@@ -91,7 +91,6 @@ namespace XSwiftBus
CService::CService(CSettingsProvider *settingsProvider)
: CDBusObject(settingsProvider), m_framePeriodSampler(std::make_unique<FramePeriodSampler>())
{
this->updateAirportsInRange();
this->updateMessageBoxFromSettings();
m_framePeriodSampler->show();
}
@@ -259,42 +258,6 @@ namespace XSwiftBus
if (w) { INFO_LOG("Written new config file"); }
}
void CService::readAirportsDatabase()
{
auto first = XPLMFindFirstNavAidOfType(xplm_Nav_Airport);
auto last = XPLMFindLastNavAidOfType(xplm_Nav_Airport);
if (first != XPLM_NAV_NOT_FOUND)
{
for (auto i = first; i <= last; ++i)
{
float lat, lon;
char icao[32];
XPLMGetNavAidInfo(i, nullptr, &lat, &lon, nullptr, nullptr, nullptr, icao, nullptr, nullptr);
if (icao[0] != 0) { m_airports.emplace_back(i, lat, lon); }
}
}
}
void CService::updateAirportsInRange()
{
if (m_airports.empty()) { readAirportsDatabase(); }
std::vector<std::string> icaos, names;
std::vector<double> lats, lons, alts;
std::vector<CNavDataReference> closestAirports = findClosestAirports(20, getLatitudeDeg(), getLongitudeDeg());
for (const auto &navref : closestAirports)
{
float lat, lon, alt;
char icao[32], name[256];
XPLMGetNavAidInfo(navref.id(), nullptr, &lat, &lon, &alt, nullptr, nullptr, icao, name, nullptr);
icaos.emplace_back(icao);
names.emplace_back(name);
lats.push_back(lat);
lons.push_back(lon);
alts.push_back(alt);
}
emitAirportsInRangeUpdated(icaos, names, lats, lons, alts);
}
static const char *introspection_service = DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
#include "org.swift_project.xswiftbus.service.xml"
;
@@ -475,11 +438,6 @@ namespace XSwiftBus
sendDBusMessage(reply);
});
}
else if (message.getMethodName() == "updateAirportsInRange")
{
maybeSendEmptyDBusReply(wantsReply, sender, serial);
queueDBusCall([=]() { updateAirportsInRange(); });
}
else if (message.getMethodName() == "getAircraftModelPath")
{
queueDBusCall([=]() { sendDBusReply(sender, serial, getAircraftModelPath()); });
@@ -836,21 +794,6 @@ namespace XSwiftBus
sendDBusMessage(signalAircraftModelChanged);
}
void CService::emitAirportsInRangeUpdated(const std::vector<std::string> &icaoCodes,
const std::vector<std::string> &names, const std::vector<double> &lats,
const std::vector<double> &lons, const std::vector<double> &alts)
{
CDBusMessage signalAirportsInRangeUpdated = CDBusMessage::createSignal(
XSWIFTBUS_SERVICE_OBJECTPATH, XSWIFTBUS_SERVICE_INTERFACENAME, "airportsInRangeUpdated");
signalAirportsInRangeUpdated.beginArgumentWrite();
signalAirportsInRangeUpdated.appendArgument(icaoCodes);
signalAirportsInRangeUpdated.appendArgument(names);
signalAirportsInRangeUpdated.appendArgument(lats);
signalAirportsInRangeUpdated.appendArgument(lons);
signalAirportsInRangeUpdated.appendArgument(alts);
sendDBusMessage(signalAirportsInRangeUpdated);
}
void CService::emitSceneryLoaded()
{
CDBusMessage signal =
@@ -858,22 +801,6 @@ namespace XSwiftBus
sendDBusMessage(signal);
}
std::vector<CNavDataReference> CService::findClosestAirports(int number, double latitude, double longitude)
{
CNavDataReference ref(0, latitude, longitude);
auto compareFunction = [&](const CNavDataReference &a, const CNavDataReference &b) {
return calculateGreatCircleDistance(a, ref) < calculateGreatCircleDistance(b, ref);
};
number = std::min(static_cast<int>(m_airports.size()), number);
std::vector<CNavDataReference> closestAirports = m_airports;
std::partial_sort(closestAirports.begin(), closestAirports.begin() + number, closestAirports.end(),
compareFunction);
closestAirports.resize(static_cast<std::vector<CNavDataReference>::size_type>(number));
return closestAirports;
}
void CService::updateMessageBoxFromSettings()
{
// left, top, right, bottom, height size percentage

View File

@@ -14,7 +14,6 @@
#include "dbusobject.h"
#include "datarefs.h"
#include "messages.h"
#include "navdatareference.h"
#include "terrainprobe.h"
#include <XPLM/XPLMNavigation.h>
#include <string>
@@ -70,9 +69,6 @@ namespace XSwiftBus
//! Add a text message to the on-screen display, with RGB components in the range [0,1]
void addTextMessage(const std::string &text, double red, double green, double blue);
//! Called by newly connected client to cause airportsInRangeUpdated to be emitted.
void updateAirportsInRange();
//! Get full path to current aircraft model
std::string getAircraftModelPath() const;
@@ -335,10 +331,6 @@ namespace XSwiftBus
const std::string &icao, const std::string &modelString, const std::string &name,
const std::string &description);
void emitAirportsInRangeUpdated(const std::vector<std::string> &icaoCodes,
const std::vector<std::string> &names, const std::vector<double> &lats,
const std::vector<double> &lons, const std::vector<double> &alts);
void emitSceneryLoaded();
CMessageBoxControl m_messages { 16, 16, 16 };
@@ -346,12 +338,8 @@ namespace XSwiftBus
bool m_disappearMessageWindow = true;
int m_disapperMessageWindowTimeMs = 5000;
std::chrono::system_clock::time_point m_disappearMessageWindowTime;
std::vector<CNavDataReference> m_airports;
CTerrainProbe m_terrainProbe;
void readAirportsDatabase();
std::vector<CNavDataReference> findClosestAirports(int number, double latitude, double longitude);
//! Redraw message box after reading from the settings
void updateMessageBoxFromSettings();