forked from mirror/openmw-tes3mp
Improved existing installation handling
This commit is contained in:
parent
ae5f783a16
commit
9e5e19f9cb
4 changed files with 60 additions and 50 deletions
|
@ -14,6 +14,12 @@ Wizard::ExistingInstallationPage::ExistingInstallationPage(MainWizard *wizard) :
|
||||||
{
|
{
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
|
||||||
|
mEmptyItem = new QListWidgetItem(tr("No existing installations detected"));
|
||||||
|
mEmptyItem->setFlags(Qt::NoItemFlags);
|
||||||
|
installationsList->addItem(mEmptyItem);
|
||||||
|
mEmptyItem->setHidden(true);
|
||||||
|
|
||||||
|
|
||||||
connect(installationsList, SIGNAL(currentTextChanged(QString)),
|
connect(installationsList, SIGNAL(currentTextChanged(QString)),
|
||||||
this, SLOT(textChanged(QString)));
|
this, SLOT(textChanged(QString)));
|
||||||
|
|
||||||
|
@ -21,51 +27,17 @@ Wizard::ExistingInstallationPage::ExistingInstallationPage(MainWizard *wizard) :
|
||||||
this, SIGNAL(completeChanged()));
|
this, SIGNAL(completeChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wizard::ExistingInstallationPage::on_browseButton_clicked()
|
|
||||||
{
|
|
||||||
QString selectedFile = QFileDialog::getOpenFileName(
|
|
||||||
this,
|
|
||||||
tr("Select master file"),
|
|
||||||
QDir::currentPath(),
|
|
||||||
QString(tr("Morrowind master file (*.esm)")),
|
|
||||||
NULL,
|
|
||||||
QFileDialog::DontResolveSymlinks);
|
|
||||||
|
|
||||||
QFileInfo info(selectedFile);
|
|
||||||
if (!info.exists())
|
|
||||||
return;
|
|
||||||
|
|
||||||
QString path(QDir::toNativeSeparators(info.absolutePath()));
|
|
||||||
QList<QListWidgetItem*> items = installationsList->findItems(path, Qt::MatchExactly);
|
|
||||||
|
|
||||||
if (items.isEmpty()) {
|
|
||||||
// Path is not yet in the list, add it
|
|
||||||
mWizard->addInstallation(path);
|
|
||||||
|
|
||||||
QListWidgetItem *item = new QListWidgetItem(path);
|
|
||||||
installationsList->addItem(item);
|
|
||||||
installationsList->setCurrentItem(item); // Select it too
|
|
||||||
} else {
|
|
||||||
installationsList->setCurrentItem(items.first());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Wizard::ExistingInstallationPage::textChanged(const QString &text)
|
|
||||||
{
|
|
||||||
// Set the installation path manually, as registerField doesn't work
|
|
||||||
// Because it doesn't accept two widgets operating on a single field
|
|
||||||
if (!text.isEmpty())
|
|
||||||
mWizard->setField(QLatin1String("installation.path"), text);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Wizard::ExistingInstallationPage::initializePage()
|
void Wizard::ExistingInstallationPage::initializePage()
|
||||||
{
|
{
|
||||||
QStringList paths(mWizard->mInstallations.keys());
|
QStringList paths(mWizard->mInstallations.keys());
|
||||||
|
|
||||||
if (paths.isEmpty())
|
if (paths.isEmpty()) {
|
||||||
|
mEmptyItem->setHidden(false);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make to clear list before adding items
|
||||||
|
// to prevent duplicates when going back and forth between pages
|
||||||
installationsList->clear();
|
installationsList->clear();
|
||||||
|
|
||||||
foreach (const QString &path, paths) {
|
foreach (const QString &path, paths) {
|
||||||
|
@ -119,6 +91,51 @@ bool Wizard::ExistingInstallationPage::validatePage()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Wizard::ExistingInstallationPage::on_browseButton_clicked()
|
||||||
|
{
|
||||||
|
QString selectedFile = QFileDialog::getOpenFileName(
|
||||||
|
this,
|
||||||
|
tr("Select master file"),
|
||||||
|
QDir::currentPath(),
|
||||||
|
QString(tr("Morrowind master file (*.esm)")),
|
||||||
|
NULL,
|
||||||
|
QFileDialog::DontResolveSymlinks);
|
||||||
|
|
||||||
|
QFileInfo info(selectedFile);
|
||||||
|
|
||||||
|
if (!info.exists())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!mWizard->findFiles(QLatin1String("Morrowind"), info.absolutePath()))
|
||||||
|
return; // No valid Morrowind installation found
|
||||||
|
|
||||||
|
QString path(QDir::toNativeSeparators(info.absolutePath()));
|
||||||
|
QList<QListWidgetItem*> items = installationsList->findItems(path, Qt::MatchExactly);
|
||||||
|
|
||||||
|
if (items.isEmpty()) {
|
||||||
|
// Path is not yet in the list, add it
|
||||||
|
mWizard->addInstallation(path);
|
||||||
|
|
||||||
|
// Hide the default item
|
||||||
|
mEmptyItem->setHidden(true);
|
||||||
|
|
||||||
|
QListWidgetItem *item = new QListWidgetItem(path);
|
||||||
|
installationsList->addItem(item);
|
||||||
|
installationsList->setCurrentItem(item); // Select it too
|
||||||
|
} else {
|
||||||
|
installationsList->setCurrentItem(items.first());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Wizard::ExistingInstallationPage::textChanged(const QString &text)
|
||||||
|
{
|
||||||
|
// Set the installation path manually, as registerField doesn't work
|
||||||
|
// Because it doesn't accept two widgets operating on a single field
|
||||||
|
if (!text.isEmpty())
|
||||||
|
mWizard->setField(QLatin1String("installation.path"), text);
|
||||||
|
}
|
||||||
|
|
||||||
bool Wizard::ExistingInstallationPage::isComplete() const
|
bool Wizard::ExistingInstallationPage::isComplete() const
|
||||||
{
|
{
|
||||||
if (installationsList->selectionModel()->hasSelection()) {
|
if (installationsList->selectionModel()->hasSelection()) {
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define EXISTINGINSTALLATIONPAGE_HPP
|
#define EXISTINGINSTALLATIONPAGE_HPP
|
||||||
|
|
||||||
#include <QWizardPage>
|
#include <QWizardPage>
|
||||||
|
#include <QListWidgetItem>
|
||||||
|
|
||||||
#include "ui_existinginstallationpage.h"
|
#include "ui_existinginstallationpage.h"
|
||||||
|
|
||||||
|
@ -26,6 +27,8 @@ namespace Wizard
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWizard *mWizard;
|
MainWizard *mWizard;
|
||||||
|
QListWidgetItem *mEmptyItem;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initializePage();
|
void initializePage();
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
namespace Wizard
|
namespace Wizard
|
||||||
{
|
{
|
||||||
|
|
||||||
class MainWizard : public QWizard
|
class MainWizard : public QWizard
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
|
@ -28,16 +28,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QListWidget" name="installationsList">
|
<widget class="QListWidget" name="installationsList"/>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>No existing installations detected</string>
|
|
||||||
</property>
|
|
||||||
<property name="flags">
|
|
||||||
<set>NoItemFlags</set>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
|
Loading…
Reference in a new issue