diff --git a/src/blackcore/context/contextsimulator.h b/src/blackcore/context/contextsimulator.h index 436121348..c17e3a323 100644 --- a/src/blackcore/context/contextsimulator.h +++ b/src/blackcore/context/contextsimulator.h @@ -17,6 +17,7 @@ #include "blackcore/simulator.h" #include "blackcore/blackcoreexport.h" #include "blackmisc/weather/weathergrid.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmatchersetup.h" #include "blackmisc/simulation/matchingstatistics.h" @@ -148,6 +149,12 @@ namespace BlackCore //! Return list of available simulator plugins virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const = 0; + //! Get the current simulator settings + virtual BlackMisc::Simulation::Settings::CSimulatorSettings getSimulatorSettings() const = 0; + + //! Set settings for give simulator + virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator) = 0; + //! Check all listeners enabled if simulator is connected virtual int checkListeners() = 0; diff --git a/src/blackcore/context/contextsimulatorempty.h b/src/blackcore/context/contextsimulatorempty.h index 572108476..73247d3f0 100644 --- a/src/blackcore/context/contextsimulatorempty.h +++ b/src/blackcore/context/contextsimulatorempty.h @@ -45,6 +45,22 @@ namespace BlackCore return BlackMisc::Simulation::CSimulatorPluginInfoList(); } + //! \copydoc IContextSimulator::getSimulatorSettings + virtual BlackMisc::Simulation::Settings::CSimulatorSettings getSimulatorSettings() const override + { + logEmptyContextWarning(Q_FUNC_INFO); + return BlackMisc::Simulation::Settings::CSimulatorSettings(); + } + + //! \copydoc IContextSimulator::setSimulatorSettings + virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo) override + { + Q_UNUSED(settings); + Q_UNUSED(simulatorInfo); + logEmptyContextWarning(Q_FUNC_INFO); + return false; + } + //! \copydoc IContextSimulator::startSimulatorPlugin virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override { diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 1b47f28e1..44aedb1ee 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -143,6 +143,25 @@ namespace BlackCore return m_plugins->getAvailableSimulatorPlugins(); } + CSimulatorSettings CContextSimulator::getSimulatorSettings() const + { + const CSimulatorPluginInfo p = this->getSimulatorPluginInfo(); + if (!p.isValid()) { return {}; } + const CSimulatorInfo sim = p.getSimulatorInfo(); + if (!sim.isSingleSimulator()) { return {}; } + return m_simulatorSettings.getSettings(sim); + } + + bool CContextSimulator::setSimulatorSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulator) + { + if (!simulator.isSingleSimulator()) { return false; } + CSimulatorSettings simSettings = m_simulatorSettings.getSettings(simulator); + if (simSettings == settings) { return false; } + const CStatusMessage msg = m_simulatorSettings.setSettings(settings, simulator); + CLogMessage::preformatted(msg); + return true; + } + bool CContextSimulator::startSimulatorPlugin(const CSimulatorPluginInfo &simulatorInfo) { return this->listenForSimulator(simulatorInfo); diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index ecb5a830c..444e02645 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -76,6 +76,8 @@ namespace BlackCore //! @{ virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const override; virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override; + virtual BlackMisc::Simulation::Settings::CSimulatorSettings getSimulatorSettings() const override; + virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator) override; virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual int checkListeners() override; diff --git a/src/blackcore/context/contextsimulatorproxy.cpp b/src/blackcore/context/contextsimulatorproxy.cpp index 9dae478df..d6e7e57dd 100644 --- a/src/blackcore/context/contextsimulatorproxy.cpp +++ b/src/blackcore/context/contextsimulatorproxy.cpp @@ -23,6 +23,7 @@ using namespace BlackMisc::Aviation; using namespace BlackMisc::Network; using namespace BlackMisc::Geo; using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::Settings; namespace BlackCore { @@ -46,6 +47,8 @@ namespace BlackCore void CContextSimulatorProxy::relaySignals(const QString &serviceName, QDBusConnection &connection) { + // the types here have to be fully qualifed + bool s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(), "simulatorStatusChanged", this, SIGNAL(simulatorStatusChanged(int))); Q_ASSERT(s); @@ -107,6 +110,16 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("getAvailableSimulatorPlugins")); } + CSimulatorSettings CContextSimulatorProxy::getSimulatorSettings() const + { + return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorSettings")); + } + + bool CContextSimulatorProxy::setSimulatorSettings(const CSimulatorSettings &settings, const CSimulatorInfo &simulatorInfo) + { + return m_dBusInterface->callDBusRet(QLatin1String("setSimulatorSettings"), settings, simulatorInfo); + } + int CContextSimulatorProxy::getSimulatorStatus() const { return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorStatus")); @@ -114,17 +127,17 @@ namespace BlackCore CAirportList CContextSimulatorProxy::getAirportsInRange(bool recalculatePosition) const { - return m_dBusInterface->callDBusRet(QLatin1String("getAirportsInRange"), recalculatePosition); + return m_dBusInterface->callDBusRet(QLatin1String("getAirportsInRange"), recalculatePosition); } CAircraftModelList CContextSimulatorProxy::getModelSet() const { - return m_dBusInterface->callDBusRet(QLatin1String("getModelSet")); + return m_dBusInterface->callDBusRet(QLatin1String("getModelSet")); } CSimulatorInfo CContextSimulatorProxy::simulatorsWithInitializedModelSet() const { - return m_dBusInterface->callDBusRet(QLatin1String("simulatorsWithInitializedModelSet")); + return m_dBusInterface->callDBusRet(QLatin1String("simulatorsWithInitializedModelSet")); } CStatusMessageList CContextSimulatorProxy::verifyPrerequisites() const @@ -134,7 +147,7 @@ namespace BlackCore CSimulatorInfo CContextSimulatorProxy::getModelSetLoaderSimulator() const { - return m_dBusInterface->callDBusRet(QLatin1String("getModelSetLoaderSimulator")); + return m_dBusInterface->callDBusRet(QLatin1String("getModelSetLoaderSimulator")); } void CContextSimulatorProxy::setModelSetLoaderSimulator(const CSimulatorInfo &simulator) @@ -159,7 +172,7 @@ namespace BlackCore CAircraftModelList CContextSimulatorProxy::getModelSetModelsStartingWith(const QString &modelString) const { - return m_dBusInterface->callDBusRet(QLatin1String("getModelSetModelsStartingWith"), modelString); + return m_dBusInterface->callDBusRet(QLatin1String("getModelSetModelsStartingWith"), modelString); } int CContextSimulatorProxy::getModelSetCount() const @@ -167,14 +180,14 @@ namespace BlackCore return m_dBusInterface->callDBusRet(QLatin1String("getModelSetCount")); } - BlackMisc::Simulation::CSimulatorPluginInfo CContextSimulatorProxy::getSimulatorPluginInfo() const + CSimulatorPluginInfo CContextSimulatorProxy::getSimulatorPluginInfo() const { - return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorPluginInfo")); + return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorPluginInfo")); } CSimulatorInternals CContextSimulatorProxy::getSimulatorInternals() const { - return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorInternals")); + return m_dBusInterface->callDBusRet(QLatin1String("getSimulatorInternals")); } void CContextSimulatorProxy::disableModelsForMatching(const CAircraftModelList &removedModels, bool incremental) @@ -184,7 +197,7 @@ namespace BlackCore CAircraftModelList CContextSimulatorProxy::getDisabledModelsForMatching() const { - return m_dBusInterface->callDBusRet(QLatin1String("getDisabledModelsForMatching")); + return m_dBusInterface->callDBusRet(QLatin1String("getDisabledModelsForMatching")); } bool CContextSimulatorProxy::triggerModelSetValidation(const CSimulatorInfo &simulator) diff --git a/src/blackcore/context/contextsimulatorproxy.h b/src/blackcore/context/contextsimulatorproxy.h index e330c7221..d630d8ef5 100644 --- a/src/blackcore/context/contextsimulatorproxy.h +++ b/src/blackcore/context/contextsimulatorproxy.h @@ -59,6 +59,8 @@ namespace BlackCore //! @{ virtual BlackMisc::Simulation::CSimulatorPluginInfo getSimulatorPluginInfo() const override; virtual BlackMisc::Simulation::CSimulatorPluginInfoList getAvailableSimulatorPlugins() const override; + virtual BlackMisc::Simulation::Settings::CSimulatorSettings getSimulatorSettings() const override; + virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo) override; virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override; virtual int checkListeners() override; diff --git a/src/blackmisc/simulation/settings/simulatorsettings.h b/src/blackmisc/simulation/settings/simulatorsettings.h index 7bf3d5f15..027c2b8ca 100644 --- a/src/blackmisc/simulation/settings/simulatorsettings.h +++ b/src/blackmisc/simulation/settings/simulatorsettings.h @@ -39,7 +39,8 @@ namespace BlackMisc { IndexSimulatorDirectory = CPropertyIndex::GlobalIndexCSimulatorSettings, IndexModelDirectories, - IndexModelExcludeDirectoryPatterns + IndexModelExcludeDirectoryPatterns, + IndexComIntegration //!< COM unit integration }; //! Default constructor @@ -84,6 +85,12 @@ namespace BlackMisc //! Having model exclude directoy patterns? bool hasModelExcludeDirectoryPatterns() const { return !this->getModelExcludeDirectoryPatterns().isEmpty(); } + //! COM unit integration + bool isComIntegrated() const { return m_comIntegration; } + + //! COM unit integration + void setComIntegrated(bool integrated) { m_comIntegration = integrated; } + //! Reset the paths void resetPaths(); @@ -103,12 +110,14 @@ namespace BlackMisc QString m_simulatorDirectory; //!< Simulator directory QStringList m_modelDirectories; //!< Model directory QStringList m_excludeDirectoryPatterns; //!< Exclude model directory + bool m_comIntegration = false; //!< COM integration BLACK_METACLASS( CSimulatorSettings, BLACK_METAMEMBER(simulatorDirectory), BLACK_METAMEMBER(modelDirectories), - BLACK_METAMEMBER(excludeDirectoryPatterns) + BLACK_METAMEMBER(excludeDirectoryPatterns), + BLACK_METAMEMBER(comIntegration) ); };