From a79575afe8921061b8b129841c2636f8f4f2dbca Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 12 Nov 2015 18:17:21 +0100 Subject: [PATCH] Create erase button in a separate method. --- src/modules/partition/gui/ChoicePage.cpp | 123 ++++++++++++----------- src/modules/partition/gui/ChoicePage.h | 1 + 2 files changed, 67 insertions(+), 57 deletions(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index eb6cfbdf3..4aaf23e14 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -205,64 +205,8 @@ ChoicePage::setupChoices() iconSize ) ); grp->addButton( m_alongsideButton->buttonWidget() ); - m_eraseButton = new ExpandableRadioButton; - if ( !m_isEfi ) - { - QWidget* eraseWidget = new QWidget; - { - QHBoxLayout* eraseLayout = new QHBoxLayout; - eraseWidget->setLayout( eraseLayout ); - eraseLayout->setContentsMargins( 0, 0, 0, 0 ); - QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); - eraseLayout->addWidget( eraseBootloaderLabel ); - eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); - QComboBox* eraseBootloaderCombo = new QComboBox; - eraseLayout->addWidget( eraseBootloaderCombo ); - eraseBootloaderLabel->setBuddy( eraseBootloaderCombo ); - eraseBootloaderCombo->setModel( m_core->bootLoaderModel() ); - eraseLayout->addStretch(); - - // When the chosen bootloader device changes, we update the choice in the PCM - connect( eraseBootloaderCombo, static_cast< void (QComboBox::*)(int) >( &QComboBox::currentIndexChanged ), - [=]( int newIndex ) - { - QVariant var = eraseBootloaderCombo->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); - if ( !var.isValid() ) - return; - m_core->setBootLoaderInstallPath( var.toString() ); - } ); + m_eraseButton = createEraseButton(); - // If the user picks a new device, we update the bootloader choice to that - // same device automatically. - auto updateBootloaderDevice = [eraseBootloaderCombo]( Device* currd ) - { - if ( !currd ) - return; - QString devPath = currd->deviceNode(); - for ( int i = 0; i < eraseBootloaderCombo->count(); ++i ) - { - QVariant var = eraseBootloaderCombo->itemData( i , BootLoaderModel::BootLoaderPathRole ); - if ( !var.isValid() ) - continue; - if ( var.toString() == devPath ) - { - eraseBootloaderCombo->setCurrentIndex( i ); - return; - } - } - }; - connect( this, &ChoicePage::deviceChosen, - this, updateBootloaderDevice ); - connect( m_eraseButton, &ExpandableRadioButton::expanded, - this, [=]( bool expanded ) - { - if ( expanded ) - updateBootloaderDevice( selectedDevice() ); - }, Qt::QueuedConnection ); - // ^ Must be Queued so it's sure to run when the widget is already visible. - } - m_eraseButton->setExpandableWidget( eraseWidget ); - } m_eraseButton->setIconSize( iconSize ); m_eraseButton->setIcon( CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionEraseAuto, CalamaresUtils::Original, @@ -363,6 +307,71 @@ ChoicePage::setupChoices() } +ExpandableRadioButton* +ChoicePage::createEraseButton() +{ + ExpandableRadioButton* eraseButton = new ExpandableRadioButton; + if ( !m_isEfi ) + { + QWidget* eraseWidget = new QWidget; + + QHBoxLayout* eraseLayout = new QHBoxLayout; + eraseWidget->setLayout( eraseLayout ); + eraseLayout->setContentsMargins( 0, 0, 0, 0 ); + QLabel* eraseBootloaderLabel = new QLabel( eraseWidget ); + eraseLayout->addWidget( eraseBootloaderLabel ); + eraseBootloaderLabel->setText( tr( "Boot loader location:" ) ); + QComboBox* eraseBootloaderCombo = new QComboBox; + eraseLayout->addWidget( eraseBootloaderCombo ); + eraseBootloaderLabel->setBuddy( eraseBootloaderCombo ); + eraseBootloaderCombo->setModel( m_core->bootLoaderModel() ); + eraseLayout->addStretch(); + + // When the chosen bootloader device changes, we update the choice in the PCM + connect( eraseBootloaderCombo, static_cast< void (QComboBox::*)(int) >( &QComboBox::currentIndexChanged ), + [=]( int newIndex ) + { + QVariant var = eraseBootloaderCombo->itemData( newIndex, BootLoaderModel::BootLoaderPathRole ); + if ( !var.isValid() ) + return; + m_core->setBootLoaderInstallPath( var.toString() ); + } ); + + // If the user picks a new device, we update the bootloader choice to that + // same device automatically. + auto updateBootloaderDevice = [eraseBootloaderCombo]( Device* currd ) + { + if ( !currd ) + return; + QString devPath = currd->deviceNode(); + for ( int i = 0; i < eraseBootloaderCombo->count(); ++i ) + { + QVariant var = eraseBootloaderCombo->itemData( i , BootLoaderModel::BootLoaderPathRole ); + if ( !var.isValid() ) + continue; + if ( var.toString() == devPath ) + { + eraseBootloaderCombo->setCurrentIndex( i ); + return; + } + } + }; + connect( this, &ChoicePage::deviceChosen, + this, updateBootloaderDevice ); + connect( eraseButton, &ExpandableRadioButton::expanded, + this, [=]( bool expanded ) + { + if ( expanded ) + updateBootloaderDevice( selectedDevice() ); + }, Qt::QueuedConnection ); + // ^ Must be Queued so it's sure to run when the widget is already visible. + + eraseButton->setExpandableWidget( eraseWidget ); + } + return eraseButton; +} + + /** * @brief ChoicePage::selectedDevice queries the device picker (which may be a combo or * a list view) to get a pointer to the currently selected Device. diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index e261bb63d..512f86201 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -69,6 +69,7 @@ private: bool compact(); void setNextEnabled( bool enabled ); void setupChoices(); + ExpandableRadioButton* createEraseButton(); Device* selectedDevice(); void applyDeviceChoice(); void updateDeviceStatePreview( Device* currentDevice );