mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-15 18:39:51 +00:00
Issue #567: workaround for crash with non-English ESX files
This commit is contained in:
parent
170a9762ac
commit
abd307d70e
@ -72,7 +72,11 @@ void CSMWorld::Data::merge()
|
|||||||
void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
||||||
{
|
{
|
||||||
ESM::ESMReader reader;
|
ESM::ESMReader reader;
|
||||||
/// \todo set encoder
|
|
||||||
|
/// \todo set encoding properly, once config implementation has been fixed.
|
||||||
|
ToUTF8::Utf8Encoder encoder (ToUTF8::calculateEncoding ("win1252"));
|
||||||
|
reader.setEncoder (&encoder);
|
||||||
|
|
||||||
reader.open (path.string());
|
reader.open (path.string());
|
||||||
|
|
||||||
// Note: We do not need to send update signals here, because at this point the model is not connected
|
// Note: We do not need to send update signals here, because at this point the model is not connected
|
||||||
|
@ -10,48 +10,48 @@ OpenDialog::OpenDialog(QWidget * parent) : QDialog(parent)
|
|||||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||||
mFileSelector = new DataFilesList(mCfgMgr, this);
|
mFileSelector = new DataFilesList(mCfgMgr, this);
|
||||||
layout->addWidget(mFileSelector);
|
layout->addWidget(mFileSelector);
|
||||||
|
|
||||||
//FIXME - same as DataFilesPage::setupDataFiles
|
/// \todo move config to Editor class and add command line options.
|
||||||
// We use the Configuration Manager to retrieve the configuration values
|
// We use the Configuration Manager to retrieve the configuration values
|
||||||
boost::program_options::variables_map variables;
|
boost::program_options::variables_map variables;
|
||||||
boost::program_options::options_description desc;
|
boost::program_options::options_description desc;
|
||||||
|
|
||||||
desc.add_options()
|
desc.add_options()
|
||||||
("data", boost::program_options::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")->multitoken())
|
("data", boost::program_options::value<Files::PathContainer>()->default_value(Files::PathContainer(), "data")->multitoken())
|
||||||
("data-local", boost::program_options::value<std::string>()->default_value(""))
|
("data-local", boost::program_options::value<std::string>()->default_value(""))
|
||||||
("fs-strict", boost::program_options::value<bool>()->implicit_value(true)->default_value(false))
|
("fs-strict", boost::program_options::value<bool>()->implicit_value(true)->default_value(false))
|
||||||
("encoding", boost::program_options::value<std::string>()->default_value("win1252"));
|
("encoding", boost::program_options::value<std::string>()->default_value("win1252"));
|
||||||
|
|
||||||
boost::program_options::notify(variables);
|
boost::program_options::notify(variables);
|
||||||
|
|
||||||
mCfgMgr.readConfiguration(variables, desc);
|
mCfgMgr.readConfiguration(variables, desc);
|
||||||
|
|
||||||
Files::PathContainer mDataDirs, mDataLocal;
|
Files::PathContainer mDataDirs, mDataLocal;
|
||||||
if (!variables["data"].empty()) {
|
if (!variables["data"].empty()) {
|
||||||
mDataDirs = Files::PathContainer(variables["data"].as<Files::PathContainer>());
|
mDataDirs = Files::PathContainer(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()) {
|
||||||
mDataLocal.push_back(Files::PathContainer::value_type(local));
|
mDataLocal.push_back(Files::PathContainer::value_type(local));
|
||||||
}
|
}
|
||||||
|
|
||||||
mCfgMgr.processPaths(mDataDirs);
|
mCfgMgr.processPaths(mDataDirs);
|
||||||
mCfgMgr.processPaths(mDataLocal);
|
mCfgMgr.processPaths(mDataLocal);
|
||||||
|
|
||||||
// Set the charset for reading the esm/esp files
|
// Set the charset for reading the esm/esp files
|
||||||
QString encoding = QString::fromStdString(variables["encoding"].as<std::string>());
|
QString encoding = QString::fromStdString(variables["encoding"].as<std::string>());
|
||||||
|
|
||||||
Files::PathContainer dataDirs;
|
Files::PathContainer dataDirs;
|
||||||
dataDirs.insert(dataDirs.end(), mDataDirs.begin(), mDataDirs.end());
|
dataDirs.insert(dataDirs.end(), mDataDirs.begin(), mDataDirs.end());
|
||||||
dataDirs.insert(dataDirs.end(), mDataLocal.begin(), mDataLocal.end());
|
dataDirs.insert(dataDirs.end(), mDataLocal.begin(), mDataLocal.end());
|
||||||
mFileSelector->setupDataFiles(dataDirs, encoding);
|
mFileSelector->setupDataFiles(dataDirs, encoding);
|
||||||
|
|
||||||
buttonBox = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel, Qt::Horizontal, this);
|
buttonBox = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel, Qt::Horizontal, this);
|
||||||
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
|
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
|
||||||
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
||||||
layout->addWidget(buttonBox);
|
layout->addWidget(buttonBox);
|
||||||
|
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
setWindowTitle(tr("Open"));
|
setWindowTitle(tr("Open"));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user