diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.cpp b/src/blackmisc/simulation/fscommon/fscommonutil.cpp index 1e7c3f731..66515b885 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.cpp +++ b/src/blackmisc/simulation/fscommon/fscommonutil.cpp @@ -205,6 +205,12 @@ namespace BlackMisc return dir; } + QString CFsCommonUtil::p3dSimObjectsDirFromSimDir(const QString &simDir) + { + if (simDir.isEmpty()) { return QStringLiteral(""); } + return CFileUtils::appendFilePaths(simDir, "SimObjects"); + } + const QStringList &CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns() { static const QStringList exclude diff --git a/src/blackmisc/simulation/fscommon/fscommonutil.h b/src/blackmisc/simulation/fscommon/fscommonutil.h index f37ca2517..c7b32ea1e 100644 --- a/src/blackmisc/simulation/fscommon/fscommonutil.h +++ b/src/blackmisc/simulation/fscommon/fscommonutil.h @@ -61,6 +61,9 @@ namespace BlackMisc //! P3D's sim object dir, resolved from multiple sources static const QString &p3dSimObjectsDir(); + //! P3D aircraft dir, relative to simulator directory + static QString p3dSimObjectsDirFromSimDir(const QString &simDir); + //! Exclude directories for simObjects static const QStringList &p3dSimObjectsExcludeDirectoryPatterns(); diff --git a/src/blackmisc/simulation/xplane/xplaneutil.cpp b/src/blackmisc/simulation/xplane/xplaneutil.cpp index 2b6236e80..3d4288803 100644 --- a/src/blackmisc/simulation/xplane/xplaneutil.cpp +++ b/src/blackmisc/simulation/xplane/xplaneutil.cpp @@ -101,25 +101,38 @@ namespace BlackMisc #endif } - QString CXPlaneUtil::xplaneRootDir() + const QString &CXPlaneUtil::xplaneRootDir() { - if (!xplane11Dir().isEmpty()) { return xplane11Dir(); } - else if (!xplane10Dir().isEmpty()) { return xplane10Dir(); } - else if (!xplane9Dir().isEmpty()) { return xplane9Dir(); } - else { return {}; } + static const QString dir = [] + { + if (!xplane11Dir().isEmpty()) { return xplane11Dir(); } + else if (!xplane10Dir().isEmpty()) { return xplane10Dir(); } + else if (!xplane9Dir().isEmpty()) { return xplane9Dir(); } + else { return QString(); } + }(); + return dir; } bool CXPlaneUtil::isXplaneRootDirExisting() { - const QDir dir(xplaneRootDir()); - return dir.exists(); + static const bool exists = QDir(xplaneRootDir()).exists(); + return exists; } - QString CXPlaneUtil::xplanePluginDir() + const QString &CXPlaneUtil::xplanePluginDir() { - const QString xp = xplaneRootDir(); - if (xp.isEmpty()) { return xp; } - return CFileUtils::appendFilePaths(xp, xplanePluginPath()); + static const QString pd(xplaneRootDir().isEmpty() ? "" : CFileUtils::appendFilePaths(xplaneRootDir(), xplanePluginPath())); + return pd; + } + + QString CXPlaneUtil::pluginDirFromSimDir(const QString &simulatorDir) + { + return CFileUtils::appendFilePaths(simulatorDir, xplanePluginPath()); + } + + QStringList CXPlaneUtil::modelDirectoriesFromSimDir(const QString &simulatorDir) + { + return QStringList({ simulatorDir }); } QString CXPlaneUtil::xplanePluginPath() @@ -130,19 +143,20 @@ namespace BlackMisc bool CXPlaneUtil::isXplanePluginDirDirExisting() { - const QDir dir(xplanePluginDir()); - return dir.exists(); + static const bool exists = QDir(xplanePluginDir()).exists(); + return exists; } - QStringList CXPlaneUtil::xplaneModelDirectories() + const QStringList &CXPlaneUtil::xplaneModelDirectories() { - if (xplaneRootDir().isEmpty()) { return QStringList(); } - return QStringList({ xplaneRootDir() }); + static const QStringList dirs = xplaneRootDir().isEmpty() ? QStringList() : QStringList({xplaneRootDir()}); + return dirs; } - QStringList CXPlaneUtil::xplaneModelExcludeDirectoryPatterns() + const QStringList &CXPlaneUtil::xplaneModelExcludeDirectoryPatterns() { - return QStringList(); + static const QStringList empty; + return empty; } QString CXPlaneUtil::xswiftbusLegacyDir(const QString &rootDir) diff --git a/src/blackmisc/simulation/xplane/xplaneutil.h b/src/blackmisc/simulation/xplane/xplaneutil.h index e88ab1389..12e1fbce8 100644 --- a/src/blackmisc/simulation/xplane/xplaneutil.h +++ b/src/blackmisc/simulation/xplane/xplaneutil.h @@ -40,14 +40,20 @@ namespace BlackMisc //! XPlane root directory //! In case more then one XPlane version is found, the path to the highest version is used - static QString xplaneRootDir(); + static const QString &xplaneRootDir(); //! Is the xplaneRootDir existing? static bool isXplaneRootDirExisting(); //! XPlane plugin directory //! In case more then one XPlane version is found, the path to the highest version is used - static QString xplanePluginDir(); + static const QString &xplanePluginDir(); + + //! Plugin directory from given simulator directory + static QString pluginDirFromSimDir(const QString &simulatorDir); + + //! Model directories from simultaor directory + static QStringList modelDirectoriesFromSimDir(const QString &simulatorDir); //! XPlane relative plugin path static QString xplanePluginPath(); @@ -56,10 +62,10 @@ namespace BlackMisc static bool isXplanePluginDirDirExisting(); //! Directories with models - static QStringList xplaneModelDirectories(); + static const QStringList &xplaneModelDirectories(); //! Exclude directories for models - static QStringList xplaneModelExcludeDirectoryPatterns(); + static const QStringList &xplaneModelExcludeDirectoryPatterns(); //! XSwiftBus legacy directory static QString xswiftbusLegacyDir(const QString &rootDir);