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:
Klaus Basan
2017-03-22 03:10:04 +01:00
committed by Mathew Sutcliffe
parent e8eb652cfd
commit b0fe4ce930
7 changed files with 102 additions and 41 deletions

View File

@@ -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);
} }

View File

@@ -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();

View File

@@ -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>

View File

@@ -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;

View File

@@ -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();
}; };

View File

@@ -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;

View File

@@ -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;