File: installationtargetpage.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (113 lines) | stat: -rw-r--r-- 3,641 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "installationtargetpage.hpp"

#include <string>

#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>

#include <components/files/configurationmanager.hpp>
#include <components/files/conversion.hpp>
#include <components/misc/scalableicon.hpp>

#include "mainwizard.hpp"

Wizard::InstallationTargetPage::InstallationTargetPage(QWidget* parent, const Files::ConfigurationManager& cfg)
    : QWizardPage(parent)
    , mCfgMgr(cfg)
{
    mWizard = qobject_cast<MainWizard*>(parent);

    setupUi(this);

    folderIcon->setIcon(Misc::ScalableIcon::load(":folder"));

    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()
{
    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());
}

int Wizard::InstallationTargetPage::nextId() const
{
    return MainWizard::Page_LanguageSelection;
}