forked from mirror/openmw-tes3mp
Added data path retrieval from openmw.cfg, to use as existing installs
This commit is contained in:
parent
095ff4e17a
commit
dddd9cba57
3 changed files with 92 additions and 11 deletions
|
@ -94,6 +94,7 @@ target_link_libraries(openmw-wizard
|
||||||
${Boost_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${QT_LIBRARIES}
|
${QT_LIBRARIES}
|
||||||
${LIBUNSHIELD_LIBRARY}
|
${LIBUNSHIELD_LIBRARY}
|
||||||
|
components
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DPKG_PROGRAM)
|
if(DPKG_PROGRAM)
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
#include "mainwizard.hpp"
|
#include "mainwizard.hpp"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QTextCodec>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
#include "intropage.hpp"
|
#include "intropage.hpp"
|
||||||
|
@ -14,6 +18,7 @@
|
||||||
#include "conclusionpage.hpp"
|
#include "conclusionpage.hpp"
|
||||||
|
|
||||||
Wizard::MainWizard::MainWizard(QWidget *parent) :
|
Wizard::MainWizard::MainWizard(QWidget *parent) :
|
||||||
|
mGameSettings(mCfgMgr),
|
||||||
QWizard(parent)
|
QWizard(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -29,7 +34,6 @@ Wizard::MainWizard::MainWizard(QWidget *parent) :
|
||||||
setDefaultProperty("QComboBox", "currentText", "currentIndexChanged");
|
setDefaultProperty("QComboBox", "currentText", "currentIndexChanged");
|
||||||
|
|
||||||
setDefaultProperty("ComponentListWidget", "mCheckedItems", "checkedItemsChanged");
|
setDefaultProperty("ComponentListWidget", "mCheckedItems", "checkedItemsChanged");
|
||||||
setDefaultProperty("InstallationListWidget", "mCurrentText", "currentTextChanged");
|
|
||||||
|
|
||||||
setupInstallations();
|
setupInstallations();
|
||||||
setupPages();
|
setupPages();
|
||||||
|
@ -37,15 +41,47 @@ Wizard::MainWizard::MainWizard(QWidget *parent) :
|
||||||
|
|
||||||
void Wizard::MainWizard::setupInstallations()
|
void Wizard::MainWizard::setupInstallations()
|
||||||
{
|
{
|
||||||
// TODO: detect existing installations
|
QString userPath(QFile::decodeName(mCfgMgr.getUserPath().string().c_str()));
|
||||||
QStringList paths;
|
QString globalPath(QFile::decodeName(mCfgMgr.getGlobalPath().string().c_str()));
|
||||||
paths << QString("/home/pvdk/.wine/drive_c/Program Files/Bethesda Softworks/Morrowind/Data Files");
|
|
||||||
paths << QString("/home/pvdk/openmw/Data Files");
|
|
||||||
paths << QString("/usr/games/morrowind");
|
|
||||||
|
|
||||||
foreach (const QString &path, paths)
|
QStringList paths;
|
||||||
{
|
paths.append(userPath + QLatin1String("openmw.cfg"));
|
||||||
addInstallation(path);
|
paths.append(QLatin1String("openmw.cfg"));
|
||||||
|
paths.append(globalPath + QLatin1String("openmw.cfg"));
|
||||||
|
|
||||||
|
foreach (const QString &path, paths) {
|
||||||
|
qDebug() << "Loading config file:" << qPrintable(path);
|
||||||
|
|
||||||
|
QFile file(path);
|
||||||
|
if (file.exists()) {
|
||||||
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setWindowTitle(tr("Error opening OpenMW configuration file"));
|
||||||
|
msgBox.setIcon(QMessageBox::Critical);
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Ok);
|
||||||
|
msgBox.setText(QObject::tr("<br><b>Could not open %0 for reading</b><br><br> \
|
||||||
|
Please make sure you have the right permissions \
|
||||||
|
and try again.<br>").arg(file.fileName()));
|
||||||
|
msgBox.exec();
|
||||||
|
return qApp->quit();
|
||||||
|
}
|
||||||
|
QTextStream stream(&file);
|
||||||
|
stream.setCodec(QTextCodec::codecForName("UTF-8"));
|
||||||
|
|
||||||
|
mGameSettings.readFile(stream);
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the paths actually contain data files
|
||||||
|
foreach (const QString path, mGameSettings.getDataDirs()) {
|
||||||
|
QDir dir(path);
|
||||||
|
QStringList filters;
|
||||||
|
filters << "*.esp" << "*.esm" << "*.omwgame" << "*.omwaddon";
|
||||||
|
|
||||||
|
// Add to Wizard installations
|
||||||
|
if (!dir.entryList(filters).isEmpty())
|
||||||
|
addInstallation(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -74,6 +110,10 @@ void Wizard::MainWizard::addInstallation(const QString &path)
|
||||||
install->iniPath = file.fileName();
|
install->iniPath = file.fileName();
|
||||||
|
|
||||||
mInstallations.insert(QDir::toNativeSeparators(path), install);
|
mInstallations.insert(QDir::toNativeSeparators(path), install);
|
||||||
|
|
||||||
|
// Add it to the openmw.cfg too
|
||||||
|
mGameSettings.setMultiValue(QString("data"), path);
|
||||||
|
mGameSettings.addDataDir(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wizard::MainWizard::setupPages()
|
void Wizard::MainWizard::setupPages()
|
||||||
|
@ -89,6 +129,36 @@ void Wizard::MainWizard::setupPages()
|
||||||
setPage(Page_Conclusion, new ConclusionPage(this));
|
setPage(Page_Conclusion, new ConclusionPage(this));
|
||||||
setStartId(Page_Intro);
|
setStartId(Page_Intro);
|
||||||
}
|
}
|
||||||
|
void Wizard::MainWizard::accept()
|
||||||
|
{
|
||||||
|
writeSettings();
|
||||||
|
QWizard::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Wizard::MainWizard::writeSettings()
|
||||||
|
{
|
||||||
|
QString userPath(QFile::decodeName(mCfgMgr.getUserPath().string().c_str()));
|
||||||
|
QFile file(userPath + QLatin1String("openmw.cfg"));
|
||||||
|
|
||||||
|
if (!file.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)) {
|
||||||
|
// File cannot be opened or created
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setWindowTitle(tr("Error writing OpenMW configuration file"));
|
||||||
|
msgBox.setIcon(QMessageBox::Critical);
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Ok);
|
||||||
|
msgBox.setText(tr("<br><b>Could not open or create %0 for writing</b><br><br> \
|
||||||
|
Please make sure you have the right permissions \
|
||||||
|
and try again.<br>").arg(file.fileName()));
|
||||||
|
msgBox.exec();
|
||||||
|
return qApp->quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream stream(&file);
|
||||||
|
stream.setCodec(QTextCodec::codecForName("UTF-8"));
|
||||||
|
|
||||||
|
mGameSettings.writeFile(stream);
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
bool Wizard::MainWizard::findFiles(const QString &name, const QString &path)
|
bool Wizard::MainWizard::findFiles(const QString &name, const QString &path)
|
||||||
{
|
{
|
||||||
|
@ -100,10 +170,8 @@ bool Wizard::MainWizard::findFiles(const QString &name, const QString &path)
|
||||||
// TODO: add MIME handling to make sure the files are real
|
// TODO: add MIME handling to make sure the files are real
|
||||||
if (dir.exists(name + QLatin1String(".esm")) && dir.exists(name + QLatin1String(".bsa")))
|
if (dir.exists(name + QLatin1String(".esm")) && dir.exists(name + QLatin1String(".bsa")))
|
||||||
{
|
{
|
||||||
qDebug() << name << " exists!";
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
qDebug() << name << " doesn't exist!";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
#include <QWizard>
|
#include <QWizard>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
|
#include <components/files/configurationmanager.hpp>
|
||||||
|
#include <components/config/gamesettings.hpp>
|
||||||
|
|
||||||
namespace Wizard
|
namespace Wizard
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -39,10 +42,19 @@ namespace Wizard
|
||||||
|
|
||||||
QMap<QString, Installation*> mInstallations;
|
QMap<QString, Installation*> mInstallations;
|
||||||
|
|
||||||
|
Files::ConfigurationManager mCfgMgr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void setupInstallations();
|
void setupInstallations();
|
||||||
void setupPages();
|
void setupPages();
|
||||||
|
|
||||||
|
void writeSettings();
|
||||||
|
|
||||||
|
Config::GameSettings mGameSettings;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void accept();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue