1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-19 19:53:53 +00:00
openmw/apps/wizard/installationtargetpage.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

114 lines
3.6 KiB
C++
Raw Normal View History

2013-12-08 20:35:57 +00:00
#include "installationtargetpage.hpp"
2022-10-10 11:41:36 +00:00
#include <string>
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
2022-10-10 11:41:36 +00:00
#include <components/files/configurationmanager.hpp>
#include <components/files/conversion.hpp>
2024-05-01 04:30:20 +00:00
#include <components/misc/scalableicon.hpp>
2013-12-08 21:58:29 +00:00
#include "mainwizard.hpp"
Wizard::InstallationTargetPage::InstallationTargetPage(QWidget* parent, const Files::ConfigurationManager& cfg)
: QWizardPage(parent)
, mCfgMgr(cfg)
2013-12-08 20:35:57 +00:00
{
mWizard = qobject_cast<MainWizard*>(parent);
2013-12-08 20:35:57 +00:00
setupUi(this);
2024-05-01 04:30:20 +00:00
folderIcon->setIcon(Misc::ScalableIcon::load(":folder"));
2024-04-23 07:49:33 +00:00
registerField(QLatin1String("installation.path*"), targetLineEdit);
}
void Wizard::InstallationTargetPage::initializePage()
{
QString path(QFile::decodeName(Files::pathToUnicodeString(mCfgMgr.getUserDataPath()).c_str()));
path.append(QDir::separator() + QLatin1String("basedata"));
QDir dir(path);
targetLineEdit->setText(QDir::toNativeSeparators(dir.absolutePath()));
}
bool Wizard::InstallationTargetPage::validatePage()
{
2014-02-18 11:44:27 +00:00
QString path(field(QLatin1String("installation.path")).toString());
qDebug() << "Validating path: " << path;
if (!QFile::exists(path))
{
QDir dir;
if (!dir.mkpath(path))
{
QMessageBox msgBox;
msgBox.setWindowTitle(tr("Error creating destination"));
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setText(
tr("<html><head/><body><p><b>Could not create the destination directory</b></p>"
"<p>Please make sure you have the right permissions "
"and try again, or specify a different location.</p></body></html>"));
msgBox.exec();
return false;
}
}
QFileInfo info(path);
if (!info.isWritable())
{
QMessageBox msgBox;
msgBox.setWindowTitle(tr("Insufficient permissions"));
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setText(
tr("<html><head/><body><p><b>Could not write to the destination directory</b></p>"
"<p>Please make sure you have the right permissions "
"and try again, or specify a different location.</p></body></html>"));
msgBox.exec();
return false;
}
if (mWizard->findFiles(QLatin1String("Morrowind"), path))
{
QMessageBox msgBox;
msgBox.setWindowTitle(tr("Destination not empty"));
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setText(
tr("<html><head/><body><p><b>The destination directory is not empty</b></p>"
"<p>An existing Morrowind installation is present in the specified location.</p>"
"<p>Please specify a different location, or go back and select the location as an existing "
"installation.</p></body></html>"));
msgBox.exec();
return false;
}
return true;
}
void Wizard::InstallationTargetPage::on_browseButton_clicked()
{
QString selectedPath = QFileDialog::getExistingDirectory(this, tr("Select where to install Morrowind"),
QDir::homePath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
qDebug() << selectedPath;
QFileInfo info(selectedPath);
if (!info.exists())
return;
if (info.isWritable())
targetLineEdit->setText(info.absoluteFilePath());
2013-12-08 20:35:57 +00:00
}
2013-12-08 21:58:29 +00:00
int Wizard::InstallationTargetPage::nextId() const
{
return MainWizard::Page_LanguageSelection;
2013-12-08 21:58:29 +00:00
}