mirror of
https://github.com/OpenMW/openmw.git
synced 2026-06-29 09:09:42 -04:00
116 lines
4.2 KiB
C++
116 lines
4.2 KiB
C++
#include "componentselectionpage.hpp"
|
|
|
|
#include <QMessageBox>
|
|
#include <QPushButton>
|
|
|
|
#include "mainwizard.hpp"
|
|
|
|
Wizard::ComponentSelectionPage::ComponentSelectionPage(QWidget* parent)
|
|
: QWizardPage(parent)
|
|
{
|
|
mWizard = qobject_cast<MainWizard*>(parent);
|
|
|
|
setupUi(this);
|
|
|
|
setCommitPage(true);
|
|
setButtonText(QWizard::CommitButton, tr("&Install"));
|
|
|
|
registerField(QStringLiteral("installation.installMorrowind"), morrowindCheckbox);
|
|
registerField(QStringLiteral("installation.installTribunal"), tribunalCheckbox);
|
|
registerField(QStringLiteral("installation.installBloodmoon"), bloodmoonCheckbox);
|
|
|
|
connect(morrowindCheckbox, &QCheckBox::toggled, this, &ComponentSelectionPage::updateButton);
|
|
connect(tribunalCheckbox, &QCheckBox::toggled, this, &ComponentSelectionPage::updateButton);
|
|
connect(bloodmoonCheckbox, &QCheckBox::toggled, this, &ComponentSelectionPage::updateButton);
|
|
}
|
|
|
|
void Wizard::ComponentSelectionPage::updateButton()
|
|
{
|
|
if (field(QStringLiteral("installation.retailDisc")).toBool())
|
|
return;
|
|
|
|
if (!morrowindCheckbox->isChecked() && !tribunalCheckbox->isChecked() && !bloodmoonCheckbox->isChecked())
|
|
{
|
|
setCommitPage(false);
|
|
setButtonText(QWizard::NextButton, tr("&Skip"));
|
|
}
|
|
else
|
|
{
|
|
setCommitPage(true);
|
|
}
|
|
}
|
|
|
|
void Wizard::ComponentSelectionPage::initializePage()
|
|
{
|
|
const bool retailDisc = field(QStringLiteral("installation.retailDisc")).toBool();
|
|
|
|
bool hasMorrowind = false;
|
|
bool hasTribunal = false;
|
|
bool hasBloodmoon = false;
|
|
if (!retailDisc)
|
|
{
|
|
const QString path = field(QStringLiteral("installation.path")).toString();
|
|
const MainWizard::Installation& installation = mWizard->mInstallations[path];
|
|
hasMorrowind = installation.hasMorrowind;
|
|
hasTribunal = installation.hasTribunal;
|
|
hasBloodmoon = installation.hasBloodmoon;
|
|
}
|
|
|
|
morrowindCheckbox->setText(hasMorrowind ? tr("Morrowind\t\t(installed)") : tr("Morrowind"));
|
|
morrowindCheckbox->setChecked(!hasMorrowind);
|
|
morrowindCheckbox->setEnabled(!hasMorrowind && !retailDisc);
|
|
tribunalCheckbox->setText(hasTribunal ? tr("Tribunal\t\t(installed)") : tr("Tribunal"));
|
|
tribunalCheckbox->setChecked(!hasTribunal);
|
|
tribunalCheckbox->setEnabled(!hasTribunal);
|
|
bloodmoonCheckbox->setText(hasBloodmoon ? tr("Bloodmoon\t\t(installed)") : tr("Bloodmoon"));
|
|
bloodmoonCheckbox->setChecked(!hasBloodmoon);
|
|
bloodmoonCheckbox->setEnabled(!hasBloodmoon);
|
|
}
|
|
|
|
bool Wizard::ComponentSelectionPage::validatePage()
|
|
{
|
|
if (field(QStringLiteral("installation.retailDisc")).toBool())
|
|
return true;
|
|
|
|
const QString path = field(QStringLiteral("installation.path")).toString();
|
|
MainWizard::Installation& installation = mWizard->mInstallations[path];
|
|
|
|
bool installingTribunal = field(QStringLiteral("installation.installTribunal")).toBool();
|
|
bool installingBloodmoon = field(QStringLiteral("installation.installBloodmoon")).toBool();
|
|
|
|
if (installingTribunal && !installingBloodmoon && installation.hasBloodmoon)
|
|
{
|
|
QMessageBox msgBox(this);
|
|
msgBox.setWindowTitle(tr("About to install Tribunal after Bloodmoon"));
|
|
msgBox.setIcon(QMessageBox::Information);
|
|
msgBox.setStandardButtons(QMessageBox::Cancel);
|
|
msgBox.setText(
|
|
tr("<html><head/><body><p><b>You are about to install Tribunal</b></p>"
|
|
"<p>Bloodmoon is already installed on your computer.</p>"
|
|
"<p>However, it is recommended that you install Tribunal before Bloodmoon.</p>"
|
|
"<p>Would you like to re-install Bloodmoon?</p></body></html>"));
|
|
|
|
QAbstractButton* reinstallButton = msgBox.addButton(tr("Re-install &Bloodmoon"), QMessageBox::ActionRole);
|
|
msgBox.exec();
|
|
|
|
if (msgBox.clickedButton() == reinstallButton)
|
|
{
|
|
installation.hasBloodmoon = false;
|
|
bloodmoonCheckbox->setText(tr("Bloodmoon"));
|
|
bloodmoonCheckbox->setChecked(true);
|
|
bloodmoonCheckbox->setEnabled(true);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
int Wizard::ComponentSelectionPage::nextId() const
|
|
{
|
|
#ifdef OPENMW_USE_UNSHIELD
|
|
if (isCommitPage())
|
|
return MainWizard::Page_Installation;
|
|
#endif
|
|
return MainWizard::Page_Import;
|
|
}
|