diff --git a/samples/blackmiscsim/samplesp3d.cpp b/samples/blackmiscsim/samplesp3d.cpp index 0d6f30cbf..9ec2f1f92 100644 --- a/samples/blackmiscsim/samplesp3d.cpp +++ b/samples/blackmiscsim/samplesp3d.cpp @@ -20,7 +20,9 @@ namespace BlackSample { void CSamplesP3D::samplesMisc(QTextStream &streamOut) { - const QSet configFiles = CFsCommonUtil::findP3dAddOnConfigFiles("v4"); + QSet configFiles = CFsCommonUtil::findP3dAddOnConfigFiles("v5"); + if (configFiles.isEmpty()) { configFiles = CFsCommonUtil::findP3dAddOnConfigFiles("v4"); } + streamOut << BlackMisc::joinStringSet(configFiles, ", ") << Qt::endl; const QSet addOnPaths = CFsCommonUtil::allConfigFilesPathValues(configFiles.values(), false, {}); diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.cpp b/src/blackmisc/simulation/fscommon/fscommonutil.cpp index 44517a944..bd56ed11d 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.cpp +++ b/src/blackmisc/simulation/fscommon/fscommonutil.cpp @@ -149,6 +149,9 @@ namespace BlackMisc QString p3dPath; FsRegistryPathPair p3dRegistryPathPairs = { + // latest versions first + { QStringLiteral("HKEY_CURRENT_USER\\Software\\Lockheed Martin\\Prepar3d v6"), QStringLiteral("AppPath") }, + { QStringLiteral("HKEY_CURRENT_USER\\Software\\Lockheed Martin\\Prepar3d v5"), QStringLiteral("AppPath") }, { QStringLiteral("HKEY_CURRENT_USER\\Software\\Lockheed Martin\\Prepar3d v4"), QStringLiteral("AppPath") }, { QStringLiteral("HKEY_CURRENT_USER\\Software\\Lockheed Martin\\Prepar3d v3"), QStringLiteral("AppPath") }, { QStringLiteral("HKEY_CURRENT_USER\\Software\\Lockheed Martin\\Prepar3d v2"), QStringLiteral("AppPath") }, @@ -258,12 +261,12 @@ namespace BlackMisc QString CFsCommonUtil::guessP3DVersion(const QString &candidate) { - if (candidate.isEmpty()) { return "v4"; } + if (candidate.isEmpty()) { return "v5"; } if (candidate.contains("v5", Qt::CaseInsensitive)) { return QStringLiteral("v5"); } if (candidate.contains("v4", Qt::CaseInsensitive)) { return QStringLiteral("v4"); } - if (candidate.contains("5", Qt::CaseInsensitive)) { return QStringLiteral("v5"); } - if (candidate.contains("4", Qt::CaseInsensitive)) { return QStringLiteral("v4"); } + if (candidate.contains("5", Qt::CaseInsensitive)) { return QStringLiteral("v5"); } + if (candidate.contains("4", Qt::CaseInsensitive)) { return QStringLiteral("v4"); } return "v5"; // that is the future (in 2020) } @@ -718,7 +721,7 @@ namespace BlackMisc CStatusMessageList CFsCommonUtil::validateP3DSimObjectsPath(const CAircraftModelList &models, CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, std::atomic_bool &wasStopped, const QString &simulatorDir) { const QString simObjectsDir = simulatorDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : CFsCommonUtil::p3dSimObjectsDirFromSimDir(simulatorDir); - const QStringList simObjectPaths = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(simObjectsDir, "v4"); + const QStringList simObjectPaths = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(simObjectsDir, guessP3DVersion(simObjectsDir)); return CFsCommonUtil::validateSimObjectsPath(QSet(simObjectPaths.begin(), simObjectPaths.end()), models, validModels, invalidModels, ignoreEmptyFileNames, stopAtFailedFiles, wasStopped); } @@ -737,7 +740,7 @@ namespace BlackMisc CStatusMessageList CFsCommonUtil::validateSimObjectsPath( const QSet &simObjectDirs, const CAircraftModelList &models, - CAircraftModelList &validModels, CAircraftModelList &invalidModels, + CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool ignoreEmptyFileNames, int stopAtFailedFiles, std::atomic_bool &stopped) { CStatusMessageList msgs; diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.h b/src/blackmisc/simulation/fscommon/fscommonutil.h index b0aba64e3..eaade2eca 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.h +++ b/src/blackmisc/simulation/fscommon/fscommonutil.h @@ -109,13 +109,13 @@ namespace BlackMisc //! Find the config files (add-ons.cfg) //! \note "C:/Users/Joe Doe/AppData/Roaming/Lockheed Martin/Prepar3D v4" - //! \param versionHint like "v4" - static QSet findP3dAddOnConfigFiles(const QString &versionHint = "v4"); + //! \param versionHint like "v5" + static QSet findP3dAddOnConfigFiles(const QString &versionHint = "v5"); //! Find the config files (simobjects.cfg) //! \note "C:/Users/Joe Doe/AppData/Roaming/Lockheed Martin/Prepar3D v4" - //! \param versionHint like "v4" - static QSet findP3dSimObjectsConfigFiles(const QString &versionHint = "v4"); + //! \param versionHint like "v5" + static QSet findP3dSimObjectsConfigFiles(const QString &versionHint = "v5"); //! All PATH values from the config files static QSet allConfigFilesPathValues(const QStringList &configFiles, bool checked, const QString &pathPrefix); @@ -158,7 +158,7 @@ namespace BlackMisc private: //! Utility functions @{ - static QSet findP3dConfigFiles(const QString &configFile, const QString &versionHint = "v4"); + static QSet findP3dConfigFiles(const QString &configFile, const QString &versionHint = "v5"); //! @} //! Validate if known SimObjects path are used diff --git a/src/blackmisc/simulation/settings/simulatorsettings.cpp b/src/blackmisc/simulation/settings/simulatorsettings.cpp index 0e20aa9c5..2c0b2097e 100644 --- a/src/blackmisc/simulation/settings/simulatorsettings.cpp +++ b/src/blackmisc/simulation/settings/simulatorsettings.cpp @@ -671,21 +671,21 @@ namespace BlackMisc { if (CFsCommonUtil::fs9AircraftDir().isEmpty()) { return e; } static const QStringList md({ CFsCommonUtil::fs9AircraftDir() }); - return md; + return md; } case CSimulatorInfo::FSX: { if (CFsCommonUtil::fsxSimObjectsDir().isEmpty()) { return e; } static const QStringList md = CFsCommonUtil::fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths(); - return md; + return md; } case CSimulatorInfo::P3D: { static const QString p3d = CFsCommonUtil::p3dSimObjectsDir(); if (p3d.isEmpty()) { return e; } static const QString versionHint = CFsCommonUtil::guessP3DVersion(p3d); - static const QStringList md = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(p3d, versionHint); - return md; + static const QStringList md = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(p3d, versionHint); + return md; } case CSimulatorInfo::XPLANE: { @@ -704,10 +704,10 @@ namespace BlackMisc static const QString empty; switch (simulator.getSimulator()) { - case CSimulatorInfo::FG: return CFlightgearUtil::flightgearRootDir(); - case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir(); - case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir(); - case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir(); + case CSimulatorInfo::FG: return CFlightgearUtil::flightgearRootDir(); + case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir(); + case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir(); + case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir(); case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneRootDir(); default: Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); @@ -722,10 +722,10 @@ namespace BlackMisc static const QStringList empty; switch (simulator.getSimulator()) { - case CSimulatorInfo::FG: return CFlightgearUtil::flightgearModelExcludeDirectoryPatterns(); - case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns(); - case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns(); - case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::FG: return CFlightgearUtil::flightgearModelExcludeDirectoryPatterns(); + case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns(); case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneModelExcludeDirectoryPatterns(); default: Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); @@ -781,7 +781,8 @@ namespace BlackMisc bool TSimulatorXP::isValid(const CSimulatorSettings &value, QString &reason) { - const QString simDir = value.hasSimulatorDirectory() ? value.getSimulatorDirectory() + const QString simDir = value.hasSimulatorDirectory() + ? value.getSimulatorDirectory() : CSpecializedSimulatorSettings::defaultSimulatorDirectory(CSimulatorInfo::XPLANE); const CStatusMessageList msgs = CXPlaneUtil::validateModelDirectories(simDir, value.getModelDirectories()); if (msgs.isSuccess()) { return true; }