diff --git a/src/blackcore/application/applicationsettings.h b/src/blackcore/application/applicationsettings.h index 50dea1157..1ee96d114 100644 --- a/src/blackcore/application/applicationsettings.h +++ b/src/blackcore/application/applicationsettings.h @@ -12,9 +12,10 @@ #ifndef BLACKCORE_APPLICATION_SETTINGS_H #define BLACKCORE_APPLICATION_SETTINGS_H -#include "blackmisc/settingscache.h" #include "blackconfig/buildconfig.h" +#include "blackmisc/settingscache.h" #include "blackmisc/input/actionhotkeylist.h" +#include "blackmisc/simulation/simulatorplugininfo.h" #include namespace BlackCore @@ -50,36 +51,9 @@ namespace BlackCore static const QStringList &defaultValue() { // All default simulators - static const QStringList enabledSimulators(defaultValueImpl()); + static const QStringList enabledSimulators(BlackMisc::Simulation::CSimulatorPluginInfo::guessDefaultPlugins()); return enabledSimulators; } - - private: - //! Determine default value - static QStringList defaultValueImpl() - { - if (BlackConfig::CBuildConfig::isRunningOnWindows10()) - { - // On WIN10 we have no direct play, so disable FS9 as per default - return QStringList - { - QStringLiteral("org.swift-project.plugins.simulator.fsx"), - QStringLiteral("org.swift-project.plugins.simulator.xplane") - }; - } - else if (BlackConfig::CBuildConfig::isRunningOnUnixPlatform()) - { - // On UNIX we likely run XP - return QStringList { QStringLiteral("org.swift-project.plugins.simulator.xplane") }; - } - - return QStringList - { - QStringLiteral("org.swift-project.plugins.simulator.fs9"), - QStringLiteral("org.swift-project.plugins.simulator.fsx"), - QStringLiteral("org.swift-project.plugins.simulator.xplane") - }; - } }; //! Uploading of crash dumps is enabled or disabled diff --git a/src/blackgui/components/configsimulatorcomponent.cpp b/src/blackgui/components/configsimulatorcomponent.cpp index e2452affb..011e71b2f 100644 --- a/src/blackgui/components/configsimulatorcomponent.cpp +++ b/src/blackgui/components/configsimulatorcomponent.cpp @@ -62,7 +62,7 @@ namespace BlackGui ui->cb_P3D->setChecked(p3d); ui->cb_FSX->setChecked(fsx); ui->cb_FS9->setChecked(fs9); - ui->cb_XP->setChecked(xp); // \fixme some default for XP? + ui->cb_XP->setChecked(xp); ui->cb_P3D->setEnabled(CBuildConfig::isCompiledWithP3DSupport()); ui->cb_FSX->setEnabled(CBuildConfig::isCompiledWithFsxSupport()); @@ -79,11 +79,11 @@ namespace BlackGui { QStringList ids; - // have to match ids from swift-plugin-simulators.xml - if (ui->cb_FS9->isChecked()) { ids << "fs2004"; } - if (ui->cb_FSX->isChecked()) { ids << "fsx"; } - if (ui->cb_P3D->isChecked()) { ids << "p3d"; } - if (ui->cb_XP->isChecked()) { ids << "xplane"; } + // have to match full canonical ids from swift-plugin-simulators.xml + if (ui->cb_FS9->isChecked()) { ids << CSimulatorPluginInfo::fs9PluginIndentifier(); } + if (ui->cb_FSX->isChecked()) { ids << CSimulatorPluginInfo::fsxPluginIndentifier(); } + if (ui->cb_P3D->isChecked()) { ids << CSimulatorPluginInfo::p3dPluginIndentifier(); } + if (ui->cb_XP->isChecked()) { ids << CSimulatorPluginInfo::xplanePluginIndentifier(); } return ids; } diff --git a/src/blackmisc/simulation/simulatorinfo.cpp b/src/blackmisc/simulation/simulatorinfo.cpp index eab5a439c..a3bea3b19 100644 --- a/src/blackmisc/simulation/simulatorinfo.cpp +++ b/src/blackmisc/simulation/simulatorinfo.cpp @@ -8,10 +8,11 @@ */ #include "blackconfig/buildconfig.h" -#include "blackmisc/comparefunctions.h" #include "blackmisc/db/datastoreutility.h" +#include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/fscommon/fscommonutil.h" #include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/comparefunctions.h" #include #include #include @@ -136,7 +137,7 @@ namespace BlackMisc QString CSimulatorInfo::convertToQString(bool i18n) const { Q_UNUSED(i18n); - Simulator s = getSimulator(); + const Simulator s = getSimulator(); QString str; if (s.testFlag(FSX)) { str.append("FSX "); } if (s.testFlag(FS9)) { str.append("FS9 "); } @@ -161,6 +162,18 @@ namespace BlackMisc return set; } + const QString &CSimulatorInfo::toPluginIdentifier() const + { + static const QString e; + if (!this->isSingleSimulator()) { return e; } + const Simulator s = getSimulator(); + if (s.testFlag(FSX)) { return CSimulatorPluginInfo::fsxPluginIndentifier(); } + if (s.testFlag(FS9)) { return CSimulatorPluginInfo::fs9PluginIndentifier(); } + if (s.testFlag(P3D)) { return CSimulatorPluginInfo::p3dPluginIndentifier(); } + if (s.testFlag(XPLANE)) { return CSimulatorPluginInfo::xplanePluginIndentifier(); } + return e; + } + CSimulatorInfo::Simulator CSimulatorInfo::boolToFlag(bool fsx, bool fs9, bool xp, bool p3d) { Simulator s = fsx ? FSX : None; @@ -188,7 +201,7 @@ namespace BlackMisc { s |= XPLANE; } - if (i.contains("3d") || i.contains("prepare") || i.contains("martin") || i.contains("lm") || i.contains("lock")) + if (i.contains("3d") || i.contains("prepar") || i.contains("martin") || i.contains("lm") || i.contains("lock")) { s |= P3D; } @@ -260,7 +273,6 @@ namespace BlackMisc return sim; } - 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 0c7a70e0d..d8b2d0157 100644 --- a/src/blackmisc/simulation/simulatorinfo.h +++ b/src/blackmisc/simulation/simulatorinfo.h @@ -150,6 +150,9 @@ namespace BlackMisc //! As a set of single simulator info objects QSet asSingleSimulatorSet() const; + //! To plugin indentifier, empty string if not single simulator + const QString &toPluginIdentifier() const; + //! Bool flags to enum static Simulator boolToFlag(bool fsx, bool fs9, bool xp, bool p3d); diff --git a/src/blackmisc/simulation/simulatorplugininfo.cpp b/src/blackmisc/simulation/simulatorplugininfo.cpp index 916ba295b..0c4e6c313 100644 --- a/src/blackmisc/simulation/simulatorplugininfo.cpp +++ b/src/blackmisc/simulation/simulatorplugininfo.cpp @@ -7,6 +7,7 @@ * contained in the LICENSE file. */ +#include "blackconfig/buildconfig.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include #include @@ -49,5 +50,44 @@ namespace BlackMisc return QString("%1 (%2)").arg(m_name, m_identifier); } + const QString &CSimulatorPluginInfo::fsxPluginIndentifier() + { + static const QString s("org.swift-project.plugins.simulator.fsx"); + return s; + } + + const QString &CSimulatorPluginInfo::p3dPluginIndentifier() + { + static const QString s("org.swift-project.plugins.simulator.p3d"); + return s; + } + + const QString &CSimulatorPluginInfo::fs9PluginIndentifier() + { + static const QString s("org.swift-project.plugins.simulator.fs9"); + return s; + } + + const QString &CSimulatorPluginInfo::xplanePluginIndentifier() + { + static const QString s("org.swift-project.plugins.simulator.xplane"); + return s; + } + + QStringList CSimulatorPluginInfo::guessDefaultPlugins() + { + if (BlackConfig::CBuildConfig::isRunningOnUnixPlatform()) + { + // On UNIX we likely run XP + return QStringList { xplanePluginIndentifier() }; + } + + return QStringList + { + fsxPluginIndentifier(), + p3dPluginIndentifier(), + xplanePluginIndentifier() + }; + } } // ns } // ns diff --git a/src/blackmisc/simulation/simulatorplugininfo.h b/src/blackmisc/simulation/simulatorplugininfo.h index c3d81f8ac..0f0397657 100644 --- a/src/blackmisc/simulation/simulatorplugininfo.h +++ b/src/blackmisc/simulation/simulatorplugininfo.h @@ -64,6 +64,21 @@ namespace BlackMisc //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const; + //! Plugin identifier (FSX) + static const QString &fsxPluginIndentifier(); + + //! Plugin identifier (P3D) + static const QString &p3dPluginIndentifier(); + + //! Plugin identifier (FS9) + static const QString &fs9PluginIndentifier(); + + //! Plugin identifier (XPlane) + static const QString &xplanePluginIndentifier(); + + //! Guess default plugins + static QStringList guessDefaultPlugins(); + private: QString m_identifier; QString m_name;