From 8278a7d5e6c6c996cca9f7229e2a6f7e65ee94ed Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 16 Apr 2020 02:56:24 +0200 Subject: [PATCH] [P3D] Adjustments for P3D v5 * guess version * added new version selection --- .../components/settingssimulatorcomponent.cpp | 1 + .../components/settingssimulatorcomponent.ui | 64 ++++++++++++++++--- .../simulation/fscommon/fscommonutil.cpp | 14 +++- .../simulation/fscommon/fscommonutil.h | 5 +- .../simulation/settings/simulatorsettings.cpp | 13 ++-- .../simulation/settings/simulatorsettings.h | 2 +- .../fsxcommon/simconnectsettingscomponent.cpp | 14 ++-- .../fsxcommon/simconnectsettingscomponent.ui | 24 ++++++- .../simulator/fsxcommon/simconnectsymbols.cpp | 5 ++ src/plugins/simulator/p3d/simulatorp3d.cpp | 10 +-- src/plugins/simulator/p3d/simulatorp3d.h | 6 +- src/swiftlauncher/swiftlauncher.cpp | 3 +- 12 files changed, 127 insertions(+), 34 deletions(-) diff --git a/src/blackgui/components/settingssimulatorcomponent.cpp b/src/blackgui/components/settingssimulatorcomponent.cpp index 609417db2..60ec9d590 100644 --- a/src/blackgui/components/settingssimulatorcomponent.cpp +++ b/src/blackgui/components/settingssimulatorcomponent.cpp @@ -148,6 +148,7 @@ namespace BlackGui ui->pb_DisableRendering->setEnabled(m_pluginLoaded); ui->pb_Check->setEnabled(!m_pluginLoaded); ui->pb_ApplyCGSource->setEnabled(m_pluginLoaded); + ui->pb_Reload->setEnabled(m_pluginLoaded); if (m_pluginLoaded) { diff --git a/src/blackgui/components/settingssimulatorcomponent.ui b/src/blackgui/components/settingssimulatorcomponent.ui index cd7f368cc..240715691 100644 --- a/src/blackgui/components/settingssimulatorcomponent.ui +++ b/src/blackgui/components/settingssimulatorcomponent.ui @@ -65,15 +65,7 @@ true - - - 0 - 0 - 427 - 328 - - - + 4 @@ -102,6 +94,12 @@ + + + 125 + 0 + + apply @@ -109,6 +107,12 @@ + + + 125 + 0 + + apply @@ -192,6 +196,12 @@ + + + 125 + 0 + + apply @@ -199,6 +209,12 @@ + + + 125 + 0 + + clear @@ -213,6 +229,12 @@ + + + 125 + 0 + + apply @@ -220,6 +242,12 @@ + + + 125 + 0 + + disable all rendering @@ -264,6 +292,12 @@ + + + 125 + 0 + + apply @@ -391,6 +425,12 @@ + + + 125 + 0 + + apply @@ -408,6 +448,12 @@ + + + 125 + 0 + + reload diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.cpp b/src/blackmisc/simulation/fscommon/fscommonutil.cpp index 6c9ccc2bb..2bf3755f9 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.cpp +++ b/src/blackmisc/simulation/fscommon/fscommonutil.cpp @@ -243,7 +243,7 @@ namespace BlackMisc { // finding the user settings only works on P3D machine QStringList allPaths = CFsCommonUtil::allP3dAddOnXmlSimObjectPaths(versionHint).values(); - const QString sod = CFileUtils::normalizeFilePathToQtStandard(simObjectsDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : simObjectsDir); + const QString sod = CFileUtils::normalizeFilePathToQtStandard(simObjectsDir.isEmpty() ? CFsCommonUtil::p3dSimObjectsDir() : simObjectsDir); if (!sod.isEmpty() && !allPaths.contains(sod, Qt::CaseInsensitive)) { // case insensitive is important here @@ -256,6 +256,18 @@ namespace BlackMisc return allPaths; } + QString CFsCommonUtil::guessP3DVersion(const QString &candidate) + { + if (candidate.isEmpty()) { return "v4"; } + 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"); } + + return "v5"; // that is the future (in 2020) + } + QString CFsCommonUtil::p3dSimObjectsDirFromSimDir(const QString &simDir) { if (simDir.isEmpty()) { return {}; } diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.h b/src/blackmisc/simulation/fscommon/fscommonutil.h index 89466d685..b0aba64e3 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.h +++ b/src/blackmisc/simulation/fscommon/fscommonutil.h @@ -57,7 +57,10 @@ namespace BlackMisc static QStringList fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir = ""); //! P3D's simObject dir and the add on dirs - static QStringList p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir = "", const QString &versionHint = "v4"); + static QStringList p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(const QString &simObjectsDir, const QString &versionHint); + + //! Guess the P3D version such as v4, v5 + static QString guessP3DVersion(const QString &candidate); //! P3D directory obtained from registry static const QString &p3dDirFromRegistry(); diff --git a/src/blackmisc/simulation/settings/simulatorsettings.cpp b/src/blackmisc/simulation/settings/simulatorsettings.cpp index ef9f992e6..0e20aa9c5 100644 --- a/src/blackmisc/simulation/settings/simulatorsettings.cpp +++ b/src/blackmisc/simulation/settings/simulatorsettings.cpp @@ -588,12 +588,15 @@ namespace BlackMisc switch (m_simulator.getSimulator()) { case CSimulatorInfo::FG: dirs = QStringList(CFlightgearUtil::modelDirectoriesFromSimDir(s)); break; - case CSimulatorInfo::FS9: dirs = QStringList({CFsCommonUtil::fs9AircraftDirFromSimDir(s)}); break; + case CSimulatorInfo::FS9: dirs = QStringList({ CFsCommonUtil::fs9AircraftDirFromSimDir(s) }); break; case CSimulatorInfo::FSX: dirs = CFsCommonUtil::fsxSimObjectsDirPlusAddOnXmlSimObjectsPaths(CFsCommonUtil::fsxSimObjectsDirFromSimDir(s)); break; case CSimulatorInfo::P3D: - dirs = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(CFsCommonUtil::p3dSimObjectsDirFromSimDir(s)); + { + const QString versionHint = CFsCommonUtil::guessP3DVersion(s); + dirs = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(CFsCommonUtil::p3dSimObjectsDirFromSimDir(s), versionHint); + } break; case CSimulatorInfo::XPLANE: dirs = QStringList({CXPlaneUtil::modelDirectoriesFromSimDir(s)}); break; default: break; @@ -678,8 +681,10 @@ namespace BlackMisc } case CSimulatorInfo::P3D: { - if (CFsCommonUtil::p3dSimObjectsDir().isEmpty()) { return e; } - static const QStringList md = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(); + 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; } case CSimulatorInfo::XPLANE: diff --git a/src/blackmisc/simulation/settings/simulatorsettings.h b/src/blackmisc/simulation/settings/simulatorsettings.h index 6291a3cb2..c9fb3295a 100644 --- a/src/blackmisc/simulation/settings/simulatorsettings.h +++ b/src/blackmisc/simulation/settings/simulatorsettings.h @@ -279,7 +279,7 @@ namespace BlackMisc protected: CSimulatorSettings m_genericSettings; //!< the generic settings - CSimulatorInfo m_simulator; //!< represented simulator + CSimulatorInfo m_simulator; //!< represented simulator }; //! XPlane specific settings diff --git a/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.cpp b/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.cpp index 3bb5015be..6ab679d8e 100644 --- a/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.cpp @@ -39,13 +39,13 @@ namespace BlackSimPlugin { ui->setupUi(this); - connect(ui->pb_OpenSwiftSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::openSwiftSimConnectCfgFile); + connect(ui->pb_OpenSwiftSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::openSwiftSimConnectCfgFile); connect(ui->pb_DeleteSwiftSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::deleteSwiftSimConnectCfgFile); - connect(ui->pb_ExistsSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::checkSwiftSimConnectCfgFile); - connect(ui->pb_SaveSwiftSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::saveSimConnectCfgFile); - connect(ui->pb_OpenUserCfgFile, &QPushButton::clicked, this, &CSimConnectSettingsComponent::openUserSimConnectCfgFile); - connect(ui->pb_TestConnection, &QPushButton::clicked, this, &CSimConnectSettingsComponent::testSwiftSimConnectConnection); - connect(ui->pb_SaveAsSimConnectIni, &QPushButton::clicked, this, &CSimConnectSettingsComponent::saveSimConnectIniFileDialog); + connect(ui->pb_ExistsSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::checkSwiftSimConnectCfgFile); + connect(ui->pb_SaveSwiftSimConnectCfg, &QPushButton::clicked, this, &CSimConnectSettingsComponent::saveSimConnectCfgFile); + connect(ui->pb_OpenUserCfgFile, &QPushButton::clicked, this, &CSimConnectSettingsComponent::openUserSimConnectCfgFile); + connect(ui->pb_TestConnection, &QPushButton::clicked, this, &CSimConnectSettingsComponent::testSwiftSimConnectConnection); + connect(ui->pb_SaveAsSimConnectIni, &QPushButton::clicked, this, &CSimConnectSettingsComponent::saveSimConnectIniFileDialog); this->setSimConnectInfo(); if (m_p3d64bit) @@ -252,7 +252,7 @@ namespace BlackSimPlugin ui->cb_P3DVersion->setCurrentText(found ? v : ""); } - void BlackSimPlugin::FsxCommon::CSimConnectSettingsComponent::onP3DVersionChanged(const QString &version) + void CSimConnectSettingsComponent::onP3DVersionChanged(const QString &version) { if (m_p3dVersion.get() == version) { return; } const CStatusMessage saveMsg = m_p3dVersion.setAndSave(version); diff --git a/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.ui b/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.ui index 254d8ae7d..589a2525a 100644 --- a/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.ui +++ b/src/plugins/simulator/fsxcommon/simconnectsettingscomponent.ui @@ -7,7 +7,7 @@ 0 0 410 - 466 + 481 @@ -156,11 +156,31 @@ console=1 - 4.5 64bit + 6.0 64bit 0 + + + 6.0 64bit + + + + + 5.2 64bit + + + + + 5.1 64bit + + + + + 5.0 64bit + + 4.5 64bit diff --git a/src/plugins/simulator/fsxcommon/simconnectsymbols.cpp b/src/plugins/simulator/fsxcommon/simconnectsymbols.cpp index 1065515e7..fd8dc80c5 100644 --- a/src/plugins/simulator/fsxcommon/simconnectsymbols.cpp +++ b/src/plugins/simulator/fsxcommon/simconnectsymbols.cpp @@ -191,6 +191,11 @@ P3DSimConnectVersion stringToP3DVersion(const QString &p3d) if (p.contains("43")) { return P3DSimConnectv43; } if (p.contains("44")) { return P3DSimConnectv44; } if (p.contains("45")) { return P3DSimConnectv45; } + + if (p.contains("50")) { return P3DSimConnectv45; } + if (p.contains("51")) { return P3DSimConnectv45; } + if (p.contains("52")) { return P3DSimConnectv45; } + } return P3DSimConnectv44; // default } diff --git a/src/plugins/simulator/p3d/simulatorp3d.cpp b/src/plugins/simulator/p3d/simulatorp3d.cpp index cbbdd30ff..61027ab1b 100644 --- a/src/plugins/simulator/p3d/simulatorp3d.cpp +++ b/src/plugins/simulator/p3d/simulatorp3d.cpp @@ -31,10 +31,10 @@ namespace BlackSimPlugin namespace P3D { CSimulatorP3D::CSimulatorP3D(const CSimulatorPluginInfo &info, - IOwnAircraftProvider *ownAircraftProvider, + IOwnAircraftProvider *ownAircraftProvider, IRemoteAircraftProvider *remoteAircraftProvider, - IWeatherGridProvider *weatherGridProvider, - IClientProvider *clientProvider, + IWeatherGridProvider *weatherGridProvider, + IClientProvider *clientProvider, QObject *parent) : CSimulatorFsxCommon(info, ownAircraftProvider, remoteAircraftProvider, weatherGridProvider, clientProvider, parent) { @@ -104,9 +104,9 @@ namespace BlackSimPlugin // P3D version with new P3D simconnect functions bool CSimulatorP3D::requestElevation(const ICoordinateGeodetic &reference, const CCallsign &callsign) { - if (reference.isNull()) { return false; } + if (reference.isNull()) { return false; } if (this->isShuttingDown()) { return false; } - if (!this->isConnected()) { return false; } + if (!this->isConnected()) { return false; } Q_ASSERT_X(CThreadUtils::isCurrentThreadObjectThread(this), Q_FUNC_INFO, "thread"); const bool hasHeight = reference.hasMSLGeodeticHeight(); diff --git a/src/plugins/simulator/p3d/simulatorp3d.h b/src/plugins/simulator/p3d/simulatorp3d.h index 6192ecde7..28c098762 100644 --- a/src/plugins/simulator/p3d/simulatorp3d.h +++ b/src/plugins/simulator/p3d/simulatorp3d.h @@ -37,10 +37,10 @@ namespace BlackSimPlugin public: //! Constructor, parameters as in \sa BlackCore::ISimulatorFactory::create CSimulatorP3D(const BlackMisc::Simulation::CSimulatorPluginInfo &info, - BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, + BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider, - BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider, - BlackMisc::Network::IClientProvider *clientProvider, + BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider, + BlackMisc::Network::IClientProvider *clientProvider, QObject *parent = nullptr); //! \name ISimulator implementations diff --git a/src/swiftlauncher/swiftlauncher.cpp b/src/swiftlauncher/swiftlauncher.cpp index 627131b77..04aee4870 100644 --- a/src/swiftlauncher/swiftlauncher.cpp +++ b/src/swiftlauncher/swiftlauncher.cpp @@ -664,9 +664,10 @@ void CSwiftLauncher::showSimulatorConfigDirs() if (s == ui->pb_P3DConfigDirs) { - dirs = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(); simDir = CFsCommonUtil::p3dDir(); simObjDir = CFsCommonUtil::p3dSimObjectsDir(); + const QString versionHint = CFsCommonUtil::guessP3DVersion(simDir); + dirs = CFsCommonUtil::p3dSimObjectsDirPlusAddOnXmlSimObjectsPaths(simObjDir, versionHint); } else if (s == ui->pb_FSXConfigDirs) {