mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-30 22:29:13 +08:00
refs #911, allow to set model dir relative to simulator directory
* utility functions in simulator info * and fscommonutil * and button in UI to set default
This commit is contained in:
committed by
Mathew Sutcliffe
parent
e8eb652cfd
commit
b0fe4ce930
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
|
using namespace BlackMisc::Simulation::FsCommon;
|
||||||
using namespace BlackConfig;
|
using namespace BlackConfig;
|
||||||
|
|
||||||
namespace BlackGui
|
namespace BlackGui
|
||||||
@@ -35,6 +36,7 @@ namespace BlackGui
|
|||||||
connect(ui->pb_Save, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::save);
|
connect(ui->pb_Save, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::save);
|
||||||
connect(ui->pb_Reset, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_reset);
|
connect(ui->pb_Reset, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_reset);
|
||||||
connect(ui->pb_CopyDefaults, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_copyDefaults);
|
connect(ui->pb_CopyDefaults, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_copyDefaults);
|
||||||
|
connect(ui->pb_AdjustModelDirectory, &QPushButton::clicked, this, &CSettingsSimulatorBasicsComponent::ps_adjustModelDirectory);
|
||||||
connect(ui->le_SimulatorDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorDirectoryEntered);
|
connect(ui->le_SimulatorDirectory, &QLineEdit::returnPressed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorDirectoryEntered);
|
||||||
connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorChanged);
|
connect(ui->comp_SimulatorSelector, &CSimulatorSelector::changed, this, &CSettingsSimulatorBasicsComponent::ps_simulatorChanged);
|
||||||
|
|
||||||
@@ -131,6 +133,25 @@ namespace BlackGui
|
|||||||
this->displayExcludeDirectoryPatterns(excludes);
|
this->displayExcludeDirectoryPatterns(excludes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSettingsSimulatorBasicsComponent::ps_adjustModelDirectory()
|
||||||
|
{
|
||||||
|
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
|
||||||
|
QString simDir = this->getFileBrowserSimulatorDirectory();
|
||||||
|
if (simulator.isFsxFamily())
|
||||||
|
{
|
||||||
|
simDir = CFsCommonUtil::fsxSimObjectsDirFromSimDir(simDir);
|
||||||
|
}
|
||||||
|
else if (simulator.fs9())
|
||||||
|
{
|
||||||
|
simDir = CFsCommonUtil::fs9AircraftDirFromSimDir(simDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! \todo counterpart function for XP
|
||||||
|
|
||||||
|
const QStringList newDirs = this->addDirectory(simDir, this->parseDirectories(ui->pte_ModelDirectories->toPlainText()));
|
||||||
|
this->displayModelDirectories(newDirs);
|
||||||
|
}
|
||||||
|
|
||||||
void CSettingsSimulatorBasicsComponent::ps_reset()
|
void CSettingsSimulatorBasicsComponent::ps_reset()
|
||||||
{
|
{
|
||||||
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
|
const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue());
|
||||||
@@ -182,13 +203,19 @@ namespace BlackGui
|
|||||||
|
|
||||||
void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs)
|
void CSettingsSimulatorBasicsComponent::displayExcludeDirectoryPatterns(const QStringList &dirs)
|
||||||
{
|
{
|
||||||
const QString d = dirs.join("\n");
|
QStringList cleanedDirs(dirs);
|
||||||
|
cleanedDirs.removeDuplicates();
|
||||||
|
cleanedDirs.sort(this->m_fileCaseSensitivity);
|
||||||
|
const QString d = cleanedDirs.join("\n");
|
||||||
ui->pte_ExcludeDirectories->setPlainText(d);
|
ui->pte_ExcludeDirectories->setPlainText(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSettingsSimulatorBasicsComponent::displayModelDirectories(const QStringList &dirs)
|
void CSettingsSimulatorBasicsComponent::displayModelDirectories(const QStringList &dirs)
|
||||||
{
|
{
|
||||||
const QString d = dirs.join("\n");
|
QStringList cleanedDirs(dirs);
|
||||||
|
cleanedDirs.removeDuplicates();
|
||||||
|
cleanedDirs.sort(this->m_fileCaseSensitivity);
|
||||||
|
const QString d = cleanedDirs.join("\n");
|
||||||
ui->pte_ModelDirectories->setPlainText(d);
|
ui->pte_ModelDirectories->setPlainText(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#define BLACKGUI_COMPONENTS_SETTINGSSIMULATORBASICSCOMPONENT_H
|
#define BLACKGUI_COMPONENTS_SETTINGSSIMULATORBASICSCOMPONENT_H
|
||||||
|
|
||||||
#include "blackmisc/simulation/simulatorsettings.h"
|
#include "blackmisc/simulation/simulatorsettings.h"
|
||||||
|
#include "blackmisc/simulation/fscommon/fscommonutil.h"
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
@@ -51,6 +52,7 @@ namespace BlackGui
|
|||||||
void ps_simulatorFileDialog();
|
void ps_simulatorFileDialog();
|
||||||
void ps_simulatorDirectoryEntered();
|
void ps_simulatorDirectoryEntered();
|
||||||
void ps_copyDefaults();
|
void ps_copyDefaults();
|
||||||
|
void ps_adjustModelDirectory();
|
||||||
void ps_reset();
|
void ps_reset();
|
||||||
void ps_simulatorChanged();
|
void ps_simulatorChanged();
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,14 @@
|
|||||||
<enum>QFrame::Raised</enum>
|
<enum>QFrame::Raised</enum>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="5" column="4">
|
<item row="1" column="4" alignment="Qt::AlignTop">
|
||||||
|
<widget class="QPushButton" name="pb_ModelFileDialog">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="4">
|
||||||
<widget class="QPushButton" name="pb_CopyDefaults">
|
<widget class="QPushButton" name="pb_CopyDefaults">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>copy (materialize) defaults</string>
|
<string>copy (materialize) defaults</string>
|
||||||
@@ -37,10 +44,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="4" alignment="Qt::AlignTop">
|
<item row="0" column="0">
|
||||||
<widget class="QPushButton" name="pb_ModelFileDialog">
|
<widget class="QLabel" name="lbl_SimulatorDirectory">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>Simulator directory:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -51,35 +58,35 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="4">
|
<item row="6" column="4">
|
||||||
<widget class="QPushButton" name="pb_Reset">
|
<widget class="QPushButton" name="pb_Reset">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>reset</string>
|
<string>reset</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="2">
|
||||||
<widget class="QLabel" name="lbl_SimulatorDirectory">
|
<widget class="QLineEdit" name="le_SimulatorDirectory">
|
||||||
<property name="text">
|
<property name="placeholderText">
|
||||||
<string>Simulator directory:</string>
|
<string>Simulator directory path</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="4">
|
<item row="5" column="4" alignment="Qt::AlignTop">
|
||||||
<widget class="QPushButton" name="pb_Save">
|
|
||||||
<property name="text">
|
|
||||||
<string>save</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="4" alignment="Qt::AlignTop">
|
|
||||||
<widget class="QPushButton" name="pb_ExcludeFileDialog">
|
<widget class="QPushButton" name="pb_ExcludeFileDialog">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string>...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="2" rowspan="4">
|
<item row="8" column="4">
|
||||||
|
<widget class="QPushButton" name="pb_Save">
|
||||||
|
<property name="text">
|
||||||
|
<string>save</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="2" rowspan="4">
|
||||||
<widget class="QPlainTextEdit" name="pte_ExcludeDirectories">
|
<widget class="QPlainTextEdit" name="pte_ExcludeDirectories">
|
||||||
<property name="documentTitle">
|
<property name="documentTitle">
|
||||||
<string>Excluded directory patterns</string>
|
<string>Excluded directory patterns</string>
|
||||||
@@ -92,21 +99,24 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="2">
|
<item row="5" column="0" rowspan="4" alignment="Qt::AlignTop">
|
||||||
<widget class="QLineEdit" name="le_SimulatorDirectory">
|
<widget class="QLabel" name="lbl_ExcludeDirectories">
|
||||||
<property name="placeholderText">
|
<property name="toolTip">
|
||||||
<string>Simulator directory path</string>
|
<string>Excluded from model loading</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Exclude directory patterns:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2" rowspan="3">
|
||||||
<widget class="QPlainTextEdit" name="pte_ModelDirectories">
|
<widget class="QPlainTextEdit" name="pte_ModelDirectories">
|
||||||
<property name="placeholderText">
|
<property name="placeholderText">
|
||||||
<string>Model directories</string>
|
<string>Model directories</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0" colspan="4" alignment="Qt::AlignRight">
|
<item row="9" column="0" colspan="4" alignment="Qt::AlignRight">
|
||||||
<widget class="BlackGui::Components::CSimulatorSelector" name="comp_SimulatorSelector">
|
<widget class="BlackGui::Components::CSimulatorSelector" name="comp_SimulatorSelector">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
@@ -119,13 +129,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" rowspan="4" alignment="Qt::AlignTop">
|
<item row="3" column="4">
|
||||||
<widget class="QLabel" name="lbl_ExcludeDirectories">
|
<widget class="QPushButton" name="pb_AdjustModelDirectory">
|
||||||
<property name="toolTip">
|
|
||||||
<string>Excluded from model loading</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Exclude directory patterns:</string>
|
<string>adjust</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
const QString fsxPath = CFsCommonUtil::fsxDirFromRegistry();
|
const QString fsxPath = CFsCommonUtil::fsxDirFromRegistry();
|
||||||
if (fsxPath.isEmpty()) { return ""; }
|
if (fsxPath.isEmpty()) { return ""; }
|
||||||
return QDir(fsxPath).filePath("SimObjects");
|
return CFsCommonUtil::fsxSimObjectsDirFromSimDir(fsxPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::fsxSimObjectsDirFromRegistry()
|
const QString &CFsCommonUtil::fsxSimObjectsDirFromRegistry()
|
||||||
@@ -103,7 +103,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
QString dir(CFsCommonUtil::fsxDir());
|
QString dir(CFsCommonUtil::fsxDir());
|
||||||
if (dir.isEmpty()) { return ""; }
|
if (dir.isEmpty()) { return ""; }
|
||||||
return QDir(dir).filePath("SimObjects");
|
return CFsCommonUtil::fsxSimObjectsDirFromSimDir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::fsxSimObjectsDir()
|
const QString &CFsCommonUtil::fsxSimObjectsDir()
|
||||||
@@ -112,6 +112,12 @@ namespace BlackMisc
|
|||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CFsCommonUtil::fsxSimObjectsDirFromSimDir(const QString &simDir)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(!simDir.isEmpty(), Q_FUNC_INFO, "missing simulator directory");
|
||||||
|
return CFileUtils::appendFilePaths(simDir, "SimObjects");
|
||||||
|
}
|
||||||
|
|
||||||
const QStringList &CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns()
|
const QStringList &CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns()
|
||||||
{
|
{
|
||||||
static const QStringList exclude
|
static const QStringList exclude
|
||||||
@@ -175,7 +181,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
const QString p3dPath = CFsCommonUtil::p3dDirFromRegistry();
|
const QString p3dPath = CFsCommonUtil::p3dDirFromRegistry();
|
||||||
if (p3dPath.isEmpty()) { return ""; }
|
if (p3dPath.isEmpty()) { return ""; }
|
||||||
return QDir(p3dPath).filePath("SimObjects");
|
return CFsCommonUtil::fsxSimObjectsDirFromSimDir(p3dPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::p3dSimObjectsDirFromRegistry()
|
const QString &CFsCommonUtil::p3dSimObjectsDirFromRegistry()
|
||||||
@@ -188,7 +194,7 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
QString dir(CFsCommonUtil::p3dDir());
|
QString dir(CFsCommonUtil::p3dDir());
|
||||||
if (dir.isEmpty()) { return ""; }
|
if (dir.isEmpty()) { return ""; }
|
||||||
return QDir(dir).filePath("SimObjects");
|
return CFsCommonUtil::fsxSimObjectsDirFromSimDir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::p3dSimObjectsDir()
|
const QString &CFsCommonUtil::p3dSimObjectsDir()
|
||||||
@@ -266,21 +272,20 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
QString fs9Path = CFsCommonUtil::fs9DirFromRegistry();
|
QString fs9Path = CFsCommonUtil::fs9DirFromRegistry();
|
||||||
if (fs9Path.isEmpty()) { return ""; }
|
if (fs9Path.isEmpty()) { return ""; }
|
||||||
fs9Path = QDir(fs9Path).filePath("Aircraft");
|
return CFsCommonUtil::fs9AircraftDirFromSimDir(fs9Path);
|
||||||
return fs9Path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::fs9AircraftDirFromRegistry()
|
const QString &CFsCommonUtil::fs9AircraftDirFromRegistry()
|
||||||
{
|
{
|
||||||
static const QString v(fs9AircraftDirFromRegistryImpl());
|
static const QString dir(fs9AircraftDirFromRegistryImpl());
|
||||||
return v;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString fs9AircraftDirImpl()
|
QString fs9AircraftDirImpl()
|
||||||
{
|
{
|
||||||
const QString dir(CFsCommonUtil::fs9Dir());
|
const QString dir(CFsCommonUtil::fs9Dir());
|
||||||
if (dir.isEmpty()) { return ""; }
|
if (dir.isEmpty()) { return ""; }
|
||||||
return QDir(dir).filePath("Aircraft");
|
return CFsCommonUtil::fs9AircraftDirFromSimDir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CFsCommonUtil::fs9AircraftDir()
|
const QString &CFsCommonUtil::fs9AircraftDir()
|
||||||
@@ -289,6 +294,12 @@ namespace BlackMisc
|
|||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CFsCommonUtil::fs9AircraftDirFromSimDir(const QString &simDir)
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(!simDir.isEmpty(), Q_FUNC_INFO, "missing simulator directory");
|
||||||
|
return CFileUtils::appendFilePaths(simDir, "Aircraft");
|
||||||
|
}
|
||||||
|
|
||||||
const QStringList &CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns()
|
const QStringList &CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns()
|
||||||
{
|
{
|
||||||
static const QStringList exclude;
|
static const QStringList exclude;
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ namespace BlackMisc
|
|||||||
//! FSX's simobject dir, resolved from multiple sources
|
//! FSX's simobject dir, resolved from multiple sources
|
||||||
static const QString &fsxSimObjectsDir();
|
static const QString &fsxSimObjectsDir();
|
||||||
|
|
||||||
|
//! FSX aircraft dir, relative to simulator directory
|
||||||
|
static QString fsxSimObjectsDirFromSimDir(const QString &simDir);
|
||||||
|
|
||||||
//! Exclude directories for simObjects
|
//! Exclude directories for simObjects
|
||||||
static const QStringList &fsxSimObjectsExcludeDirectoryPatterns();
|
static const QStringList &fsxSimObjectsExcludeDirectoryPatterns();
|
||||||
|
|
||||||
@@ -73,6 +76,9 @@ namespace BlackMisc
|
|||||||
//! FS9's aircraft directory
|
//! FS9's aircraft directory
|
||||||
static const QString &fs9AircraftDir();
|
static const QString &fs9AircraftDir();
|
||||||
|
|
||||||
|
//! FS9 aircraft dir, relative to simulator directory
|
||||||
|
static QString fs9AircraftDirFromSimDir(const QString &simDir);
|
||||||
|
|
||||||
//! Exclude directories for aircraft objects
|
//! Exclude directories for aircraft objects
|
||||||
static const QStringList &fs9AircraftObjectsExcludeDirectoryPatterns();
|
static const QStringList &fs9AircraftObjectsExcludeDirectoryPatterns();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -111,6 +111,11 @@ namespace BlackMisc
|
|||||||
return isMicrosoftSimulator() || p3d();
|
return isMicrosoftSimulator() || p3d();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorInfo::isFsxFamily() const
|
||||||
|
{
|
||||||
|
return fsx() || p3d();
|
||||||
|
}
|
||||||
|
|
||||||
int CSimulatorInfo::numberSimulators() const
|
int CSimulatorInfo::numberSimulators() const
|
||||||
{
|
{
|
||||||
int c = fs9() ? 1 : 0;
|
int c = fs9() ? 1 : 0;
|
||||||
|
|||||||
@@ -114,6 +114,9 @@ namespace BlackMisc
|
|||||||
//! Microsoft Simulator or P3D?
|
//! Microsoft Simulator or P3D?
|
||||||
bool isMicrosoftOrPrepare3DSimulator() const;
|
bool isMicrosoftOrPrepare3DSimulator() const;
|
||||||
|
|
||||||
|
//! FSX family, i.e. FSX or P3D?
|
||||||
|
bool isFsxFamily() const;
|
||||||
|
|
||||||
//! Number simulators selected
|
//! Number simulators selected
|
||||||
int numberSimulators() const;
|
int numberSimulators() const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user