summaryrefslogtreecommitdiff
path: root/wizard
diff options
context:
space:
mode:
authorAndreas Loibl <andreas@andreas-loibl.de>2011-03-17 05:07:10 +0100
committerAndreas Loibl <andreas@andreas-loibl.de>2011-03-17 05:07:10 +0100
commit00286a5db286e21a766b6af057052dc5d17561ad (patch)
tree7232dadf6dc3570705c3104fe0c000f480c7a0ee /wizard
downloadacritoxinstaller-00286a5db286e21a766b6af057052dc5d17561ad.zip
acritoxinstaller-00286a5db286e21a766b6af057052dc5d17561ad.tar.gz
Initial commit
Diffstat (limited to 'wizard')
-rw-r--r--wizard/bootloader.cpp74
-rw-r--r--wizard/bootloader.h28
-rw-r--r--wizard/bootloader.ui123
-rw-r--r--wizard/installation.cpp81
-rw-r--r--wizard/installation.h29
-rw-r--r--wizard/installation.ui47
-rw-r--r--wizard/network.cpp40
-rw-r--r--wizard/network.h25
-rw-r--r--wizard/network.ui108
-rw-r--r--wizard/partitions.cpp63
-rw-r--r--wizard/partitions.h27
-rw-r--r--wizard/partitions.ui27
-rw-r--r--wizard/partman.cpp55
-rw-r--r--wizard/partman.h27
-rw-r--r--wizard/partman.ui55
-rw-r--r--wizard/partmansel.cpp93
-rw-r--r--wizard/partmansel.h27
-rw-r--r--wizard/partmansel.ui123
-rw-r--r--wizard/rootpartition.cpp58
-rw-r--r--wizard/rootpartition.h27
-rw-r--r--wizard/rootpartition.ui152
-rw-r--r--wizard/rootpwd.cpp69
-rw-r--r--wizard/rootpwd.h26
-rw-r--r--wizard/rootpwd.ui178
-rw-r--r--wizard/summary.cpp66
-rw-r--r--wizard/summary.h28
-rw-r--r--wizard/summary.ui27
-rw-r--r--wizard/usercfg.cpp52
-rw-r--r--wizard/usercfg.h27
-rw-r--r--wizard/usercfg.ui143
-rw-r--r--wizard/userpwd.cpp69
-rw-r--r--wizard/userpwd.h26
-rw-r--r--wizard/userpwd.ui237
-rw-r--r--wizard/welcome.cpp35
-rw-r--r--wizard/welcome.h26
-rw-r--r--wizard/welcome.ui22
36 files changed, 2320 insertions, 0 deletions
diff --git a/wizard/bootloader.cpp b/wizard/bootloader.cpp
new file mode 100644
index 0000000..a066d05
--- /dev/null
+++ b/wizard/bootloader.cpp
@@ -0,0 +1,74 @@
+#include <QtGui>
+#include "bootloader.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpBootloader::wpBootloader(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+ connect(backend, SIGNAL(receivedDataLine(QString,QString)), this, SLOT(receivedDataLine(QString,QString)));
+ connect(backend, SIGNAL(finishedCommand(QString)), this, SLOT(backendFinishedCommand(QString)));
+ connect(bootloader, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+ connect(bootloaderTarget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+ //bootloader->setItemDelegate(new ListDelegate(this));
+}
+
+void wpBootloader::initializePage()
+{
+ clearPage();
+}
+
+void wpBootloader::clearPage()
+{
+ backend->exec("send_bootloaders");
+ bootloader->clear();
+ backend->exec("send_bootloader_targets");
+ bootloaderTarget->clear();
+}
+
+void wpBootloader::receivedDataLine(QString data, QString line)
+{
+ if(data == "bootloaders")
+ {
+ QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("system-run"), line);
+ bootloader->addItem(item);
+ }
+ if(data == "bootloader_targets")
+ {
+ QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line);
+ bootloaderTarget->addItem(item);
+ }
+}
+
+void wpBootloader::backendFinishedCommand(QString command)
+{
+ if(command == "send_bootloaders")
+ {
+ bootloader->setCurrentRow(0);
+ }
+ if(command == "send_bootloader_targets")
+ {
+ bootloaderTarget->setCurrentRow(0);
+ }
+}
+
+void wpBootloader::updateComplete()
+{
+ emit completeChanged();
+}
+
+bool wpBootloader::isComplete() const
+{
+ if(!bootloader->currentItem()) return false;
+ if(!bootloaderTarget->currentItem()) return false;
+ return true;
+}
+
+bool wpBootloader::validatePage()
+{
+ if(!isComplete()) return false;
+ backend->cfg("bootloader", bootloader->currentItem()->text().section(" ",0,0).toLower());
+ backend->cfg("bootloader_target", bootloaderTarget->currentItem()->text().section(" ",0,0).toLower());
+ return true;
+}
diff --git a/wizard/bootloader.h b/wizard/bootloader.h
new file mode 100644
index 0000000..87bcd4f
--- /dev/null
+++ b/wizard/bootloader.h
@@ -0,0 +1,28 @@
+#ifndef bootloader_H
+#define bootloader_H
+
+#include "ui_bootloader.h"
+#include "../backend.h"
+
+class wpBootloader : public QWizardPage, Ui::wpBootloader
+{
+ Q_OBJECT
+
+ public:
+ wpBootloader(QWidget *parent = 0);
+ void initializePage();
+ void clearPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+
+ private slots:
+ void receivedDataLine(QString data, QString line);
+ void backendFinishedCommand(QString command);
+ void updateComplete();
+
+};
+
+#endif // bootloader_H
diff --git a/wizard/bootloader.ui b/wizard/bootloader.ui
new file mode 100644
index 0000000..f7b39b5
--- /dev/null
+++ b/wizard/bootloader.ui
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpBootloader</class>
+ <widget class="QWizardPage" name="wpBootloader">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>540</width>
+ <height>400</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>Bootloader</string>
+ </property>
+ <property name="subTitle">
+ <string>Select a bootloader and its installation target</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QListWidget" name="bootloader">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" rowspan="2">
+ <widget class="QLabel" name="lblHelpText_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QListWidget" name="bootloaderTarget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/installation.cpp b/wizard/installation.cpp
new file mode 100644
index 0000000..452273f
--- /dev/null
+++ b/wizard/installation.cpp
@@ -0,0 +1,81 @@
+#include <QtGui>
+#include "installation.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpInstallation::wpInstallation(QWidget *parent) : QWizardPage(parent)
+{
+ setComplete(false);
+ setupUi(this);
+ backend = Backend::instance();
+// connect(backend, SIGNAL(processExited()), this, SLOT(WeAreDone()));
+ listWidget->setItemDelegate(new ListDelegate(this));
+ setCommitPage(true);
+// QListWidgetItem *item = new ListItem("Start", "Let's go!", "dialog-ok");
+// listWidget->addItem(item);
+}
+
+void wpInstallation::initializePage()
+{
+ listWidget->clear();
+ progressCompleted->setRange(0,12);
+ connect(backend, SIGNAL(receivedProgress(int)), this, SLOT(setProgress(int)));
+ connect(backend, SIGNAL(receivedCommand(QString,QString)), this, SLOT(receivedCommand(QString,QString)));
+ connect(backend, SIGNAL(finishedCommand(QString)), this, SLOT(finishedCommand(QString)));
+ backend->exec("do_install");
+}
+
+void wpInstallation::cleanupPage()
+{
+ initializePage();
+}
+
+void wpInstallation::setProgress(int percent)
+{
+ progressCurrent->setRange(0, 100);
+ progressCurrent->setValue(percent);
+}
+
+void wpInstallation::receivedCommand(QString command, QString args)
+{
+ if(command != "install_step") return;
+ QListWidgetItem *item = new ListItem(args, tr("TODO: use descriptive titles, descriptions and icons in this list..."), "acritoxinstaller");
+ listWidget->addItem(item);
+ listWidget->scrollToItem(item);
+ progressCompleted->setValue(progressCompleted->value()+1);
+ progressCurrent->reset();
+ progressCurrent->setRange(0,0);
+}
+
+void wpInstallation::finishedCommand(QString command)
+{
+ if(command != "do_install") return;
+ progressCompleted->setRange(0,100);
+ progressCompleted->setValue(100);
+ progressCurrent->setRange(0,100);
+ progressCurrent->setValue(100);
+ setComplete(true);
+}
+
+// void wpInstallation::()
+// {
+// QListWidgetItem *item = new ListItem("Finished.", "The backend has finished its job.", "dialog-ok");
+// listWidget->addItem(item);
+// setComplete(true);
+// }
+
+void wpInstallation::setComplete(bool c)
+{
+ complete = c;
+ emit completeChanged();
+}
+
+bool wpInstallation::isComplete() const
+{
+ return complete;
+}
+
+bool wpInstallation::validatePage()
+{
+ return complete;
+}
diff --git a/wizard/installation.h b/wizard/installation.h
new file mode 100644
index 0000000..0209007
--- /dev/null
+++ b/wizard/installation.h
@@ -0,0 +1,29 @@
+#ifndef installation_H
+#define installation_H
+
+#include "ui_installation.h"
+#include "../backend.h"
+
+class wpInstallation : public QWizardPage, Ui::wpInstallation
+{
+ Q_OBJECT
+
+ public:
+ wpInstallation(QWidget *parent = 0);
+ void initializePage();
+ void cleanupPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+ void setComplete(bool c);
+
+ private slots:
+ void setProgress(int percent);
+ void receivedCommand(QString command, QString args);
+ void finishedCommand(QString command);
+};
+
+#endif // installation_H
diff --git a/wizard/installation.ui b/wizard/installation.ui
new file mode 100644
index 0000000..67cdb81
--- /dev/null
+++ b/wizard/installation.ui
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpInstallation</class>
+ <widget class="QWizardPage" name="wpInstallation">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>515</width>
+ <height>389</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Installation</string>
+ </property>
+ <property name="subTitle">
+ <string>This may take some time...</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QListWidget" name="listWidget"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="lblCurrent">
+ <property name="text">
+ <string>Current task:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressCurrent"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="lblCompleted">
+ <property name="text">
+ <string>Installation completed:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressCompleted"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/network.cpp b/wizard/network.cpp
new file mode 100644
index 0000000..9d45fc5
--- /dev/null
+++ b/wizard/network.cpp
@@ -0,0 +1,40 @@
+#include <QtGui>
+#include "network.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpNetwork::wpNetwork(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ connect(hostname, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+
+ QValidator* hostnameValidator = new QRegExpValidator(QRegExp("[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]"), this);
+ hostname->setValidator( hostnameValidator );
+
+ backend = Backend::instance();
+}
+
+void wpNetwork::initializePage()
+{
+ hostname->setText(backend->cfg("hostname"));
+ updateStatus();
+}
+
+void wpNetwork::updateStatus()
+{
+ emit completeChanged();
+}
+
+bool wpNetwork::isComplete() const
+{
+ if(hostname->text().length()) return true;
+ return false;
+}
+
+bool wpNetwork::validatePage()
+{
+ if(!isComplete()) return false;
+ backend->cfg("hostname", hostname->text());
+ return true;
+}
+
diff --git a/wizard/network.h b/wizard/network.h
new file mode 100644
index 0000000..4242a5a
--- /dev/null
+++ b/wizard/network.h
@@ -0,0 +1,25 @@
+#ifndef network_H
+#define network_H
+
+#include "ui_network.h"
+#include "../backend.h"
+
+class wpNetwork : public QWizardPage, Ui::wpNetwork
+{
+ Q_OBJECT
+
+ public:
+ wpNetwork(QWidget *parent = 0);
+ void initializePage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+
+ private slots:
+ void updateStatus();
+
+};
+
+#endif // network_H
diff --git a/wizard/network.ui b/wizard/network.ui
new file mode 100644
index 0000000..7f6a36c
--- /dev/null
+++ b/wizard/network.ui
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpNetwork</class>
+ <widget class="QWizardPage" name="wpNetwork">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>Network configuration</string>
+ </property>
+ <property name="subTitle">
+ <string>Set your hostname</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="2">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="lblHostname">
+ <property name="text">
+ <string>Hostname:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="hostname"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="hostnameStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>264</width>
+ <height>197</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>hostname</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/partitions.cpp b/wizard/partitions.cpp
new file mode 100644
index 0000000..d35e94f
--- /dev/null
+++ b/wizard/partitions.cpp
@@ -0,0 +1,63 @@
+#include <QtGui>
+#include "partitions.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+#include "../mainwizard.h"
+
+wpPartitions::wpPartitions(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+ connect(listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+ listWidget->setItemDelegate(new ListDelegate(this));
+}
+
+void wpPartitions::initializePage()
+{
+ listWidget->clear();
+ listWidget->addItem(new ListItem(tr("Manual partitioning"), tr("You will have to do the partitioning with a partition-manager manually. This way you have more possibilities to adjust the installation to your needs. The automatic partitioning lacks several features and is only a (computer generated) list of some possible options."), "partitionmanager", "manual"));
+ listWidget->addItem(new ListItem(tr("Already partitioned"), tr("If you have already partitioned for the installation and don't want to start a partition manager then select this."), "drive-harddisk", "already"));
+ clearPage();
+}
+
+void wpPartitions::clearPage()
+{
+}
+
+void wpPartitions::receivedDataLine(QString data, QString line)
+{
+ if(data == "install_choice")
+ {
+ listWidget->addItem(new ListItem(line, line, "tools-wizard", line.section(" ",0,0)));
+ }
+}
+
+void wpPartitions::updateComplete()
+{
+ emit completeChanged();
+}
+
+bool wpPartitions::isComplete() const
+{
+ if(!listWidget->currentItem()) return false;
+ return true;
+}
+
+bool wpPartitions::validatePage()
+{
+ if(!isComplete()) return false;
+// backend->cfg("install_choice", listWidget->currentItem()->data(ListItem::ItemData).toString());
+ return true;
+}
+
+int wpPartitions::nextId() const
+{
+ if(listWidget->currentItem())
+ {
+ QString choice = listWidget->currentItem()->data(ListItem::ItemData).toString();
+ if(choice == "manual")
+ return MainWizard::Page_PartManSel;
+ else if(choice == "already")
+ return MainWizard::Page_RootPartition;
+ }
+}
diff --git a/wizard/partitions.h b/wizard/partitions.h
new file mode 100644
index 0000000..4f442a6
--- /dev/null
+++ b/wizard/partitions.h
@@ -0,0 +1,27 @@
+#ifndef partitions_H
+#define partitions_H
+
+#include "ui_partitions.h"
+#include "../backend.h"
+
+class wpPartitions : public QWizardPage, Ui::wpPartitions
+{
+ Q_OBJECT
+
+ public:
+ wpPartitions(QWidget *parent = 0);
+ void initializePage();
+ void clearPage();
+ int nextId() const;
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+
+ private slots:
+ void receivedDataLine(QString data, QString line);
+ void updateComplete();
+};
+
+#endif // partitions_H
diff --git a/wizard/partitions.ui b/wizard/partitions.ui
new file mode 100644
index 0000000..f9badf4
--- /dev/null
+++ b/wizard/partitions.ui
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpPartitions</class>
+ <widget class="QWizardPage" name="wpPartitions">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>515</width>
+ <height>389</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Partitions</string>
+ </property>
+ <property name="subTitle">
+ <string>Mmmmmh! Partitions!</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QListWidget" name="listWidget"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/partman.cpp b/wizard/partman.cpp
new file mode 100644
index 0000000..3e232f4
--- /dev/null
+++ b/wizard/partman.cpp
@@ -0,0 +1,55 @@
+#include <QtGui>
+#include "partman.h"
+#include "config.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpPartMan::wpPartMan(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+}
+
+void wpPartMan::initializePage()
+{
+ clearPage();
+}
+
+void wpPartMan::clearPage()
+{
+ setComplete(false);
+ delete terminal;
+ delete gridLayout;
+ delete label;
+ setupUi(this);
+ connect(terminal, SIGNAL(finished()), this, SLOT(terminalFinished()));
+ QStringList args;
+ args << "/bin/bash" << BACKEND_PATH << "-e" << "run_partmgr" << backend->cfg("partman_program") << backend->cfg("partman_disk");
+ terminal->setArgs(args);
+ terminal->startShellProgram();
+ terminal->setFocus(Qt::OtherFocusReason);
+}
+
+void wpPartMan::terminalFinished()
+{
+ terminal->releaseKeyboard();
+ terminal->clearFocus();
+ setComplete(true);
+}
+
+void wpPartMan::setComplete(bool c)
+{
+ complete = c;
+ emit completeChanged();
+}
+
+bool wpPartMan::isComplete() const
+{
+ return complete;
+}
+
+bool wpPartMan::validatePage()
+{
+ return complete;
+}
+
diff --git a/wizard/partman.h b/wizard/partman.h
new file mode 100644
index 0000000..240d8f7
--- /dev/null
+++ b/wizard/partman.h
@@ -0,0 +1,27 @@
+#ifndef partman_H
+#define partman_H
+
+#include "ui_partman.h"
+#include "../backend.h"
+
+class wpPartMan : public QWizardPage, Ui::wpPartMan
+{
+ Q_OBJECT
+
+ public:
+ wpPartMan(QWidget *parent = 0);
+ void initializePage();
+ void clearPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+ void setComplete(bool c);
+
+ private slots:
+ void terminalFinished();
+};
+
+#endif // partman_H
diff --git a/wizard/partman.ui b/wizard/partman.ui
new file mode 100644
index 0000000..2ddf54f
--- /dev/null
+++ b/wizard/partman.ui
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpPartMan</class>
+ <widget class="QWizardPage" name="wpPartMan">
+ <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>
+ <property name="title">
+ <string>Partition Manager</string>
+ </property>
+ <property name="subTitle">
+ <string>Partition your disk</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTermWidget" name="terminal" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>save and/or quit the partition manager to continue</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>QTermWidget</class>
+ <extends>QWidget</extends>
+ <header>../qtermwidget/qtermwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/partmansel.cpp b/wizard/partmansel.cpp
new file mode 100644
index 0000000..ae74f0e
--- /dev/null
+++ b/wizard/partmansel.cpp
@@ -0,0 +1,93 @@
+#include <QtGui>
+#include "partmansel.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpPartManSel::wpPartManSel(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+ connect(backend, SIGNAL(receivedDataLine(QString,QString)), this, SLOT(receivedDataLine(QString,QString)));
+ connect(partMan, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+ connect(partDisk, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+ partMan->setItemDelegate(new ListDelegate(this));
+}
+
+void wpPartManSel::initializePage()
+{
+ clearPage();
+}
+
+void wpPartManSel::clearPage()
+{
+ backend->exec("send_partition_managers");
+ partMan->clear();
+ backend->exec("send_list_of_disks");
+ partDisk->clear();
+}
+
+void wpPartManSel::receivedDataLine(QString data, QString line)
+{
+ if(data == "partition_managers")
+ {
+ QString app = line.section(" ",0,0);
+ QString title, desc, icon;
+ if(app == "cfdisk")
+ {
+ title = tr("cfdisk");
+ desc = tr("cfdisk is a curses-based partition editor. It is text-only (curses), but it is easy to use [recommended]");
+ icon = "terminal";
+ }
+ else if(app == "fdisk")
+ {
+ title = tr("fdisk");
+ desc = tr("fdisk is a classic partition table manipulator for Linux. It has a Command Line Interface.");
+ icon = "terminal";
+ }
+ else if(app == "gparted")
+ {
+ title = tr("GParted");
+ desc = tr("GParted is the Gnome Partition Editor application. It has a Graphical User Interface.");
+ icon = "gparted";
+ }
+ else if(app == "qtparted")
+ {
+ title = tr("QtParted");
+ desc = tr("QTParted is a Partition Magic clone, so it has a GUI. Sometimes it's a bit buggy, so it is not recommended to use for huge changes on the partition table.");
+ icon = "qtparted";
+ }
+ else
+ {
+ title = app;
+ desc = tr("No description available...");
+ icon = "partitionmanager";
+ }
+ QListWidgetItem *item = new ListItem(title, desc, icon, app);
+ partMan->addItem(item);
+ }
+ if(data == "list_of_disks")
+ {
+ QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line);
+ partDisk->addItem(item);
+ }
+}
+
+void wpPartManSel::updateComplete()
+{
+ emit completeChanged();
+}
+
+bool wpPartManSel::isComplete() const
+{
+ if(!partMan->currentItem()) return false;
+ if(!partDisk->currentItem()) return false;
+ return true;
+}
+
+bool wpPartManSel::validatePage()
+{
+ if(!isComplete()) return false;
+ backend->cfg("partman_program", partMan->currentItem()->data(ListItem::ItemData).toString());
+ backend->cfg("partman_disk", partDisk->currentItem()->text().section(" ",0,0));
+ return true;
+}
diff --git a/wizard/partmansel.h b/wizard/partmansel.h
new file mode 100644
index 0000000..7bfabd8
--- /dev/null
+++ b/wizard/partmansel.h
@@ -0,0 +1,27 @@
+#ifndef partmansel_H
+#define partmansel_H
+
+#include "ui_partmansel.h"
+#include "../backend.h"
+
+class wpPartManSel : public QWizardPage, Ui::wpPartManSel
+{
+ Q_OBJECT
+
+ public:
+ wpPartManSel(QWidget *parent = 0);
+ void initializePage();
+ void clearPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+
+ private slots:
+ void receivedDataLine(QString data, QString line);
+ void updateComplete();
+
+};
+
+#endif // partmansel_H
diff --git a/wizard/partmansel.ui b/wizard/partmansel.ui
new file mode 100644
index 0000000..15a0302
--- /dev/null
+++ b/wizard/partmansel.ui
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpPartManSel</class>
+ <widget class="QWizardPage" name="wpPartManSel">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>584</width>
+ <height>358</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>Partitions</string>
+ </property>
+ <property name="subTitle">
+ <string>Select partition manager</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QListWidget" name="partMan">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>3</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" rowspan="2" colspan="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" rowspan="4">
+ <widget class="QLabel" name="lblHelpText_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="1">
+ <widget class="QListWidget" name="partDisk">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>2</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/rootpartition.cpp b/wizard/rootpartition.cpp
new file mode 100644
index 0000000..6341a0f
--- /dev/null
+++ b/wizard/rootpartition.cpp
@@ -0,0 +1,58 @@
+#include <QtGui>
+#include "rootpartition.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpRootPartition::wpRootPartition(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+ connect(backend, SIGNAL(receivedDataLine(QString,QString)), this, SLOT(receivedDataLine(QString,QString)));
+ connect(rootPartitionDev, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete()));
+}
+
+void wpRootPartition::initializePage()
+{
+ clearPage();
+}
+
+void wpRootPartition::clearPage()
+{
+ backend->exec("send_possible_root_partitions");
+ rootPartitionDev->clear();
+ backend->exec("send_possible_root_filesystems");
+ rootPartitionFs->clear();
+}
+
+void wpRootPartition::receivedDataLine(QString data, QString line)
+{
+ if(data == "possible_root_partitions")
+ {
+ QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line);
+ rootPartitionDev->addItem(item);
+ }
+ if(data == "possible_root_filesystems")
+ {
+ rootPartitionFs->addItem(line);
+ }
+}
+
+void wpRootPartition::updateComplete()
+{
+ emit completeChanged();
+}
+
+bool wpRootPartition::isComplete() const
+{
+ if(!rootPartitionDev->currentItem()) return false;
+ return true;
+}
+
+bool wpRootPartition::validatePage()
+{
+ if(!isComplete()) return false;
+ backend->exec(QString("hdmap_set %1:/:%2:auto")
+ .arg(rootPartitionDev->currentItem()->text().section(" ",0,0))
+ .arg(chkFormat->isChecked() ? rootPartitionFs->currentText() : ""));
+ return true;
+}
diff --git a/wizard/rootpartition.h b/wizard/rootpartition.h
new file mode 100644
index 0000000..16e95ef
--- /dev/null
+++ b/wizard/rootpartition.h
@@ -0,0 +1,27 @@
+#ifndef rootpartition_H
+#define rootpartition_H
+
+#include "ui_rootpartition.h"
+#include "../backend.h"
+
+class wpRootPartition : public QWizardPage, Ui::wpRootPartition
+{
+ Q_OBJECT
+
+ public:
+ wpRootPartition(QWidget *parent = 0);
+ void initializePage();
+ void clearPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+
+ private slots:
+ void receivedDataLine(QString data, QString line);
+ void updateComplete();
+
+};
+
+#endif // rootpartition_H
diff --git a/wizard/rootpartition.ui b/wizard/rootpartition.ui
new file mode 100644
index 0000000..119c00f
--- /dev/null
+++ b/wizard/rootpartition.ui
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpRootPartition</class>
+ <widget class="QWizardPage" name="wpRootPartition">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>584</width>
+ <height>405</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>Partitions</string>
+ </property>
+ <property name="subTitle">
+ <string>Select root partition</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="3">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QListWidget" name="rootPartitionDev"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="chkFormat">
+ <property name="text">
+ <string>format partition with filesystem:</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="rootPartitionFs"/>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" rowspan="2">
+ <widget class="QLabel" name="lblHelpText_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QCheckBox" name="chkAdvanced">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>advanced partition options</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>228</width>
+ <height>108</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>chkFormat</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>rootPartitionFs</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>388</x>
+ <y>213</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>390</x>
+ <y>246</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/wizard/rootpwd.cpp b/wizard/rootpwd.cpp
new file mode 100644
index 0000000..9ec4417
--- /dev/null
+++ b/wizard/rootpwd.cpp
@@ -0,0 +1,69 @@
+#include <QtGui>
+#include "rootpwd.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpRootPwd::wpRootPwd(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ connect(password, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+ connect(retypePassword, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+ backend = Backend::instance();
+ updateStatus();
+}
+
+void wpRootPwd::initializePage()
+{
+}
+
+void wpRootPwd::updateStatus()
+{
+ QString pw1 = password->text();
+ QString pw2 = retypePassword->text();
+
+ passwordStatus->setPixmap(QPixmap());
+ retypePasswordStatus->setPixmap(QPixmap());
+
+ complete = true;
+
+ if(!pw1.length())
+ {
+ passwordStatus->setToolTip(tr("Please enter a password!"));
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else if(pw1.length() < 6)
+ {
+ passwordStatus->setToolTip(tr("Password must have at least 6 characters!"));
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else
+ {
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(24,24));
+
+ if(pw1 != pw2)
+ {
+ retypePasswordStatus->setToolTip(tr("Passwords don't match!"));
+ retypePasswordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else
+ retypePasswordStatus->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(24,24));
+ }
+
+ emit completeChanged();
+}
+
+bool wpRootPwd::isComplete() const
+{
+ return complete;
+}
+
+bool wpRootPwd::validatePage()
+{
+ if(!complete) return false;
+ backend->cfg("rootpwd", backend->encryptPassword(password->text()));
+ return true;
+}
+
diff --git a/wizard/rootpwd.h b/wizard/rootpwd.h
new file mode 100644
index 0000000..62bcb7b
--- /dev/null
+++ b/wizard/rootpwd.h
@@ -0,0 +1,26 @@
+#ifndef rootpwd_H
+#define rootpwd_H
+
+#include "ui_rootpwd.h"
+#include "../backend.h"
+
+class wpRootPwd : public QWizardPage, Ui::wpRootPwd
+{
+ Q_OBJECT
+
+ public:
+ wpRootPwd(QWidget *parent = 0);
+ void initializePage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+
+ private slots:
+ void updateStatus();
+
+};
+
+#endif // rootpwd_H
diff --git a/wizard/rootpwd.ui b/wizard/rootpwd.ui
new file mode 100644
index 0000000..2e47950
--- /dev/null
+++ b/wizard/rootpwd.ui
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpRootPwd</class>
+ <widget class="QWizardPage" name="wpRootPwd">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>User configuration</string>
+ </property>
+ <property name="subTitle">
+ <string>Password for the system administrator account (root)</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="3">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="lblPwd">
+ <property name="text">
+ <string>Password:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="password">
+ <property name="maxLength">
+ <number>20</number>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="passwordStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="lblRetypePwd">
+ <property name="text">
+ <string>Retype Password:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="retypePassword">
+ <property name="maxLength">
+ <number>20</number>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="retypePasswordStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>264</width>
+ <height>197</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="lblPwdLenNote">
+ <property name="text">
+ <string>&lt;b&gt;Note that all passwords must have 6 - 20 characters!&lt;/b&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>password</tabstop>
+ <tabstop>retypePassword</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/summary.cpp b/wizard/summary.cpp
new file mode 100644
index 0000000..b09f2c1
--- /dev/null
+++ b/wizard/summary.cpp
@@ -0,0 +1,66 @@
+#include <QtGui>
+#include "summary.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpSummary::wpSummary(QWidget *parent) : QWizardPage(parent)
+{
+ setComplete(true);
+ setupUi(this);
+ backend = Backend::instance();
+// connect(backend, SIGNAL(processExited()), this, SLOT(WeAreDone()));
+ listWidget->setItemDelegate(new ListDelegate(this));
+ setCommitPage(true);
+ setButtonText(QWizard::CommitButton, tr("Start Installation"));
+// QListWidgetItem *item = new ListItem("Start", "Let's go!", "dialog-ok");
+// listWidget->addItem(item);
+}
+
+void wpSummary::initializePage()
+{
+ listWidget->clear();
+ listWidget->addItem(new ListItem(tr("Installation type"), tr("HD install"), "acritoxinstaller"));
+ QStringList hdMapList = backend->cfg("hdmap").split("\n");
+ for (QStringList::Iterator it = hdMapList.begin(); it != hdMapList.end(); ++it)
+ {
+ QString line = *it;
+ QString device = line.section(":",0,0);
+ QString mountpoint = line.section(":",1,1);
+ QString filesystem = line.section(":",2,2);
+ QString automount = line.section(":",3,3);
+ QString title = tr("%1 will be used as %2").arg(device).arg(mountpoint);
+ QString description;
+ if(filesystem.length()) description = QString("<li>") + tr("It will be formatted with %1").arg(filesystem) + QString("</li>");
+ if(automount == "auto") description += QString("<li>") + tr("It will be mounted automatically on boot") + QString("</li>");
+ listWidget->addItem(new ListItem(title, "<ul>" + description + "</ul>", "drive-harddisk"));
+ }
+ listWidget->addItem(new ListItem(tr("Bootloader"), tr("%1 will be installed to %2").arg(backend->cfg("bootloader")).arg(backend->cfg("bootloader_target")), "system-run"));
+}
+
+void wpSummary::cleanupPage()
+{
+ initializePage();
+}
+
+// void wpSummary::()
+// {
+// QListWidgetItem *item = new ListItem("Finished.", "The backend has finished its job.", "dialog-ok");
+// listWidget->addItem(item);
+// setComplete(true);
+// }
+
+void wpSummary::setComplete(bool c)
+{
+ complete = c;
+ emit completeChanged();
+}
+
+bool wpSummary::isComplete() const
+{
+ return complete;
+}
+
+bool wpSummary::validatePage()
+{
+ return complete;
+}
diff --git a/wizard/summary.h b/wizard/summary.h
new file mode 100644
index 0000000..677340b
--- /dev/null
+++ b/wizard/summary.h
@@ -0,0 +1,28 @@
+#ifndef summary_H
+#define summary_H
+
+#include "ui_summary.h"
+#include "../backend.h"
+
+class wpSummary : public QWizardPage, Ui::wpSummary
+{
+ Q_OBJECT
+
+ public:
+ wpSummary(QWidget *parent = 0);
+ void initializePage();
+ void cleanupPage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+ void setComplete(bool c);
+
+ private slots:
+
+
+};
+
+#endif // summary_H
diff --git a/wizard/summary.ui b/wizard/summary.ui
new file mode 100644
index 0000000..9a36791
--- /dev/null
+++ b/wizard/summary.ui
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpSummary</class>
+ <widget class="QWizardPage" name="wpSummary">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>515</width>
+ <height>389</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Installation</string>
+ </property>
+ <property name="subTitle">
+ <string>Summary</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QListWidget" name="listWidget"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/usercfg.cpp b/wizard/usercfg.cpp
new file mode 100644
index 0000000..0e625d6
--- /dev/null
+++ b/wizard/usercfg.cpp
@@ -0,0 +1,52 @@
+#include <QtGui>
+#include "usercfg.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpUserCfg::wpUserCfg(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ connect(realname, SIGNAL(editingFinished()), this, SLOT(realnameChanged()));
+ connect(realname, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+ connect(username, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+
+ QValidator* usernameValidator = new QRegExpValidator(QRegExp("[a-zA-Z0-9-_.]*"), this);
+ username->setValidator( usernameValidator );
+
+ backend = Backend::instance();
+ complete = false;
+ updateStatus();
+}
+
+void wpUserCfg::initializePage()
+{
+}
+
+void wpUserCfg::realnameChanged()
+{
+ if(username->text().length()) return;
+ if(realname->text().contains(" "))
+ username->setText(backend->cleanUsername(realname->text().section(" ",0,0).toLower()));
+ updateStatus();
+}
+
+void wpUserCfg::updateStatus()
+{
+ complete = false;
+ if(realname->text().length() && username->text().length()) complete = true;
+ emit completeChanged();
+}
+
+bool wpUserCfg::isComplete() const
+{
+ return complete;
+}
+
+bool wpUserCfg::validatePage()
+{
+ if(!complete) return false;
+ backend->cfg("username", username->text());
+ backend->cfg("realname", realname->text());
+ return true;
+}
+
diff --git a/wizard/usercfg.h b/wizard/usercfg.h
new file mode 100644
index 0000000..17efa9a
--- /dev/null
+++ b/wizard/usercfg.h
@@ -0,0 +1,27 @@
+#ifndef usercfg_H
+#define usercfg_H
+
+#include "ui_usercfg.h"
+#include "../backend.h"
+
+class wpUserCfg : public QWizardPage, Ui::wpUserCfg
+{
+ Q_OBJECT
+
+ public:
+ wpUserCfg(QWidget *parent = 0);
+ void initializePage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+
+ private slots:
+ void realnameChanged();
+ void updateStatus();
+
+};
+
+#endif // usercfg_H
diff --git a/wizard/usercfg.ui b/wizard/usercfg.ui
new file mode 100644
index 0000000..3e5ded9
--- /dev/null
+++ b/wizard/usercfg.ui
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpUserCfg</class>
+ <widget class="QWizardPage" name="wpUserCfg">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>User configuration</string>
+ </property>
+ <property name="subTitle">
+ <string>Username</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="3">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="lblRealname">
+ <property name="text">
+ <string>Realname:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="realname"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="realnameStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="lblUsername">
+ <property name="text">
+ <string>Username:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="username"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="usernameStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>264</width>
+ <height>197</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>realname</tabstop>
+ <tabstop>username</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/userpwd.cpp b/wizard/userpwd.cpp
new file mode 100644
index 0000000..48a9e91
--- /dev/null
+++ b/wizard/userpwd.cpp
@@ -0,0 +1,69 @@
+#include <QtGui>
+#include "userpwd.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpUserPwd::wpUserPwd(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ connect(password, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+ connect(retypePassword, SIGNAL(textChanged(QString)), this, SLOT(updateStatus()));
+ backend = Backend::instance();
+ updateStatus();
+}
+
+void wpUserPwd::initializePage()
+{
+}
+
+void wpUserPwd::updateStatus()
+{
+ QString pw1 = password->text();
+ QString pw2 = retypePassword->text();
+
+ passwordStatus->setPixmap(QPixmap());
+ retypePasswordStatus->setPixmap(QPixmap());
+
+ complete = true;
+
+ if(!pw1.length())
+ {
+ passwordStatus->setToolTip(tr("Please enter a password!"));
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else if(pw1.length() < 6)
+ {
+ passwordStatus->setToolTip(tr("Password must have at least 6 characters!"));
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else
+ {
+ passwordStatus->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(24,24));
+
+ if(pw1 != pw2)
+ {
+ retypePasswordStatus->setToolTip(tr("Passwords don't match!"));
+ retypePasswordStatus->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(24,24));
+ complete = false;
+ }
+ else
+ retypePasswordStatus->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(24,24));
+ }
+ emit completeChanged();
+}
+
+bool wpUserPwd::isComplete() const
+{
+ return complete;
+}
+
+bool wpUserPwd::validatePage()
+{
+ if(!complete) return false;
+ backend->cfg("userpwd", backend->encryptPassword(password->text()));
+ backend->cfg("autologin", (autologin->isChecked() ? "on" : "off"));
+ return true;
+}
+
diff --git a/wizard/userpwd.h b/wizard/userpwd.h
new file mode 100644
index 0000000..7ea209d
--- /dev/null
+++ b/wizard/userpwd.h
@@ -0,0 +1,26 @@
+#ifndef userpwd_H
+#define userpwd_H
+
+#include "ui_userpwd.h"
+#include "../backend.h"
+
+class wpUserPwd : public QWizardPage, Ui::wpUserPwd
+{
+ Q_OBJECT
+
+ public:
+ wpUserPwd(QWidget *parent = 0);
+ void initializePage();
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+
+ private slots:
+ void updateStatus();
+
+};
+
+#endif // userpwd_H
diff --git a/wizard/userpwd.ui b/wizard/userpwd.ui
new file mode 100644
index 0000000..ff559a2
--- /dev/null
+++ b/wizard/userpwd.ui
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpUserPwd</class>
+ <widget class="QWizardPage" name="wpUserPwd">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>WizardPage</string>
+ </property>
+ <property name="title">
+ <string>User configuration</string>
+ </property>
+ <property name="subTitle">
+ <string>Password for your user account</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" rowspan="3">
+ <widget class="QLabel" name="lblHelpText">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="lblPwd">
+ <property name="text">
+ <string>Password:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLineEdit" name="password">
+ <property name="maxLength">
+ <number>20</number>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="passwordStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="lblRetypePwd">
+ <property name="text">
+ <string>Retype Password:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="retypePassword">
+ <property name="maxLength">
+ <number>20</number>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="retypePasswordStatus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>264</width>
+ <height>91</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="Line" name="line_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" rowspan="3">
+ <widget class="QLabel" name="lblHelpText_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>HelpText</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QCheckBox" name="autologin">
+ <property name="text">
+ <string>Enable Auto-Login</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>264</width>
+ <height>59</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="7" column="0" colspan="2">
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="lblPwdLenNote">
+ <property name="text">
+ <string>&lt;b&gt;Note that all passwords must have 6 - 20 characters!&lt;/b&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>password</tabstop>
+ <tabstop>retypePassword</tabstop>
+ <tabstop>autologin</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/wizard/welcome.cpp b/wizard/welcome.cpp
new file mode 100644
index 0000000..56210e0
--- /dev/null
+++ b/wizard/welcome.cpp
@@ -0,0 +1,35 @@
+#include <QtGui>
+#include "welcome.h"
+#include "../listdelegate.h"
+#include "../listitem.h"
+
+wpWelcome::wpWelcome(QWidget *parent) : QWizardPage(parent)
+{
+ setupUi(this);
+ backend = Backend::instance();
+ connect(backend, SIGNAL(finishedCommand(QString)), this, SLOT(backendFinishedCommand(QString)));
+ setComplete(false);
+ backend->exec("init_installer");
+}
+
+void wpWelcome::backendFinishedCommand(QString command)
+{
+ if(command == "init_installer") setComplete(true);
+}
+
+void wpWelcome::setComplete(bool c)
+{
+ complete = c;
+ emit completeChanged();
+}
+
+bool wpWelcome::isComplete() const
+{
+ return complete;
+}
+
+bool wpWelcome::validatePage()
+{
+ return complete;
+}
+
diff --git a/wizard/welcome.h b/wizard/welcome.h
new file mode 100644
index 0000000..792f127
--- /dev/null
+++ b/wizard/welcome.h
@@ -0,0 +1,26 @@
+#ifndef welcome_H
+#define welcome_H
+
+#include "ui_welcome.h"
+#include "../backend.h"
+
+class wpWelcome : public QWizardPage, Ui::wpWelcome
+{
+ Q_OBJECT
+
+ public:
+ wpWelcome(QWidget *parent = 0);
+ bool isComplete() const;
+ bool validatePage();
+
+ private:
+ Backend* backend;
+ bool complete;
+ void setComplete(bool c);
+
+ private slots:
+ void backendFinishedCommand(QString command);
+
+};
+
+#endif // welcome_H
diff --git a/wizard/welcome.ui b/wizard/welcome.ui
new file mode 100644
index 0000000..6fbc95f
--- /dev/null
+++ b/wizard/welcome.ui
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>wpWelcome</class>
+ <widget class="QWizardPage" name="wpWelcome">
+ <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>
+ <property name="title">
+ <string>Installer</string>
+ </property>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>