From 463ed4bfbd4c19b33d64d6822d71dd4719811b71 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Mon, 12 Aug 2019 22:41:28 +0100 Subject: [PATCH] Ref T709 Made settings provider non-static. --- src/xswiftbus/dbusobject.cpp | 16 ++++------------ src/xswiftbus/dbusobject.h | 2 +- src/xswiftbus/traffic.cpp | 14 ++++++++++++-- src/xswiftbus/traffic.h | 2 ++ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/xswiftbus/dbusobject.cpp b/src/xswiftbus/dbusobject.cpp index b86a42c8a..927fd9fdc 100644 --- a/src/xswiftbus/dbusobject.cpp +++ b/src/xswiftbus/dbusobject.cpp @@ -9,18 +9,10 @@ #include "dbusobject.h" #include -XSwiftBus::CSettingsProvider *XSwiftBus::CDBusObject::s_settingsProvider = nullptr; - namespace XSwiftBus { - CDBusObject::CDBusObject(CSettingsProvider *settingsProvider) - { - if (!CDBusObject::s_settingsProvider) - { - // we expect a single pointer - CDBusObject::s_settingsProvider = settingsProvider; - } - } + CDBusObject::CDBusObject(CSettingsProvider *settingsProvider) : m_settingsProvider(settingsProvider) + {} CDBusObject::~CDBusObject() { @@ -83,13 +75,13 @@ namespace XSwiftBus CSettings CDBusObject::getSettings() const { - if (s_settingsProvider) { return s_settingsProvider->getSettings(); } + if (m_settingsProvider) { return m_settingsProvider->getSettings(); } return CSettings(); } bool CDBusObject::setSettings(const CSettings &s) { - if (s_settingsProvider) { s_settingsProvider->setSettings(s); } + if (m_settingsProvider) { m_settingsProvider->setSettings(s); } return false; } diff --git a/src/xswiftbus/dbusobject.h b/src/xswiftbus/dbusobject.h index 2ed30cd02..7b13c33c0 100644 --- a/src/xswiftbus/dbusobject.h +++ b/src/xswiftbus/dbusobject.h @@ -86,7 +86,7 @@ namespace XSwiftBus //! Set the settings bool setSettings(const CSettings &s); - static CSettingsProvider *s_settingsProvider; //!< get the settings from here, still protected for the static functions + CSettingsProvider *m_settingsProvider; //!< get the settings from here private: static void dbusObjectPathUnregisterFunction(DBusConnection *connection, void *data); diff --git a/src/xswiftbus/traffic.cpp b/src/xswiftbus/traffic.cpp index 7dc4191b8..fb36d118a 100644 --- a/src/xswiftbus/traffic.cpp +++ b/src/xswiftbus/traffic.cpp @@ -49,12 +49,16 @@ namespace XSwiftBus surfaces.lights.timeOffset = static_cast(std::rand() % 0xffff); } + CTraffic *CTraffic::s_instance = nullptr; + // *INDENT-OFF* CTraffic::CTraffic(CSettingsProvider *settingsProvider) : CDBusObject(settingsProvider), m_followPlaneViewNextCommand("org/swift-project/xswiftbus/follow_next_plane", "Changes plane view to follow next plane in sequence", [this] { followNextPlane(); }), m_followPlaneViewPreviousCommand("org/swift-project/xswiftbus/follow_previous_plane", "Changes plane view to follow previous plane in sequence", [this] { followPreviousPlane(); }) { + assert(!s_instance); + s_instance = this; XPLMRegisterDrawCallback(drawCallback, xplm_Phase_Airplanes, 1, this); XPLMRegisterKeySniffer(spaceKeySniffer, 1, this); @@ -67,6 +71,8 @@ namespace XSwiftBus { XPLMUnregisterDrawCallback(drawCallback, xplm_Phase_Airplanes, 1, this); cleanup(); + assert(s_instance == this); + s_instance = nullptr; } static bool s_legacyDataOK = true; @@ -233,9 +239,11 @@ namespace XSwiftBus int CTraffic::preferences(const char *section, const char *name, int def) { + if (!s_instance) { return def; } + if (strcmp(section, "planes") == 0 && strcmp(name, "max_full_count") == 0) { - return CTraffic::s_settingsProvider->getSettings().getMaxPlanes(); // preferences + return s_instance->getSettings().getMaxPlanes(); // preferences } else if (strcmp(section, "debug") == 0 && strcmp(name, "allow_obj8_async_load") == 0) { @@ -248,9 +256,11 @@ namespace XSwiftBus float CTraffic::preferences(const char *section, const char *name, float def) { + if (!s_instance) { return def; } + if (strcmp(section, "planes") == 0 && strcmp(name, "full_distance") == 0) { - return static_cast(CTraffic::s_settingsProvider->getSettings().getMaxDrawDistanceNM()); // preferences + return static_cast(s_instance->getSettings().getMaxDrawDistanceNM()); // preferences } return def; } diff --git a/src/xswiftbus/traffic.h b/src/xswiftbus/traffic.h index db7901ee9..2b7dba7d7 100644 --- a/src/xswiftbus/traffic.h +++ b/src/xswiftbus/traffic.h @@ -159,8 +159,10 @@ namespace XSwiftBus void followPreviousPlane(); bool containsCallsign(const std::string &callsign) const; + static CTraffic *s_instance; static int preferences(const char *section, const char *name, int def); static float preferences(const char *section, const char *name, float def); + static int orbitOwnAircraftFunc(XPLMCameraPosition_t *cameraPosition, int isLosingControl, void *refcon); static int orbitPlaneFunc(XPLMCameraPosition_t *cameraPosition, int isLosingControl, void *refcon); static int drawCallback(XPLMDrawingPhase phase, int isBefore, void *refcon);