#include "installationtargetpage.hpp" #include #include #include #include #include #include #include "mainwizard.hpp" Wizard::InstallationTargetPage::InstallationTargetPage(QWidget* parent, const Files::ConfigurationManager& cfg) : QWizardPage(parent) , mCfgMgr(cfg) { setupUi(this); connect(browseButton, &QPushButton::clicked, this, &InstallationTargetPage::browseButtonClicked); folderIcon->setIcon(Misc::ScalableIcon::load(":folder")); registerField(QStringLiteral("installation.path*"), targetLineEdit); } void Wizard::InstallationTargetPage::initializePage() { const QDir dir(Files::pathToQString(mCfgMgr.getUserDataPath() / "basedata")); targetLineEdit->setText(QDir::toNativeSeparators(dir.absolutePath())); } bool Wizard::InstallationTargetPage::validatePage() { const QString path(field(QStringLiteral("installation.path")).toString()); qDebug() << "Validating path: " << path; if (!QFile::exists(path)) { QDir dir; if (!dir.mkpath(path)) { QMessageBox msgBox(this); msgBox.setWindowTitle(tr("Error creating destination")); msgBox.setIcon(QMessageBox::Warning); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setText( tr("

Could not create the destination directory

" "

Please make sure you have the right permissions " "and try again, or specify a different location.

")); msgBox.exec(); return false; } } const QFileInfo info(path); if (!info.isWritable()) { QMessageBox msgBox(this); msgBox.setWindowTitle(tr("Insufficient permissions")); msgBox.setIcon(QMessageBox::Warning); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setText( tr("

Could not write to the destination directory

" "

Please make sure you have the right permissions " "and try again, or specify a different location.

")); msgBox.exec(); return false; } if (MainWizard::findFiles(QStringLiteral("Morrowind"), path)) { QMessageBox msgBox(this); msgBox.setWindowTitle(tr("Destination not empty")); msgBox.setIcon(QMessageBox::Warning); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setText( tr("

The destination directory is not empty

" "

An existing Morrowind installation is present in the specified location.

" "

Please specify a different location, or go back and select the location as an existing " "installation.

")); msgBox.exec(); return false; } return true; } void Wizard::InstallationTargetPage::browseButtonClicked() { const QString selectedPath = QFileDialog::getExistingDirectory(this, tr("Select where to install Morrowind"), QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); qDebug() << selectedPath; const QFileInfo info(selectedPath); if (info.exists() && info.isWritable()) targetLineEdit->setText(info.absoluteFilePath()); } int Wizard::InstallationTargetPage::nextId() const { return MainWizard::Page_LanguageSelection; }