|
|
|
#include "systeminstaller.h"
|
|
|
|
|
|
|
|
#include <QtGui>
|
|
|
|
#include <QtGlobal>
|
|
|
|
|
|
|
|
#include <QIcon>
|
|
|
|
#include <QStackedWidget>
|
|
|
|
#include <QPushButton>
|
|
|
|
#include <QGroupBox>
|
|
|
|
#include <QLocale>
|
|
|
|
#include <QAction>
|
|
|
|
#include <QMenu>
|
|
|
|
|
|
|
|
#include "calculateconfig.h"
|
|
|
|
|
|
|
|
#include "pagemanager.h"
|
|
|
|
|
|
|
|
#include "pagewelcome.h"
|
|
|
|
#include "pagelicense.h"
|
|
|
|
#include "pagepartitioning.h"
|
|
|
|
#include "pagemountpoints.h"
|
|
|
|
#include "pageconfiguration.h"
|
|
|
|
#include "pageusers.h"
|
|
|
|
#include "pageinstall.h"
|
|
|
|
#include "pagefinish.h"
|
|
|
|
|
|
|
|
#include "pagecfdisk.h"
|
|
|
|
|
|
|
|
SystemInstaller::SystemInstaller(QWidget *parent) :
|
|
|
|
QMainWindow(parent),
|
|
|
|
m_Translator(new QTranslator)
|
|
|
|
{
|
|
|
|
bool installReady(true);
|
|
|
|
|
|
|
|
if ( !CalculateConfig::instance()->getDefaultConfig() )
|
|
|
|
{
|
|
|
|
QMessageBox::critical(this, tr("Critical error"), tr("Failed to launch 'cl-install'.") );
|
|
|
|
installReady = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// set os locale language
|
|
|
|
changeLanguage( CalculateConfig::instance()->getValue("os_locale_lang").toString() );
|
|
|
|
|
|
|
|
setupUi();
|
|
|
|
|
|
|
|
setupInstallerPages();
|
|
|
|
|
|
|
|
if ( !installReady )
|
|
|
|
m_butNext->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
SystemInstaller::~SystemInstaller()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::setupUi()
|
|
|
|
{
|
|
|
|
QWidget* centralWidget( new QWidget(this) );
|
|
|
|
|
|
|
|
// buttons
|
|
|
|
QHBoxLayout* hbox_buttons( new QHBoxLayout );
|
|
|
|
|
|
|
|
m_butPrev = new QPushButton;
|
|
|
|
m_butNext = new QPushButton;
|
|
|
|
m_butFinish = new QPushButton;
|
|
|
|
m_butFinish->setVisible(false);
|
|
|
|
|
|
|
|
hbox_buttons->addStretch();
|
|
|
|
hbox_buttons->addWidget( m_butPrev );
|
|
|
|
hbox_buttons->addWidget( m_butNext );
|
|
|
|
hbox_buttons->addWidget( m_butFinish );
|
|
|
|
|
|
|
|
// right pannel = widget for pages
|
|
|
|
m_stackPages = new QStackedWidget;
|
|
|
|
|
|
|
|
QVBoxLayout* vbox_1( new QVBoxLayout );
|
|
|
|
QGroupBox* group_box_page( new QGroupBox );
|
|
|
|
QVBoxLayout* group_box_page_l( new QVBoxLayout );
|
|
|
|
group_box_page_l->addWidget( m_stackPages );
|
|
|
|
|
|
|
|
group_box_page->setLayout( group_box_page_l );
|
|
|
|
|
|
|
|
vbox_1->addWidget( group_box_page );
|
|
|
|
|
|
|
|
// left pannel
|
|
|
|
// logo
|
|
|
|
m_labelImage = new QLabel;
|
|
|
|
m_labelImage->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
|
|
|
|
m_labelImage->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum );
|
|
|
|
m_labelImage->setMargin(10);
|
|
|
|
|
|
|
|
m_labelPages = new QLabel;
|
|
|
|
|
|
|
|
QGroupBox* group_box_list( new QGroupBox );
|
|
|
|
QVBoxLayout* group_box_list_l( new QVBoxLayout );
|
|
|
|
group_box_list_l->addWidget( m_labelImage );
|
|
|
|
group_box_list_l->addWidget( m_labelPages );
|
|
|
|
group_box_list_l->addStretch();
|
|
|
|
|
|
|
|
group_box_list->setLayout( group_box_list_l );
|
|
|
|
|
|
|
|
// cmd pannel
|
|
|
|
QGroupBox* cmd_grp = new QGroupBox;
|
|
|
|
m_labelInstCmd = new QLabel;
|
|
|
|
QFont fontCmd = QApplication::font();
|
|
|
|
fontCmd.setFamily("Droid Sans Mono");
|
|
|
|
m_labelInstCmd->setFont(fontCmd);
|
|
|
|
m_labelInstCmd->setWordWrap(true);
|
|
|
|
|
|
|
|
QHBoxLayout* cmd_layout = new QHBoxLayout;
|
|
|
|
cmd_layout->addWidget(m_labelInstCmd);
|
|
|
|
cmd_grp->setLayout(cmd_layout);
|
|
|
|
|
|
|
|
// left + right pannels
|
|
|
|
QHBoxLayout* hbox_2( new QHBoxLayout );
|
|
|
|
hbox_2->addWidget( group_box_list, 2 );
|
|
|
|
hbox_2->addLayout( vbox_1, 9);
|
|
|
|
|
|
|
|
QVBoxLayout* vbox_main( new QVBoxLayout );
|
|
|
|
vbox_main->addLayout( hbox_2 );
|
|
|
|
vbox_main->addWidget( cmd_grp );
|
|
|
|
vbox_main->addLayout( hbox_buttons );
|
|
|
|
|
|
|
|
centralWidget->setLayout(vbox_main);
|
|
|
|
setCentralWidget( centralWidget );
|
|
|
|
|
|
|
|
// set windows icon
|
|
|
|
QIcon icon( ":/img/calculate-icon.png" );
|
|
|
|
setWindowIcon(icon);
|
|
|
|
|
|
|
|
// minimum size for window TODO: remove magic numbers, add other sizes?
|
|
|
|
//setMinimumSize(800, 600);
|
|
|
|
//setMaximumSize(800, 600);
|
|
|
|
setMinimumSize(800, 600);
|
|
|
|
setMaximumSize(800, 600);
|
|
|
|
QRect scr = QApplication::desktop()->screenGeometry();
|
|
|
|
move( scr.width() - scr.width()/2 - 800/2, scr.height() - scr.height()/2 - 600/2 );
|
|
|
|
|
|
|
|
QImage logo = QImage(":/img/calculate-logo.png").scaledToWidth( 120, Qt::SmoothTransformation);
|
|
|
|
m_labelImage->setPixmap( QPixmap::fromImage(logo) );
|
|
|
|
|
|
|
|
m_actCopy = new QAction( this );
|
|
|
|
//m_actCopy->setShortcut( QKeySequence("Ctrl+C") );
|
|
|
|
connect( m_actCopy, SIGNAL(triggered()), this, SLOT(copyCmd()) );
|
|
|
|
|
|
|
|
m_menuCopy = new QMenu(this);
|
|
|
|
m_menuCopy->addAction(m_actCopy);
|
|
|
|
|
|
|
|
m_labelInstCmd->setContextMenuPolicy(Qt::CustomContextMenu);
|
|
|
|
connect( m_labelInstCmd, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showCopyMenu(QPoint)) );
|
|
|
|
|
|
|
|
connect( CalculateConfig::instance(), SIGNAL(sendParameters(QStringList)), this, SLOT(showCmd(QStringList)) );
|
|
|
|
|
|
|
|
retranslateUi();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::setupInstallerPages()
|
|
|
|
{
|
|
|
|
// create PageManager and pages
|
|
|
|
m_PageManager.reset( new PageManager(m_stackPages, m_labelPages, this) );
|
|
|
|
connect( m_PageManager.data(), SIGNAL(changeNext(bool)), this, SLOT(changeNext(bool)) );
|
|
|
|
connect( m_PageManager.data(), SIGNAL(changePrev(bool)), this, SLOT(changePrev(bool)) );
|
|
|
|
|
|
|
|
PageWelcome* pageLanguage( new PageWelcome );
|
|
|
|
connect( pageLanguage, SIGNAL(changeLanguage(QString)), this, SLOT(changeLanguage(QString)) );
|
|
|
|
m_PageManager->addPage(pageLanguage);
|
|
|
|
|
|
|
|
PageLicense* pageLicense( new PageLicense );
|
|
|
|
m_PageManager->addPage(pageLicense);
|
|
|
|
|
|
|
|
PagePartitioning* pagePartitoning( new PagePartitioning );
|
|
|
|
connect( pagePartitoning, SIGNAL(manualyPartitioning(QString)), this, SLOT(doPartitioning(QString)) );
|
|
|
|
m_PageManager->addPage(pagePartitoning);
|
|
|
|
|
|
|
|
PageMountPoints* pageMountPoints( new PageMountPoints );
|
|
|
|
m_PageManager->addPage(pageMountPoints);
|
|
|
|
|
|
|
|
PageConfiguration* pageConfiguration( new PageConfiguration );
|
|
|
|
m_PageManager->addPage(pageConfiguration);
|
|
|
|
|
|
|
|
PageUsers* pageUsers( new PageUsers );
|
|
|
|
m_PageManager->addPage( pageUsers );
|
|
|
|
|
|
|
|
PageInstall* pageInstall( new PageInstall );
|
|
|
|
m_PageManager->addPage(pageInstall);
|
|
|
|
|
|
|
|
PageFinish* pageFinish( new PageFinish );
|
|
|
|
connect( pageFinish, SIGNAL(toggleButtons(bool)), this, SLOT(toggleButtons(bool)) );
|
|
|
|
m_PageManager->addPage(pageFinish);
|
|
|
|
|
|
|
|
m_PageManager->showFirst();
|
|
|
|
|
|
|
|
connect( m_butNext, SIGNAL(clicked()), m_PageManager.data(), SLOT(showNext()) );
|
|
|
|
connect( m_butPrev, SIGNAL(clicked()), m_PageManager.data(), SLOT(showPrevious()) );
|
|
|
|
connect( m_butFinish, SIGNAL(clicked()), this, SLOT(close()) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::retranslateUi()
|
|
|
|
{
|
|
|
|
m_butPrev->setText( tr("Prevoius") );
|
|
|
|
m_butNext->setText( tr("Next") );
|
|
|
|
m_butFinish->setText( tr("Finish") );
|
|
|
|
|
|
|
|
m_actCopy->setText( tr("Copy") );
|
|
|
|
|
|
|
|
if (m_PageManager)
|
|
|
|
m_PageManager->retranslatePages();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::setTranslator(QTranslator* translator)
|
|
|
|
{
|
|
|
|
removeTranslator();
|
|
|
|
m_Translator = translator;
|
|
|
|
qApp->installTranslator(translator);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::removeTranslator()
|
|
|
|
{
|
|
|
|
if (m_Translator)
|
|
|
|
{
|
|
|
|
delete m_Translator;
|
|
|
|
m_Translator = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::changeLanguage(QString lang)
|
|
|
|
{
|
|
|
|
qDebug() << "New language: " + lang;
|
|
|
|
|
|
|
|
m_CurrentLanguage = lang;
|
|
|
|
|
|
|
|
// save global config for locale
|
|
|
|
CalculateConfig::instance()->setValue( "gui_locale_language", QVariant(lang) );
|
|
|
|
qDebug() << "Var \"gui_locale_language\" = " << lang;
|
|
|
|
|
|
|
|
QTranslator* translator( new QTranslator );
|
|
|
|
|
|
|
|
translator->load("/usr/share/cl-install-gui/cl-install-gui_" + lang);
|
|
|
|
//qDebug() << "/usr/share/cl-install-gui/cl-install-gui_" + lang + ".qm";
|
|
|
|
|
|
|
|
setTranslator(translator);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::changeEvent(QEvent* event)
|
|
|
|
{
|
|
|
|
switch (event->type())
|
|
|
|
{
|
|
|
|
case QEvent::LanguageChange:
|
|
|
|
retranslateUi();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
QWidget::changeEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SystemInstaller::changeNext(bool state)
|
|
|
|
{
|
|
|
|
m_butNext->setEnabled(state);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::changePrev(bool state)
|
|
|
|
{
|
|
|
|
m_butPrev->setEnabled(state);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::toggleButtons(bool state)
|
|
|
|
{
|
|
|
|
m_butNext->setVisible(state);
|
|
|
|
m_butPrev->setVisible(state);
|
|
|
|
m_butFinish->setVisible(!state);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::doPartitioning(QString disk)
|
|
|
|
{
|
|
|
|
m_PageCfdisk = new PageCfdisk( "cfdisk", disk );
|
|
|
|
m_PageManager->showOnce(m_PageCfdisk);
|
|
|
|
connect( m_PageCfdisk, SIGNAL(completed()), this, SLOT(completePartitioning()) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::completePartitioning()
|
|
|
|
{
|
|
|
|
delete m_PageCfdisk;
|
|
|
|
m_PageManager->showPrevious();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::showCopyMenu(const QPoint& point)
|
|
|
|
{
|
|
|
|
m_menuCopy->popup( m_labelInstCmd->mapToGlobal(point) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::copyCmd()
|
|
|
|
{
|
|
|
|
QClipboard* clipboard = QApplication::clipboard();
|
|
|
|
clipboard->setText( m_labelInstCmd->text() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SystemInstaller::showCmd( QStringList params )
|
|
|
|
{
|
|
|
|
if (params.count() > 0)
|
|
|
|
{
|
|
|
|
QString cmd("cl-install");
|
|
|
|
|
|
|
|
foreach(const QString& param, params)
|
|
|
|
cmd += " " + param;
|
|
|
|
|
|
|
|
m_labelInstCmd->setText(cmd);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_labelInstCmd->clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|