forked from mirror/openmw-tes3mp
Fixed segfault bug due to accessing members of unitialized struct
This commit is contained in:
parent
30c3c3e245
commit
5d94cb112f
6 changed files with 65 additions and 33 deletions
|
@ -74,7 +74,7 @@ void Wizard::ComponentSelectionPage::initializePage()
|
||||||
componentsList->addItem(bloodmoonItem);
|
componentsList->addItem(bloodmoonItem);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (mWizard->mInstallations[path]->hasMorrowind) {
|
if (mWizard->mInstallations[path].hasMorrowind) {
|
||||||
morrowindItem->setText(tr("Morrowind\t\t(installed)"));
|
morrowindItem->setText(tr("Morrowind\t\t(installed)"));
|
||||||
morrowindItem->setFlags(morrowindItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
morrowindItem->setFlags(morrowindItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
||||||
morrowindItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
morrowindItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
||||||
|
@ -85,7 +85,7 @@ void Wizard::ComponentSelectionPage::initializePage()
|
||||||
|
|
||||||
componentsList->addItem(morrowindItem);
|
componentsList->addItem(morrowindItem);
|
||||||
|
|
||||||
if (mWizard->mInstallations[path]->hasTribunal) {
|
if (mWizard->mInstallations[path].hasTribunal) {
|
||||||
tribunalItem->setText(tr("Tribunal\t\t(installed)"));
|
tribunalItem->setText(tr("Tribunal\t\t(installed)"));
|
||||||
tribunalItem->setFlags(tribunalItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
tribunalItem->setFlags(tribunalItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
||||||
tribunalItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
tribunalItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
||||||
|
@ -96,7 +96,7 @@ void Wizard::ComponentSelectionPage::initializePage()
|
||||||
|
|
||||||
componentsList->addItem(tribunalItem);
|
componentsList->addItem(tribunalItem);
|
||||||
|
|
||||||
if (mWizard->mInstallations[path]->hasBloodmoon) {
|
if (mWizard->mInstallations[path].hasBloodmoon) {
|
||||||
bloodmoonItem->setText(tr("Bloodmoon\t\t(installed)"));
|
bloodmoonItem->setText(tr("Bloodmoon\t\t(installed)"));
|
||||||
bloodmoonItem->setFlags(bloodmoonItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
bloodmoonItem->setFlags(bloodmoonItem->flags() & !Qt::ItemIsEnabled & Qt::ItemIsUserCheckable);
|
||||||
bloodmoonItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
bloodmoonItem->setData(Qt::CheckStateRole, Qt::Unchecked);
|
||||||
|
@ -114,12 +114,12 @@ bool Wizard::ComponentSelectionPage::validatePage()
|
||||||
QStringList components(field(QLatin1String("installation.components")).toStringList());
|
QStringList components(field(QLatin1String("installation.components")).toStringList());
|
||||||
QString path(field(QLatin1String("installation.path")).toString());
|
QString path(field(QLatin1String("installation.path")).toString());
|
||||||
|
|
||||||
qDebug() << components << path << mWizard->mInstallations[path];
|
// qDebug() << components << path << mWizard->mInstallations[path];
|
||||||
|
|
||||||
if (field(QLatin1String("installation.new")).toBool() == false) {
|
if (field(QLatin1String("installation.new")).toBool() == false) {
|
||||||
if (components.contains(QLatin1String("Tribunal")) && !components.contains(QLatin1String("Bloodmoon")))
|
if (components.contains(QLatin1String("Tribunal")) && !components.contains(QLatin1String("Bloodmoon")))
|
||||||
{
|
{
|
||||||
if (mWizard->mInstallations[path]->hasBloodmoon)
|
if (mWizard->mInstallations[path].hasBloodmoon)
|
||||||
{
|
{
|
||||||
QMessageBox msgBox;
|
QMessageBox msgBox;
|
||||||
msgBox.setWindowTitle(tr("About to install Tribunal after Bloodmoon"));
|
msgBox.setWindowTitle(tr("About to install Tribunal after Bloodmoon"));
|
||||||
|
@ -136,7 +136,7 @@ bool Wizard::ComponentSelectionPage::validatePage()
|
||||||
|
|
||||||
if (msgBox.clickedButton() == reinstallButton) {
|
if (msgBox.clickedButton() == reinstallButton) {
|
||||||
// Force reinstallation
|
// Force reinstallation
|
||||||
mWizard->mInstallations[path]->hasBloodmoon = false;
|
mWizard->mInstallations[path].hasBloodmoon = false;
|
||||||
QList<QListWidgetItem*> items = componentsList->findItems(QLatin1String("Bloodmoon"), Qt::MatchStartsWith);
|
QList<QListWidgetItem*> items = componentsList->findItems(QLatin1String("Bloodmoon"), Qt::MatchStartsWith);
|
||||||
|
|
||||||
foreach (QListWidgetItem *item, items) {
|
foreach (QListWidgetItem *item, items) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ bool Wizard::ExistingInstallationPage::validatePage()
|
||||||
// Or failed to be detected due to the target being a symlink
|
// Or failed to be detected due to the target being a symlink
|
||||||
|
|
||||||
QString path(field(QLatin1String("installation.path")).toString());
|
QString path(field(QLatin1String("installation.path")).toString());
|
||||||
QFile file(mWizard->mInstallations[path]->iniPath);
|
QFile file(mWizard->mInstallations[path].iniPath);
|
||||||
|
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
QMessageBox msgBox;
|
QMessageBox msgBox;
|
||||||
|
@ -78,7 +78,7 @@ bool Wizard::ExistingInstallationPage::validatePage()
|
||||||
|
|
||||||
// A proper Morrowind.ini was selected, set it
|
// A proper Morrowind.ini was selected, set it
|
||||||
QFileInfo info(iniFile);
|
QFileInfo info(iniFile);
|
||||||
mWizard->mInstallations[path]->iniPath = info.absoluteFilePath();
|
mWizard->mInstallations[path].iniPath = info.absoluteFilePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -36,11 +36,11 @@ void Wizard::InstallationPage::initializePage()
|
||||||
installProgressBar->setMaximum((components.count() * 100));
|
installProgressBar->setMaximum((components.count() * 100));
|
||||||
} else {
|
} else {
|
||||||
if (components.contains(QLatin1String("Tribunal"))
|
if (components.contains(QLatin1String("Tribunal"))
|
||||||
&& !mWizard->mInstallations[path]->hasTribunal)
|
&& !mWizard->mInstallations[path].hasTribunal)
|
||||||
installProgressBar->setMaximum(100);
|
installProgressBar->setMaximum(100);
|
||||||
|
|
||||||
if (components.contains(QLatin1String("Bloodmoon"))
|
if (components.contains(QLatin1String("Bloodmoon"))
|
||||||
&& !mWizard->mInstallations[path]->hasBloodmoon)
|
&& !mWizard->mInstallations[path].hasBloodmoon)
|
||||||
installProgressBar->setMaximum(installProgressBar->maximum() + 100);
|
installProgressBar->setMaximum(installProgressBar->maximum() + 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,15 +104,15 @@ void Wizard::InstallationPage::startInstallation()
|
||||||
mUnshield->setInstallComponent(Wizard::Component_Morrowind, false);
|
mUnshield->setInstallComponent(Wizard::Component_Morrowind, false);
|
||||||
|
|
||||||
if (components.contains(QLatin1String("Tribunal"))
|
if (components.contains(QLatin1String("Tribunal"))
|
||||||
&& !mWizard->mInstallations[path]->hasTribunal)
|
&& !mWizard->mInstallations[path].hasTribunal)
|
||||||
mUnshield->setInstallComponent(Wizard::Component_Tribunal, true);
|
mUnshield->setInstallComponent(Wizard::Component_Tribunal, true);
|
||||||
|
|
||||||
if (components.contains(QLatin1String("Bloodmoon"))
|
if (components.contains(QLatin1String("Bloodmoon"))
|
||||||
&& !mWizard->mInstallations[path]->hasBloodmoon)
|
&& !mWizard->mInstallations[path].hasBloodmoon)
|
||||||
mUnshield->setInstallComponent(Wizard::Component_Bloodmoon, true);
|
mUnshield->setInstallComponent(Wizard::Component_Bloodmoon, true);
|
||||||
|
|
||||||
// Set the location of the Morrowind.ini to update
|
// Set the location of the Morrowind.ini to update
|
||||||
mUnshield->setIniPath(mWizard->mInstallations[path]->iniPath);
|
mUnshield->setIniPath(mWizard->mInstallations[path].iniPath);
|
||||||
mUnshield->setupSettings();
|
mUnshield->setupSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include "mainwizard.hpp"
|
#include "mainwizard.hpp"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
Wizard::LanguageSelectionPage::LanguageSelectionPage(MainWizard *wizard) :
|
Wizard::LanguageSelectionPage::LanguageSelectionPage(MainWizard *wizard) :
|
||||||
QWizardPage(wizard),
|
QWizardPage(wizard),
|
||||||
mWizard(wizard)
|
mWizard(wizard)
|
||||||
|
@ -27,18 +29,22 @@ void Wizard::LanguageSelectionPage::initializePage()
|
||||||
|
|
||||||
int Wizard::LanguageSelectionPage::nextId() const
|
int Wizard::LanguageSelectionPage::nextId() const
|
||||||
{
|
{
|
||||||
// Check if we have to install something
|
if (field(QLatin1String("installation.new")).toBool() == true) {
|
||||||
QString path(field(QLatin1String("installation.path")).toString());
|
|
||||||
|
|
||||||
if (path.isEmpty())
|
|
||||||
return MainWizard::Page_ComponentSelection;
|
return MainWizard::Page_ComponentSelection;
|
||||||
|
|
||||||
if (mWizard->mInstallations[path]->hasMorrowind == true &&
|
|
||||||
mWizard->mInstallations[path]->hasTribunal == true &&
|
|
||||||
mWizard->mInstallations[path]->hasBloodmoon == true)
|
|
||||||
{
|
|
||||||
return MainWizard::Page_Import;
|
|
||||||
} else {
|
} else {
|
||||||
return MainWizard::Page_ComponentSelection;
|
QString path(field(QLatin1String("installation.path")).toString());
|
||||||
|
|
||||||
|
if (path.isEmpty())
|
||||||
|
return MainWizard::Page_ComponentSelection;
|
||||||
|
|
||||||
|
// Check if we have to install something
|
||||||
|
if (mWizard->mInstallations[path].hasMorrowind == true &&
|
||||||
|
mWizard->mInstallations[path].hasTribunal == true &&
|
||||||
|
mWizard->mInstallations[path].hasBloodmoon == true)
|
||||||
|
{
|
||||||
|
return MainWizard::Page_Import;
|
||||||
|
} else {
|
||||||
|
return MainWizard::Page_ComponentSelection;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,23 +246,29 @@ void Wizard::MainWizard::runSettingsImporter()
|
||||||
arguments.append(QLatin1String("--cfg"));
|
arguments.append(QLatin1String("--cfg"));
|
||||||
arguments.append(userPath + QLatin1String("openmw.cfg"));
|
arguments.append(userPath + QLatin1String("openmw.cfg"));
|
||||||
|
|
||||||
ProcessInvoker invoker(this);
|
ProcessInvoker *invoker = new ProcessInvoker(this);
|
||||||
|
|
||||||
if (!invoker.startProcess(QLatin1String("mwiniimport"), arguments, false))
|
if (!invoker->startProcess(QLatin1String("mwiniimport"), arguments, false))
|
||||||
return qApp->quit();;
|
return qApp->quit();;
|
||||||
|
|
||||||
|
connect(invoker->getProcess(), SIGNAL(started()),
|
||||||
|
this, SLOT(importerStarted()));
|
||||||
|
|
||||||
|
connect(invoker->getProcess(), SIGNAL(finished(int,QProcess::ExitStatus)),
|
||||||
|
this, SLOT(importerFinished(int,QProcess::ExitStatus)));
|
||||||
|
|
||||||
// Re-read the game settings
|
// Re-read the game settings
|
||||||
setupGameSettings();
|
// setupGameSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wizard::MainWizard::addInstallation(const QString &path)
|
void Wizard::MainWizard::addInstallation(const QString &path)
|
||||||
{
|
{
|
||||||
qDebug() << "add installation in: " << path;
|
qDebug() << "add installation in: " << path;
|
||||||
Installation* install = new Installation();
|
Installation install;// = new Installation();
|
||||||
|
|
||||||
install->hasMorrowind = findFiles(QLatin1String("Morrowind"), path);
|
install.hasMorrowind = findFiles(QLatin1String("Morrowind"), path);
|
||||||
install->hasTribunal = findFiles(QLatin1String("Tribunal"), path);
|
install.hasTribunal = findFiles(QLatin1String("Tribunal"), path);
|
||||||
install->hasBloodmoon = findFiles(QLatin1String("Bloodmoon"), path);
|
install.hasBloodmoon = findFiles(QLatin1String("Bloodmoon"), path);
|
||||||
|
|
||||||
// Try to autodetect the Morrowind.ini location
|
// Try to autodetect the Morrowind.ini location
|
||||||
QDir dir(path);
|
QDir dir(path);
|
||||||
|
@ -276,7 +282,7 @@ void Wizard::MainWizard::addInstallation(const QString &path)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file.exists())
|
if (file.exists())
|
||||||
install->iniPath = file.fileName();
|
install.iniPath = file.fileName();
|
||||||
|
|
||||||
mInstallations.insert(QDir::toNativeSeparators(path), install);
|
mInstallations.insert(QDir::toNativeSeparators(path), install);
|
||||||
|
|
||||||
|
@ -301,6 +307,21 @@ void Wizard::MainWizard::setupPages()
|
||||||
setStartId(Page_Intro);
|
setStartId(Page_Intro);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Wizard::MainWizard::importerStarted()
|
||||||
|
{
|
||||||
|
qDebug() << "importer started!";
|
||||||
|
}
|
||||||
|
|
||||||
|
void Wizard::MainWizard::importerFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||||
|
{
|
||||||
|
qDebug() << "importer finished!";
|
||||||
|
if (exitCode != 0 || exitStatus == QProcess::CrashExit)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Re-read the settings
|
||||||
|
setupGameSettings();
|
||||||
|
}
|
||||||
|
|
||||||
void Wizard::MainWizard::accept()
|
void Wizard::MainWizard::accept()
|
||||||
{
|
{
|
||||||
writeSettings();
|
writeSettings();
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef MAINWIZARD_HPP
|
#ifndef MAINWIZARD_HPP
|
||||||
#define MAINWIZARD_HPP
|
#define MAINWIZARD_HPP
|
||||||
|
|
||||||
|
#include <QProcess>
|
||||||
#include <QWizard>
|
#include <QWizard>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
|
@ -41,7 +42,7 @@ namespace Wizard
|
||||||
void addInstallation(const QString &path);
|
void addInstallation(const QString &path);
|
||||||
void runSettingsImporter();
|
void runSettingsImporter();
|
||||||
|
|
||||||
QMap<QString, Installation*> mInstallations;
|
QMap<QString, Installation> mInstallations;
|
||||||
|
|
||||||
Files::ConfigurationManager mCfgMgr;
|
Files::ConfigurationManager mCfgMgr;
|
||||||
|
|
||||||
|
@ -66,6 +67,10 @@ namespace Wizard
|
||||||
QTextStream *mLog;
|
QTextStream *mLog;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
void importerStarted();
|
||||||
|
void importerFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
|
||||||
void accept();
|
void accept();
|
||||||
void reject();
|
void reject();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue