Added "install" wizard page for selecting pak0.pk3 location and Q3A destination directory.

This commit is contained in:
Jonathan Young 2014-05-14 19:03:18 +10:00
parent 7bbffd9cfc
commit 37b0276f64
12 changed files with 201 additions and 18 deletions

View file

@ -4,6 +4,7 @@
#include "installwizard_installtype.h"
#include "installwizard_locate.h"
#include "installwizard_eula.h"
#include "installwizard_install.h"
#include "installwizard_patch.h"
#include "installwizard_finished.h"
#include "settings.h"
@ -30,6 +31,7 @@ InstallWizard::InstallWizard(QWidget *parent, Settings *settings) :
setPage(Page_Locate, new InstallWizard_LocatePage(this, settings));
#endif
setPage(Page_Install, new InstallWizard_Install());
setPage(Page_Eula, new InstallWizard_Eula());
setPage(Page_Patch, new InstallWizard_Patch());
setPage(Page_Finished, new InstallWizard_Finished());

View file

@ -22,6 +22,7 @@ public:
{
Page_InstallType,
Page_Locate,
Page_Install,
Page_Eula,
Page_Patch,
Page_Finished

View file

@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>Quake 3: Arena Install Wizard</string>
<string>Quake III Arena Install Wizard</string>
</property>
<property name="windowIcon">
<iconset resource="imgs.qrc">

70
installwizard_install.cpp Normal file
View file

@ -0,0 +1,70 @@
#include <QFileDialog>
#include <QFileInfo>
#include <QMessageBox>
#include "installwizard_install.h"
#include "ui_installwizard_install.h"
#include "installwizard.h"
InstallWizard_Install::InstallWizard_Install(QWidget *parent) :
QWizardPage(parent),
ui(new Ui::InstallWizard_Install)
{
ui->setupUi(this);
}
InstallWizard_Install::~InstallWizard_Install()
{
delete ui;
}
void InstallWizard_Install::initializePage()
{
#ifdef Q_OS_WIN32
// Use the same default install directory as the Q3A installer.
ui->txtDest->setText(QString(qgetenv("PROGRAMFILES").constData()) + QString("\\Quake III Arena"));
#endif
registerField("pak0*", ui->txtSource);
registerField("quake3Path*", ui->txtDest);
}
bool InstallWizard_Install::validatePage()
{
if (!QFileInfo::exists(ui->txtSource->text()))
{
QMessageBox::warning(wizard(), "Missing source", QString("Source file '%1' does not exist.").arg(ui->txtSource->text()));
return false;
}
return true;
}
bool InstallWizard_Install::isComplete() const
{
return !ui->txtSource->text().isEmpty() && !ui->txtDest->text().isEmpty();
}
int InstallWizard_Install::nextId() const
{
return InstallWizard::Page_Finished;
}
void InstallWizard_Install::on_btnBrowseSource_clicked()
{
const QString location = QFileDialog::getOpenFileName(wizard(), "Select pak0.pk3 location", QString(), "Quake III Arena Pak File (pak0.pk3)");
if (!location.isEmpty())
{
ui->txtSource->setText(location);
}
}
void InstallWizard_Install::on_btnBrowseDest_clicked()
{
const QString location = QFileDialog::getExistingDirectory(this, tr("Select Quake III Arena Location"), ui->txtDest->text());
if (!location.isEmpty())
{
ui->txtDest->setText(location);
}
}

31
installwizard_install.h Normal file
View file

@ -0,0 +1,31 @@
#ifndef INSTALLWIZARD_INSTALL_H
#define INSTALLWIZARD_INSTALL_H
#include <QWizardPage>
namespace Ui {
class InstallWizard_Install;
}
class InstallWizard_Install : public QWizardPage
{
Q_OBJECT
public:
explicit InstallWizard_Install(QWidget *parent = 0);
~InstallWizard_Install();
virtual void initializePage();
virtual bool validatePage();
virtual bool isComplete() const;
virtual int nextId() const;
private slots:
void on_btnBrowseSource_clicked();
void on_btnBrowseDest_clicked();
private:
Ui::InstallWizard_Install *ui;
};
#endif // INSTALLWIZARD_INSTALL_H

63
installwizard_install.ui Normal file
View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>InstallWizard_Install</class>
<widget class="QWizardPage" name="InstallWizard_Install">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>WizardPage</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Source (pak0.pk3):</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="txtSource"/>
</item>
<item>
<widget class="QPushButton" name="btnBrowseSource">
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Destination:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="txtDest"/>
</item>
<item>
<widget class="QPushButton" name="btnBrowseDest">
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -1,5 +1,6 @@
#include "installwizard_installtype.h"
#include "ui_installwizard_installtype.h"
#include "installwizard.h"
InstallWizard_InstallType::InstallWizard_InstallType(QWidget *parent) :
QWizardPage(parent),
@ -9,7 +10,7 @@ InstallWizard_InstallType::InstallWizard_InstallType(QWidget *parent) :
#ifndef Q_OS_WIN32
ui->rbLocate->setEnabled(false);
ui->rbCD->setChecked(true);
ui->rbInstall->setChecked(true);
#endif
}
@ -17,3 +18,21 @@ InstallWizard_InstallType::~InstallWizard_InstallType()
{
delete ui;
}
int InstallWizard_InstallType::nextId() const
{
if (ui->rbInstall->isChecked())
{
return InstallWizard::Page_Install;
}
#ifdef Q_OS_WIN32
else if (ui->rbLocate->isChecked())
{
return InstallWizard::Page_Locate;
}
#endif
// Shouldn't happen.
Q_ASSERT(false);
return InstallWizard::Page_Finished;
}

View file

@ -14,6 +14,7 @@ class InstallWizard_InstallType : public QWizardPage
public:
explicit InstallWizard_InstallType(QWidget *parent = 0);
~InstallWizard_InstallType();
virtual int nextId() const;
private:
Ui::InstallWizard_InstallType *ui;

View file

@ -20,7 +20,7 @@
<item>
<widget class="QRadioButton" name="rbLocate">
<property name="text">
<string>Locate an existing Quake 3: Arena installation</string>
<string>Locate an existing Quake III Arena installation</string>
</property>
<property name="checked">
<bool>true</bool>
@ -28,16 +28,9 @@
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbCD">
<widget class="QRadioButton" name="rbInstall">
<property name="text">
<string>Install from CD</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbSteam">
<property name="text">
<string>Install from Steam</string>
<string>Install from CD or Steam</string>
</property>
</widget>
</item>

View file

@ -13,7 +13,6 @@ InstallWizard_LocatePage::InstallWizard_LocatePage(QWidget *parent, Settings *se
isQuake3PatchRequired(false)
{
ui->setupUi(this);
registerField("quake3Path*", ui->txtLocation);
}
InstallWizard_LocatePage::~InstallWizard_LocatePage()
@ -23,12 +22,13 @@ InstallWizard_LocatePage::~InstallWizard_LocatePage()
void InstallWizard_LocatePage::initializePage()
{
registerField("quake3Path*", ui->txtLocation);
ui->txtLocation->setText(settings->getQuakePath());
}
void InstallWizard_LocatePage::on_btnBrowse_clicked()
{
const QString location = QFileDialog::getExistingDirectory(this, tr("Select Quake 3: Arena Location"), settings->getQuakePath());
const QString location = QFileDialog::getExistingDirectory(this, tr("Select Quake III Arena Location"), settings->getQuakePath());
if (!location.isEmpty())
{

View file

@ -14,7 +14,7 @@
<string>WizardPage</string>
</property>
<property name="title">
<string>Locate Quake 3: Arena</string>
<string>Locate Quake III Arena</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">

View file

@ -20,7 +20,8 @@ SOURCES += main.cpp\
installwizard_installtype.cpp \
installwizard_finished.cpp \
installwizard_patch.cpp \
installwizard_eula.cpp
installwizard_eula.cpp \
installwizard_install.cpp
HEADERS += mainwindow.h \
settings.h \
@ -29,7 +30,8 @@ HEADERS += mainwindow.h \
installwizard_installtype.h \
installwizard_finished.h \
installwizard_patch.h \
installwizard_eula.h
installwizard_eula.h \
installwizard_install.h
FORMS += mainwindow.ui \
installwizard.ui \
@ -37,7 +39,8 @@ FORMS += mainwindow.ui \
installwizard_installtype.ui \
installwizard_finished.ui \
installwizard_patch.ui \
installwizard_eula.ui
installwizard_eula.ui \
installwizard_install.ui
OTHER_FILES += \
README.md \