From 9e5e19f9cb6387f0d9f50bfe820ddc0e2ffcebd4 Mon Sep 17 00:00:00 2001 From: pvdk Date: Mon, 17 Mar 2014 18:28:05 +0100 Subject: [PATCH] Improved existing installation handling --- apps/wizard/existinginstallationpage.cpp | 95 ++++++++++++--------- apps/wizard/existinginstallationpage.hpp | 3 + apps/wizard/mainwizard.hpp | 1 - files/ui/wizard/existinginstallationpage.ui | 11 +-- 4 files changed, 60 insertions(+), 50 deletions(-) diff --git a/apps/wizard/existinginstallationpage.cpp b/apps/wizard/existinginstallationpage.cpp index 91d4f2df1..56743eb44 100644 --- a/apps/wizard/existinginstallationpage.cpp +++ b/apps/wizard/existinginstallationpage.cpp @@ -14,6 +14,12 @@ Wizard::ExistingInstallationPage::ExistingInstallationPage(MainWizard *wizard) : { 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)), this, SLOT(textChanged(QString))); @@ -21,51 +27,17 @@ Wizard::ExistingInstallationPage::ExistingInstallationPage(MainWizard *wizard) : 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 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() { QStringList paths(mWizard->mInstallations.keys()); - if (paths.isEmpty()) + if (paths.isEmpty()) { + mEmptyItem->setHidden(false); return; + } + // Make to clear list before adding items + // to prevent duplicates when going back and forth between pages installationsList->clear(); foreach (const QString &path, paths) { @@ -119,6 +91,51 @@ bool Wizard::ExistingInstallationPage::validatePage() 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 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 { if (installationsList->selectionModel()->hasSelection()) { diff --git a/apps/wizard/existinginstallationpage.hpp b/apps/wizard/existinginstallationpage.hpp index d243bb868..04385893a 100644 --- a/apps/wizard/existinginstallationpage.hpp +++ b/apps/wizard/existinginstallationpage.hpp @@ -2,6 +2,7 @@ #define EXISTINGINSTALLATIONPAGE_HPP #include +#include #include "ui_existinginstallationpage.h" @@ -26,6 +27,8 @@ namespace Wizard private: MainWizard *mWizard; + QListWidgetItem *mEmptyItem; + protected: void initializePage(); diff --git a/apps/wizard/mainwizard.hpp b/apps/wizard/mainwizard.hpp index 962571ac8..f55709bad 100644 --- a/apps/wizard/mainwizard.hpp +++ b/apps/wizard/mainwizard.hpp @@ -9,7 +9,6 @@ namespace Wizard { - class MainWizard : public QWizard { Q_OBJECT diff --git a/files/ui/wizard/existinginstallationpage.ui b/files/ui/wizard/existinginstallationpage.ui index b887fb06c..921b2eb2a 100644 --- a/files/ui/wizard/existinginstallationpage.ui +++ b/files/ui/wizard/existinginstallationpage.ui @@ -28,16 +28,7 @@ - - - - No existing installations detected - - - NoItemFlags - - - +