mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-21 15:39:41 +00:00
Merge remote branch 'lgro/config' into next
This commit is contained in:
commit
79a95bea83
11 changed files with 97 additions and 83 deletions
|
@ -127,7 +127,7 @@ DataFilesPage::DataFilesPage(QWidget *parent) : QWidget(parent)
|
||||||
void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict)
|
void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict)
|
||||||
{
|
{
|
||||||
// Put the paths in a boost::filesystem vector to use with Files::Collections
|
// Put the paths in a boost::filesystem vector to use with Files::Collections
|
||||||
std::vector<boost::filesystem::path> dataDirs;
|
Files::PathContainer dataDirs;
|
||||||
|
|
||||||
foreach (const QString ¤tPath, paths) {
|
foreach (const QString ¤tPath, paths) {
|
||||||
dataDirs.push_back(boost::filesystem::path(currentPath.toStdString()));
|
dataDirs.push_back(boost::filesystem::path(currentPath.toStdString()));
|
||||||
|
@ -142,8 +142,8 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict)
|
||||||
|
|
||||||
for (Files::MultiDirCollection::TIter iter(esm.begin()); iter!=esm.end(); ++iter)
|
for (Files::MultiDirCollection::TIter iter(esm.begin()); iter!=esm.end(); ++iter)
|
||||||
{
|
{
|
||||||
std::string filename = boost::filesystem::path (iter->second.filename()).string();
|
QString currentMaster = QString::fromStdString(
|
||||||
QString currentMaster = QString::fromStdString(filename);
|
boost::filesystem::path (iter->second.filename()).string());
|
||||||
|
|
||||||
const QList<QTableWidgetItem*> itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly);
|
const QList<QTableWidgetItem*> itemList = mMastersWidget->findItems(currentMaster, Qt::MatchExactly);
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict)
|
||||||
ESMReader fileReader;
|
ESMReader fileReader;
|
||||||
QStringList availableMasters; // Will contain all found masters
|
QStringList availableMasters; // Will contain all found masters
|
||||||
|
|
||||||
fileReader.setEncoding("win1252");
|
fileReader.setEncoding("win1252"); // FIXME: This should be configurable!
|
||||||
fileReader.open(iter->second.string());
|
fileReader.open(iter->second.string());
|
||||||
|
|
||||||
// First we fill the availableMasters and the mMastersWidget
|
// First we fill the availableMasters and the mMastersWidget
|
||||||
|
@ -190,8 +190,8 @@ void DataFilesPage::setupDataFiles(const QStringList &paths, bool strict)
|
||||||
// Now we put the current plugin in the mDataFilesModel under its masters
|
// Now we put the current plugin in the mDataFilesModel under its masters
|
||||||
QStandardItem *parent = new QStandardItem(availableMasters.join(","));
|
QStandardItem *parent = new QStandardItem(availableMasters.join(","));
|
||||||
|
|
||||||
std::string filename = boost::filesystem::path (iter->second.filename()).string();
|
QStandardItem *child = new QStandardItem(QString::fromStdString(
|
||||||
QStandardItem *child = new QStandardItem(QString::fromStdString(std::string(filename)));
|
boost::filesystem::path (iter->second.filename()).string()));
|
||||||
|
|
||||||
const QList<QStandardItem*> masterList = mDataFilesModel->findItems(availableMasters.join(","));
|
const QList<QStandardItem*> masterList = mDataFilesModel->findItems(availableMasters.join(","));
|
||||||
|
|
||||||
|
|
|
@ -147,37 +147,19 @@ void GraphicsPage::createPages()
|
||||||
|
|
||||||
void GraphicsPage::setupConfig()
|
void GraphicsPage::setupConfig()
|
||||||
{
|
{
|
||||||
QString ogreCfg = (mCfg.getRuntimeConfigPath() / "ogre.cfg").string().c_str();
|
QString ogreCfg = mCfg.getOgreConfigPath().string().c_str();
|
||||||
QFile file(ogreCfg);
|
QFile file(ogreCfg);
|
||||||
|
|
||||||
if (!file.exists()) {
|
|
||||||
ogreCfg = QString::fromStdString((mCfg.getLocalConfigPath() / "ogre.cfg").string());
|
|
||||||
}
|
|
||||||
|
|
||||||
mOgreConfig = new QSettings(ogreCfg, QSettings::IniFormat);
|
mOgreConfig = new QSettings(ogreCfg, QSettings::IniFormat);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraphicsPage::setupOgre()
|
void GraphicsPage::setupOgre()
|
||||||
{
|
{
|
||||||
QString pluginCfg = (mCfg.getRuntimeConfigPath() / "plugins.cfg").string().c_str();
|
QString pluginCfg = mCfg.getPluginsConfigPath().string().c_str();
|
||||||
QFile file(pluginCfg);
|
QFile file(pluginCfg);
|
||||||
|
|
||||||
if (!file.exists()) {
|
|
||||||
pluginCfg = QString::fromStdString((mCfg.getLocalConfigPath() / "plugins.cfg").string());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reopen the file from user directory
|
|
||||||
file.setFileName(pluginCfg);
|
|
||||||
|
|
||||||
if (!file.exists()) {
|
|
||||||
// There's no plugins.cfg in the user directory, use global directory
|
|
||||||
pluginCfg = QString::fromStdString((mCfg.getGlobalConfigPath() / "plugins.cfg").string());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a log manager so we can surpress debug text to stdout/stderr
|
// Create a log manager so we can surpress debug text to stdout/stderr
|
||||||
Ogre::LogManager* logMgr = OGRE_NEW Ogre::LogManager;
|
Ogre::LogManager* logMgr = OGRE_NEW Ogre::LogManager;
|
||||||
logMgr->createLog("launcherOgre.log", true, false, false);
|
logMgr->createLog((mCfg.getLogPath().string() + "/launcherOgre.log"), true, false, false);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -475,4 +457,4 @@ void GraphicsPage::rendererChanged(const QString &renderer)
|
||||||
}
|
}
|
||||||
|
|
||||||
mSelectedRenderSystem = mOgre->getRenderSystemByName(renderer.toStdString());
|
mSelectedRenderSystem = mOgre->getRenderSystemByName(renderer.toStdString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,9 +252,8 @@ void OMW::Engine::loadBSA()
|
||||||
Bsa::addBSA (iter->second.string());
|
Bsa::addBSA (iter->second.string());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string m = mDataDir.string();
|
std::cout << "Data dir " << mDataDir.string() << std::endl;
|
||||||
std::cout << "Data dir" << m << "\n";
|
Bsa::addDir(mDataDir.string(), mFSStrict);
|
||||||
Bsa::addDir(m, mFSStrict);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add resources directory
|
// add resources directory
|
||||||
|
@ -273,12 +272,11 @@ void OMW::Engine::enableFSStrict(bool fsStrict)
|
||||||
|
|
||||||
// Set data dir
|
// Set data dir
|
||||||
|
|
||||||
void OMW::Engine::setDataDirs (const std::vector<boost::filesystem::path>& dataDirs)
|
void OMW::Engine::setDataDirs (const Files::PathContainer& dataDirs)
|
||||||
{
|
{
|
||||||
/// \todo remove mDataDir, once resources system can handle multiple directories
|
/// \todo remove mDataDir, once resources system can handle multiple directories
|
||||||
assert (!dataDirs.empty());
|
assert (!dataDirs.empty());
|
||||||
mDataDir = dataDirs[0];
|
mDataDir = dataDirs.back();
|
||||||
|
|
||||||
mFileCollections = Files::Collections (dataDirs, !mFSStrict);
|
mFileCollections = Files::Collections (dataDirs, !mFSStrict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,25 +325,6 @@ void OMW::Engine::setNewGame(bool newGame)
|
||||||
mNewGame = newGame;
|
mNewGame = newGame;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string OMW::Engine::getOgreFilesDir(const std::string& ogreFile)
|
|
||||||
{
|
|
||||||
boost::filesystem::path cfgPath(mCfgMgr.getRuntimeConfigPath());
|
|
||||||
if (!boost::filesystem::exists(cfgPath / ogreFile))
|
|
||||||
{
|
|
||||||
cfgPath = mCfgMgr.getLocalConfigPath();
|
|
||||||
if (!boost::filesystem::exists(cfgPath / ogreFile ))
|
|
||||||
{
|
|
||||||
cfgPath = mCfgMgr.getGlobalConfigPath();
|
|
||||||
if (!boost::filesystem::exists(cfgPath / ogreFile))
|
|
||||||
{
|
|
||||||
cfgPath.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (!cfgPath.empty()) ? cfgPath.string() + std::string("/") : std::string();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialise and enter main loop.
|
// Initialise and enter main loop.
|
||||||
|
|
||||||
void OMW::Engine::go()
|
void OMW::Engine::go()
|
||||||
|
@ -357,11 +336,10 @@ void OMW::Engine::go()
|
||||||
test.name = "";
|
test.name = "";
|
||||||
total = 0;
|
total = 0;
|
||||||
|
|
||||||
|
mOgre.configure(!boost::filesystem::is_regular_file(mCfgMgr.getOgreConfigPath()),
|
||||||
std::string cfgDir(getOgreFilesDir("ogre.cfg"));
|
mCfgMgr.getOgreConfigPath().string(),
|
||||||
std::string pluginsFile(getOgreFilesDir("plugins.cfg") + std::string("plugins.cfg"));
|
mCfgMgr.getLogPath().string() + std::string("/"),
|
||||||
|
mCfgMgr.getPluginsConfigPath().string(), false);
|
||||||
mOgre.configure(cfgDir.empty(), cfgDir, pluginsFile, false);
|
|
||||||
|
|
||||||
// This has to be added BEFORE MyGUI is initialized, as it needs
|
// This has to be added BEFORE MyGUI is initialized, as it needs
|
||||||
// to find core.xml here.
|
// to find core.xml here.
|
||||||
|
@ -381,7 +359,9 @@ void OMW::Engine::go()
|
||||||
mResDir, mNewGame, mEnvironment, mEncoding);
|
mResDir, mNewGame, mEnvironment, mEncoding);
|
||||||
|
|
||||||
// Set up the GUI system
|
// Set up the GUI system
|
||||||
mGuiManager = new OEngine::GUI::MyGUIManager(mOgre.getWindow(), mOgre.getScene(), false, cfgDir);
|
mGuiManager = new OEngine::GUI::MyGUIManager(mOgre.getWindow(), mOgre.getScene(), false,
|
||||||
|
mCfgMgr.getLogPath().string() + std::string("/"));
|
||||||
|
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWSkill>("Widget");
|
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWSkill>("Widget");
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWAttribute>("Widget");
|
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWAttribute>("Widget");
|
||||||
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWSpell>("Widget");
|
MyGUI::FactoryManager::getInstance().registerFactory<MWGui::Widgets::MWSpell>("Widget");
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace OMW
|
||||||
void enableFSStrict(bool fsStrict);
|
void enableFSStrict(bool fsStrict);
|
||||||
|
|
||||||
/// Set data dirs
|
/// Set data dirs
|
||||||
void setDataDirs(const Files::Collections::PathContainer& dataDirs);
|
void setDataDirs(const Files::PathContainer& dataDirs);
|
||||||
|
|
||||||
/// Set resource dir
|
/// Set resource dir
|
||||||
void setResourceDir(const boost::filesystem::path& parResDir);
|
void setResourceDir(const boost::filesystem::path& parResDir);
|
||||||
|
@ -157,8 +157,6 @@ namespace OMW
|
||||||
void setEncoding(const std::string& encoding);
|
void setEncoding(const std::string& encoding);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string getOgreFilesDir(const std::string& ogreFile);
|
|
||||||
|
|
||||||
Cfg::ConfigurationManager& mCfgMgr;
|
Cfg::ConfigurationManager& mCfgMgr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Cfg::Configuratio
|
||||||
desc.add_options()
|
desc.add_options()
|
||||||
("help", "print help message")
|
("help", "print help message")
|
||||||
("version", "print version information and quit")
|
("version", "print version information and quit")
|
||||||
("data", bpo::value<Files::Collections::PathContainer>()->default_value(Files::Collections::PathContainer(), "data")
|
("data", bpo::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")
|
||||||
->multitoken(), "set data directories (later directories have higher priority)")
|
->multitoken(), "set data directories (later directories have higher priority)")
|
||||||
|
|
||||||
("data-local", bpo::value<std::string>()->default_value(""),
|
("data-local", bpo::value<std::string>()->default_value(""),
|
||||||
|
@ -109,12 +109,12 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Cfg::Configuratio
|
||||||
|
|
||||||
bpo::variables_map variables;
|
bpo::variables_map variables;
|
||||||
|
|
||||||
cfgMgr.readConfiguration(variables, desc);
|
|
||||||
|
|
||||||
// Runtime options override settings from all configs
|
// Runtime options override settings from all configs
|
||||||
bpo::store(valid_opts, variables);
|
bpo::store(valid_opts, variables);
|
||||||
bpo::notify(variables);
|
bpo::notify(variables);
|
||||||
|
|
||||||
|
cfgMgr.readConfiguration(variables, desc);
|
||||||
|
|
||||||
bool run = true;
|
bool run = true;
|
||||||
|
|
||||||
if (variables.count ("help"))
|
if (variables.count ("help"))
|
||||||
|
@ -153,17 +153,17 @@ bool parseOptions (int argc, char** argv, OMW::Engine& engine, Cfg::Configuratio
|
||||||
// directory settings
|
// directory settings
|
||||||
engine.enableFSStrict(variables["fs-strict"].as<bool>());
|
engine.enableFSStrict(variables["fs-strict"].as<bool>());
|
||||||
|
|
||||||
Files::Collections::PathContainer dataDirs = variables["data"].as<Files::Collections::PathContainer>();
|
Files::PathContainer dataDirs(variables["data"].as<Files::PathContainer>());
|
||||||
|
|
||||||
std::string local(variables["data-local"].as<std::string>());
|
std::string local(variables["data-local"].as<std::string>());
|
||||||
if (!local.empty())
|
if (!local.empty())
|
||||||
{
|
{
|
||||||
dataDirs.push_back(local);
|
dataDirs.push_back(Files::PathContainer::value_type(local));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataDirs.empty())
|
if (dataDirs.empty())
|
||||||
{
|
{
|
||||||
dataDirs.push_back(cfgMgr.getLocalDataPath().string());
|
dataDirs.push_back(cfgMgr.getLocalDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.setDataDirs(dataDirs);
|
engine.setDataDirs(dataDirs);
|
||||||
|
|
|
@ -15,19 +15,47 @@ static const char* const pluginsCfgFile = "plugins.cfg";
|
||||||
ConfigurationManager::ConfigurationManager()
|
ConfigurationManager::ConfigurationManager()
|
||||||
: mPath("openmw")
|
: mPath("openmw")
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* According to task #168 plugins.cfg file shall be located in global
|
||||||
|
* configuration path or in runtime configuration path.
|
||||||
|
*/
|
||||||
|
mPluginsCfgPath = mPath.getGlobalConfigPath() / pluginsCfgFile;
|
||||||
|
if (!boost::filesystem::is_regular_file(mPluginsCfgPath))
|
||||||
|
{
|
||||||
|
mPluginsCfgPath = mPath.getRuntimeConfigPath() / pluginsCfgFile;
|
||||||
|
if (!boost::filesystem::is_regular_file(mPluginsCfgPath))
|
||||||
|
{
|
||||||
|
std::cerr << "Failed to find " << pluginsCfgFile << " file!" << std::endl;
|
||||||
|
mPluginsCfgPath.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* According to task #168 ogre.cfg file shall be located only
|
||||||
|
* in user configuration path.
|
||||||
|
*/
|
||||||
|
mOgreCfgPath = mPath.getLocalConfigPath() / ogreCfgFile;
|
||||||
|
|
||||||
|
mLogPath = mPath.getLocalConfigPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigurationManager::~ConfigurationManager()
|
ConfigurationManager::~ConfigurationManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setupPath(const char* const cfgFile, boost::filesystem::path& path)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigurationManager::readConfiguration(boost::program_options::variables_map& variables,
|
void ConfigurationManager::readConfiguration(boost::program_options::variables_map& variables,
|
||||||
boost::program_options::options_description& description)
|
boost::program_options::options_description& description)
|
||||||
{
|
{
|
||||||
loadConfig(mPath.getGlobalConfigPath(), variables, description);
|
|
||||||
loadConfig(mPath.getLocalConfigPath(), variables, description);
|
loadConfig(mPath.getLocalConfigPath(), variables, description);
|
||||||
|
boost::program_options::notify(variables);
|
||||||
loadConfig(mPath.getRuntimeConfigPath(), variables, description);
|
loadConfig(mPath.getRuntimeConfigPath(), variables, description);
|
||||||
boost::program_options::notify(variables);
|
boost::program_options::notify(variables);
|
||||||
|
loadConfig(mPath.getGlobalConfigPath(), variables, description);
|
||||||
|
boost::program_options::notify(variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigurationManager::loadConfig(const boost::filesystem::path& path,
|
void ConfigurationManager::loadConfig(const boost::filesystem::path& path,
|
||||||
|
@ -115,4 +143,19 @@ void ConfigurationManager::setRuntimeDataPath(const boost::filesystem::path& new
|
||||||
mPath.setRuntimeDataPath(newPath);
|
mPath.setRuntimeDataPath(newPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const boost::filesystem::path& ConfigurationManager::getOgreConfigPath() const
|
||||||
|
{
|
||||||
|
return mOgreCfgPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
const boost::filesystem::path& ConfigurationManager::getPluginsConfigPath() const
|
||||||
|
{
|
||||||
|
return mPluginsCfgPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
const boost::filesystem::path& ConfigurationManager::getLogPath() const
|
||||||
|
{
|
||||||
|
return mLogPath;
|
||||||
|
}
|
||||||
|
|
||||||
} /* namespace Cfg */
|
} /* namespace Cfg */
|
||||||
|
|
|
@ -41,12 +41,20 @@ struct ConfigurationManager
|
||||||
const boost::filesystem::path& getRuntimeDataPath() const;
|
const boost::filesystem::path& getRuntimeDataPath() const;
|
||||||
void setRuntimeDataPath(const boost::filesystem::path& newPath);
|
void setRuntimeDataPath(const boost::filesystem::path& newPath);
|
||||||
|
|
||||||
|
const boost::filesystem::path& getOgreConfigPath() const;
|
||||||
|
const boost::filesystem::path& getPluginsConfigPath() const;
|
||||||
|
const boost::filesystem::path& getLogPath() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loadConfig(const boost::filesystem::path& path,
|
void loadConfig(const boost::filesystem::path& path,
|
||||||
boost::program_options::variables_map& variables,
|
boost::program_options::variables_map& variables,
|
||||||
boost::program_options::options_description& description);
|
boost::program_options::options_description& description);
|
||||||
|
|
||||||
Files::Path<> mPath;
|
Files::Path<> mPath;
|
||||||
|
|
||||||
|
boost::filesystem::path mOgreCfgPath;
|
||||||
|
boost::filesystem::path mPluginsCfgPath;
|
||||||
|
boost::filesystem::path mLogPath;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace Cfg */
|
} /* namespace Cfg */
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace Files
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections::Collections(const std::vector<boost::filesystem::path>& directories, bool foldCase)
|
Collections::Collections(const Files::PathContainer& directories, bool foldCase)
|
||||||
: mDirectories(directories)
|
: mDirectories(directories)
|
||||||
, mFoldCase(foldCase)
|
, mFoldCase(foldCase)
|
||||||
, mCollections()
|
, mCollections()
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#ifndef COMPONENTS_FILES_COLLECTION_HPP
|
#ifndef COMPONENTS_FILES_COLLECTION_HPP
|
||||||
#define COMPONENTS_FILES_COLLECTION_HPP
|
#define COMPONENTS_FILES_COLLECTION_HPP
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
@ -13,12 +12,10 @@ namespace Files
|
||||||
class Collections
|
class Collections
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::vector<boost::filesystem::path> PathContainer;
|
|
||||||
|
|
||||||
Collections();
|
Collections();
|
||||||
|
|
||||||
///< Directories are listed with increasing priority.
|
///< Directories are listed with increasing priority.
|
||||||
Collections(const PathContainer& directories, bool foldCase);
|
Collections(const Files::PathContainer& directories, bool foldCase);
|
||||||
|
|
||||||
///< Return a file collection for the given extension. Extension must contain the
|
///< Return a file collection for the given extension. Extension must contain the
|
||||||
/// leading dot and must be all lower-case.
|
/// leading dot and must be all lower-case.
|
||||||
|
@ -26,7 +23,7 @@ namespace Files
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::map<std::string, MultiDirCollection> MultiDirCollectionContainer;
|
typedef std::map<std::string, MultiDirCollection> MultiDirCollectionContainer;
|
||||||
PathContainer mDirectories;
|
Files::PathContainer mDirectories;
|
||||||
|
|
||||||
bool mFoldCase;
|
bool mFoldCase;
|
||||||
mutable MultiDirCollectionContainer mCollections;
|
mutable MultiDirCollectionContainer mCollections;
|
||||||
|
|
|
@ -39,21 +39,25 @@ namespace Files
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
MultiDirCollection::MultiDirCollection (const std::vector<boost::filesystem::path>& directories,
|
MultiDirCollection::MultiDirCollection(const Files::PathContainer& directories,
|
||||||
const std::string& extension, bool foldCase)
|
const std::string& extension, bool foldCase)
|
||||||
: mFiles (NameLess (!foldCase))
|
: mFiles (NameLess (!foldCase))
|
||||||
{
|
{
|
||||||
NameEqual equal (!foldCase);
|
NameEqual equal (!foldCase);
|
||||||
|
|
||||||
for (std::vector<boost::filesystem::path>::const_iterator iter = directories.begin();
|
for (PathContainer::const_iterator iter = directories.begin();
|
||||||
iter!=directories.end(); ++iter)
|
iter!=directories.end(); ++iter)
|
||||||
{
|
{
|
||||||
boost::filesystem::path dataDirectory = *iter;
|
if (!boost::filesystem::is_directory(*iter))
|
||||||
|
|
||||||
for (boost::filesystem::directory_iterator iter (dataDirectory);
|
|
||||||
iter!=boost::filesystem::directory_iterator(); ++iter)
|
|
||||||
{
|
{
|
||||||
boost::filesystem::path path = *iter;
|
std::cout << "Skipping invalid directory: " << (*iter).string() << std::endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (boost::filesystem::directory_iterator dirIter(*iter);
|
||||||
|
dirIter != boost::filesystem::directory_iterator(); ++dirIter)
|
||||||
|
{
|
||||||
|
boost::filesystem::path path = *dirIter;
|
||||||
|
|
||||||
if (!equal (extension, boost::filesystem::path (path.extension()).string()))
|
if (!equal (extension, boost::filesystem::path (path.extension()).string()))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
namespace Files
|
namespace Files
|
||||||
{
|
{
|
||||||
|
typedef std::vector<boost::filesystem::path> PathContainer;
|
||||||
|
|
||||||
struct NameLess
|
struct NameLess
|
||||||
{
|
{
|
||||||
bool mStrict;
|
bool mStrict;
|
||||||
|
@ -58,7 +60,7 @@ namespace Files
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MultiDirCollection (const std::vector<boost::filesystem::path>& directories,
|
MultiDirCollection (const Files::PathContainer& directories,
|
||||||
const std::string& extension, bool foldCase);
|
const std::string& extension, bool foldCase);
|
||||||
///< Directories are listed with increasing priority.
|
///< Directories are listed with increasing priority.
|
||||||
/// \param extension The extension that should be listed in this collection. Must
|
/// \param extension The extension that should be listed in this collection. Must
|
||||||
|
|
Loading…
Reference in a new issue