#include "systeminstaller.h" #include #include #include #include #include #include #include #include "pagemanager.h" #include "pagewelcome.h" #include "pagelicense.h" #include "pagepartitioning.h" #include "pageconfiguration.h" #include "pageinstall.h" #include "pagefinish.h" #include "pagecfdisk.h" SystemInstaller::SystemInstaller(QWidget *parent) : QMainWindow(parent), m_Translator(new QTranslator) { //m_CurrentLanguage = QLocale::system().name(); m_CurrentLanguage = QString(qgetenv("LANG")).split(".").first(); changeLanguage(m_CurrentLanguage); setupUi(); setupInstallerPages(); } 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 + buttons 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 ); vbox_1->addLayout( hbox_buttons ); // left pannel // logo m_labelImage = new QLabel; m_labelImage->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter ); m_labelImage->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); 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 ); // left + right pannels QHBoxLayout* hbox_2( new QHBoxLayout ); hbox_2->addWidget( group_box_list, 2 ); hbox_2->addLayout( vbox_1, 9); centralWidget->setLayout(hbox_2); 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); 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) ); retranslateUi(); } void SystemInstaller::setupInstallerPages() { // create PageManager and pages m_PageManager.reset( new PageManager(m_stackPages, m_labelPages, this) ); PageWelcome* pageLanguage( new PageWelcome(&m_CurrentLanguage) ); connect( pageLanguage, SIGNAL(changeNext(bool)), this, SLOT(changeNext(bool)) ); connect( pageLanguage, SIGNAL(changeLanguage(QString)), this, SLOT(changeLanguage(QString)) ); m_PageManager->addPage(pageLanguage); PageLicense* pageLicense( new PageLicense ); connect( pageLicense, SIGNAL(changeNext(bool)), this, SLOT(changeNext(bool)) ); m_PageManager->addPage(pageLicense); PagePartitioning* pagePartitoning( new PagePartitioning ); connect( pagePartitoning, SIGNAL(changeNext(bool)), this, SLOT(changeNext(bool)) ); connect( pagePartitoning, SIGNAL(manualyPartitioning(QString)), this, SLOT(doPartitioning(QString)) ); connect( pagePartitoning, SIGNAL(selectedVolume(QString)), this, SLOT(selectVolume(QString)) ); m_PageManager->addPage(pagePartitoning); PageConfiguration* pageConfiguration( new PageConfiguration(&m_CurrentLanguage) ); connect( pageConfiguration, SIGNAL(selectedSettings(InstallerSettings)), this, SLOT(selectConfiguration(InstallerSettings)) ); m_PageManager->addPage(pageConfiguration); PageInstall* pageInstall( new PageInstall( &m_InstallSettings ) ); connect( pageInstall, SIGNAL(changeNext(bool)), this, SLOT(changeNext(bool)) ); connect( pageInstall, SIGNAL(changePrev(bool)), this, SLOT(changePrev(bool)) ); 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") ); 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; // QLocale::setDefault( QLocale(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::selectVolume(QString volume) { m_InstallSettings.disk = volume; } 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::selectConfiguration(InstallerSettings settings) { // replace selected volume settings.disk = m_InstallSettings.disk; m_InstallSettings = settings; }