diff --git a/src/pageconfiguration.cpp b/src/pageconfiguration.cpp index 5d80661..c466d6a 100644 --- a/src/pageconfiguration.cpp +++ b/src/pageconfiguration.cpp @@ -24,7 +24,8 @@ PageConfiguration::PageConfiguration(const QString& title) : QLabel* langText = new QLabel( tr("Language:") ); m_Language = new QComboBox; - m_Language->addItem("en_EN"); + //"en_US", "de_DE", "es_ES", "fr_FR", "it_IT", "pl_PL", "pt_BR", "ru_RU", "uk_UA" + m_Language->addItem("en_US"); m_Language->addItem("ru_RU"); hbox_2->addWidget(langText); @@ -73,6 +74,20 @@ PageConfiguration::PageConfiguration(const QString& title) : bool PageConfiguration::validate() { - return true; + if ( !m_Hostname->text().isEmpty() ) + { + InstallerSettings settings; + + settings.host = m_Hostname->text(); + settings.language = m_Language->currentText(); + settings.fs = m_Format->currentText(); + settings.timezone = m_Timezone->currentText(); + + emit selectedSettings(settings); + return true; + + } else { + return false; + } } diff --git a/src/pageconfiguration.h b/src/pageconfiguration.h index 76b5e2a..d7a8446 100644 --- a/src/pageconfiguration.h +++ b/src/pageconfiguration.h @@ -1,6 +1,7 @@ #pragma once #include "installerpage.h" +#include "tools.h" class QComboBox; class QLineEdit; @@ -15,6 +16,9 @@ public: public slots: +signals: + void selectedSettings(InstallerSettings); + private: QLineEdit* m_Hostname; QComboBox* m_Language; diff --git a/src/pageinstall.cpp b/src/pageinstall.cpp index 282fb84..eba98b9 100644 --- a/src/pageinstall.cpp +++ b/src/pageinstall.cpp @@ -1,12 +1,16 @@ #include "pageinstall.h" +#include + #include #include #include #include -PageInstall::PageInstall(const QString& title) : - InstallerPage(title) +PageInstall::PageInstall(const QString& title, InstallerSettings* settings) : + InstallerPage(title), + m_Settings(settings), + m_clProc(0) { //QLabel* label = new QLabel( tr("") ) @@ -24,8 +28,32 @@ PageInstall::PageInstall(const QString& title) : void PageInstall::show() { -// emit changeNext(false); -// emit changePrev(false); + emit changeNext(false); + emit changePrev(false); + + qDebug() << "install show()"; + + emit changeNext(false); + emit changePrev(false); + + if ( !m_clProc ) + { + m_clProc = new QProcess(this); + + connect( m_clProc, SIGNAL(error(QProcess::ProcessError)), this, SLOT(onError(QProcess::ProcessError)) ); + connect( m_clProc, SIGNAL(readyReadStandardOutput()), this, SLOT(showStdOut()) ); + connect( m_clProc, SIGNAL(readyReadStandardError()), this, SLOT(showStdErr()) ); + connect( m_clProc, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onFinish(int,QProcess::ExitStatus)) ); + + QStringList args; + args << QString("--disk=%1").arg(m_Settings->disk); + args << QString("--set-hostname=%1").arg(m_Settings->host); + args << QString("--set-format=%1").arg(m_Settings->fs); + args << QString("--set-lang=%1").arg(m_Settings->language); + args << QString("--set-timezone=%1").arg(m_Settings->timezone); + + m_clProc->start("calculate"); + } } bool PageInstall::validate() @@ -33,3 +61,36 @@ bool PageInstall::validate() return true; } +void PageInstall::onError(QProcess::ProcessError error) +{ + qDebug() << "failed to run process 'calculate' error=" << error ; + onFinish(-error); +} + +void PageInstall::showStdOut() +{ + // debug + QString str = m_clProc->readAllStandardOutput(); + qDebug() << "cl out: " << str; + if (m_clProc) + m_Output->insertPlainText( str ); +} + +void PageInstall::showStdErr() +{ + if (m_clProc) + qDebug() << tr("Process Error: ") << m_clProc->readAllStandardError(); +} + + +void PageInstall::onFinish(int exitCode, QProcess::ExitStatus exitStatus) +{ + qDebug() << "install onFinish()"; + + emit changeNext(true); + emit changePrev(true); + + delete m_clProc; + m_clProc = 0; +} + diff --git a/src/pageinstall.h b/src/pageinstall.h index ccfea30..37777aa 100644 --- a/src/pageinstall.h +++ b/src/pageinstall.h @@ -1,6 +1,9 @@ #pragma once #include "installerpage.h" +#include "tools.h" + +#include class QTextEdit; class QProgressBar; @@ -9,13 +12,19 @@ class PageInstall : public InstallerPage { Q_OBJECT public: - explicit PageInstall(const QString& title); + explicit PageInstall(const QString& title, InstallerSettings* settings); bool validate(); public slots: void show(); +private slots: + void onError(QProcess::ProcessError error); + void showStdOut(); + void showStdErr(); + void onFinish(int exitCode, QProcess::ExitStatus exitStatus = QProcess::NormalExit); + signals: void changeNext(bool); void changePrev(bool); @@ -24,5 +33,7 @@ private: QTextEdit* m_Output; QProgressBar* m_Progress; + InstallerSettings* m_Settings; + QProcess* m_clProc; }; diff --git a/src/pagepartitioning.cpp b/src/pagepartitioning.cpp index 59f6885..8dfa190 100644 --- a/src/pagepartitioning.cpp +++ b/src/pagepartitioning.cpp @@ -146,6 +146,7 @@ void PagePartitioning::updatePartitions(int num) } } } + void PagePartitioning::partitioningCurrentDisk() { if (m_Disks->count() != 0) diff --git a/src/systeminstaller.cpp b/src/systeminstaller.cpp index c613b4b..1fbcfdb 100644 --- a/src/systeminstaller.cpp +++ b/src/systeminstaller.cpp @@ -100,9 +100,15 @@ SystemInstaller::SystemInstaller(QWidget *parent) : m_PageManager->addPage(pagePartitoning); PageConfiguration* pageConfiguration = new PageConfiguration( tr("Configuring") ); + connect( pageConfiguration, SIGNAL(selectedSettings(InstallerSettings)), + this, SLOT(configurationSelect(InstallerSettings)) + ); m_PageManager->addPage(pageConfiguration); - PageInstall* pageInstall = new PageInstall( tr("Installing") ); + PageInstall* pageInstall = new PageInstall( tr("Installing"), &m_InstallSettings ); +// connect( this, ) + connect( pageInstall, SIGNAL(changeNext(bool)), this, SLOT(changedNext(bool)) ); + connect( pageInstall, SIGNAL(changePrev(bool)), this, SLOT(changedPrev(bool)) ); m_PageManager->addPage(pageInstall); PageFinish* pageFinish = new PageFinish( tr("Complete") ); @@ -151,4 +157,18 @@ void SystemInstaller::completePartitioning() void SystemInstaller::volumeSelect(QString volume) { qDebug() << "Selected volume is " << volume; + m_InstallSettings.disk = volume; +} + +void SystemInstaller::configurationSelect(InstallerSettings settings) +{ + qDebug() << "Selected settings: "; + qDebug() << "Host: " << settings.host; + qDebug() << "FS: " << settings.fs; + qDebug() << "Language: " << settings.language; + qDebug() << "Timezone: " << settings.timezone; + + // replace selected volume + settings.disk = m_InstallSettings.disk; + m_InstallSettings = settings; } diff --git a/src/systeminstaller.h b/src/systeminstaller.h index bb337b0..2e422c3 100644 --- a/src/systeminstaller.h +++ b/src/systeminstaller.h @@ -1,6 +1,9 @@ #pragma once #include +#include + +#include "tools.h" class QPushButton; class QLabel; @@ -28,6 +31,10 @@ private slots: void completePartitioning(); void volumeSelect(QString volume); + void configurationSelect(InstallerSettings settings); + +signals: + void selecteConfiguration(InstallerSettings settings); private: // ui @@ -39,5 +46,7 @@ private: PageManager* m_PageManager; PageCfdisk* m_PageCfdisk; + + InstallerSettings m_InstallSettings; }; diff --git a/src/tools.h b/src/tools.h index e2af773..13bbf63 100644 --- a/src/tools.h +++ b/src/tools.h @@ -2,4 +2,13 @@ #include +struct InstallerSettings +{ + QString disk; + QString host; + QString language; + QString fs; + QString timezone; +}; + QString LoadTextFile(const QString& name);