From bc926e592e598285ad627232647c1e51458af8ff Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 29 May 2016 12:20:45 +0200 Subject: [PATCH] refs #649, allow to guess used simulator (for default values) --- src/blackmisc/simulation/data/modelcaches.h | 14 ++++++ src/blackmisc/simulation/simulatorinfo.cpp | 50 ++++++++++++++------- src/blackmisc/simulation/simulatorinfo.h | 3 ++ 3 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/blackmisc/simulation/data/modelcaches.h b/src/blackmisc/simulation/data/modelcaches.h index fd617d98a..04d7cd949 100644 --- a/src/blackmisc/simulation/data/modelcaches.h +++ b/src/blackmisc/simulation/data/modelcaches.h @@ -75,6 +75,13 @@ namespace BlackMisc //! Last selection struct ModelCacheLastSelection : public BlackMisc::CDataTrait { + //! Default value + static const BlackMisc::Simulation::CSimulatorInfo &defaultValue() + { + static const BlackMisc::Simulation::CSimulatorInfo s(BlackMisc::Simulation::CSimulatorInfo::guessDefaultSimulator()); + return s; + } + //! First load is synchronous static constexpr bool isPinned() { return true; } @@ -117,6 +124,13 @@ namespace BlackMisc //! Last selection struct ModelSetLastSelection : public BlackMisc::CDataTrait { + //! Default value + static const BlackMisc::Simulation::CSimulatorInfo &defaultValue() + { + static const BlackMisc::Simulation::CSimulatorInfo s(BlackMisc::Simulation::CSimulatorInfo::guessDefaultSimulator()); + return s; + } + //! First load is synchronous static constexpr bool isPinned() { return true; } diff --git a/src/blackmisc/simulation/simulatorinfo.cpp b/src/blackmisc/simulation/simulatorinfo.cpp index a7c5cd949..f92cb50ea 100644 --- a/src/blackmisc/simulation/simulatorinfo.cpp +++ b/src/blackmisc/simulation/simulatorinfo.cpp @@ -189,26 +189,46 @@ namespace BlackMisc { //! \todo add XP, ... CSimulatorInfo sim; - bool fs9 = - CBuildConfig::isRunningOnWindowsNtPlatform() && - !CFsCommonUtil::fs9AircraftDir().isEmpty() && - !CFsCommonUtil::fs9Dir().isEmpty(); - bool fsx = - CBuildConfig::isRunningOnWindowsNtPlatform() && - !CFsCommonUtil::fsxSimObjectsDir().isEmpty() && - !CFsCommonUtil::fsxDir().isEmpty(); - bool p3d = - CBuildConfig::isRunningOnWindowsNtPlatform() && - !CFsCommonUtil::p3dDir().isEmpty() && - !CFsCommonUtil::p3dSimObjectsDir().isEmpty(); + bool fs9 = false; + bool fsx = false; + bool p3d = false; + + if (CBuildConfig::isRunningOnWindowsNtPlatform()) + { + fs9 = + CBuildConfig::isRunningOnWindowsNtPlatform() && + !CFsCommonUtil::fs9AircraftDir().isEmpty() && + !CFsCommonUtil::fs9Dir().isEmpty(); + fsx = + CBuildConfig::isRunningOnWindowsNtPlatform() && + !CFsCommonUtil::fsxSimObjectsDir().isEmpty() && + !CFsCommonUtil::fsxDir().isEmpty(); + p3d = + CBuildConfig::isRunningOnWindowsNtPlatform() && + !CFsCommonUtil::p3dDir().isEmpty() && + !CFsCommonUtil::p3dSimObjectsDir().isEmpty(); + } bool xp = true; //! \todo XP resolution - sim.setSimulator( - CSimulatorInfo::boolToFlag(fsx, fs9, xp, p3d) - ); + sim.setSimulator(CSimulatorInfo::boolToFlag(fsx, fs9, xp, p3d)); return sim; } + const CSimulatorInfo CSimulatorInfo::guessDefaultSimulator() + { + CSimulatorInfo locallyInstalled(getLocallyInstalledSimulators()); + if (CBuildConfig::isRunningOnLinuxPlatform()) + { + return CSimulatorInfo("XPLANE"); + } + if (locallyInstalled.p3d()) { return CSimulatorInfo("P3D"); } + if (locallyInstalled.fsx()) { return CSimulatorInfo("FSX"); } + if (locallyInstalled.fs9()) { return CSimulatorInfo("FS9"); } + + // fallback + return CSimulatorInfo("FSX"); + } + CSimulatorInfo CSimulatorInfo::fromDatabaseJson(const QJsonObject &json, const QString prefix) { const bool fsx = CDatastoreUtility::dbBoolStringToBool(json.value(prefix + "simfsx").toString()); diff --git a/src/blackmisc/simulation/simulatorinfo.h b/src/blackmisc/simulation/simulatorinfo.h index 6dab4778c..3d080c2f5 100644 --- a/src/blackmisc/simulation/simulatorinfo.h +++ b/src/blackmisc/simulation/simulatorinfo.h @@ -155,6 +155,9 @@ namespace BlackMisc //! Locally installed simulators static const CSimulatorInfo getLocallyInstalledSimulators(); + //! Guess a default simulator + static const CSimulatorInfo guessDefaultSimulator(); + //! From database JSON static CSimulatorInfo fromDatabaseJson(const QJsonObject &json, const QString prefix);