diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 4e8b7e8ba..5cf8101f9 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -43,6 +43,25 @@ namespace PartUtils { +static QString +convenienceName( const Partition* const candidate ) +{ + if ( !candidate->mountPoint().isEmpty() ) + return candidate->mountPoint(); + if ( !candidate->partitionPath().isEmpty() ) + return candidate->partitionPath(); + if ( !candidate->devicePath().isEmpty() ) + return candidate->devicePath(); + if ( !candidate->deviceNode().isEmpty() ) + return candidate->devicePath(); + + QString p; + QTextStream s( &p ); + s << (void *)candidate; + + return p; +} + bool canBeReplaced( Partition* candidate ) { @@ -64,12 +83,12 @@ canBeReplaced( Partition* candidate ) << QString( "(%1GB)" ).arg( requiredStorageB / 1024 / 1024 / 1024 ); cDebug() << "Storage capacity B:" << availableStorageB << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) - << "for" << candidate->partitionPath() << " length:" << candidate->length(); + << "for" << convenienceName( candidate ) << " length:" << candidate->length(); if ( ok && availableStorageB > requiredStorageB ) { - cDebug() << "Partition" << candidate->partitionPath() << "authorized for replace install."; + cDebug() << "Partition" << convenienceName( candidate ) << "authorized for replace install."; return true; } @@ -86,7 +105,7 @@ canBeResized( Partition* candidate ) return false; } - cDebug() << "Checking if" << candidate->partitionPath() << "can be resized."; + cDebug() << "Checking if" << convenienceName( candidate ) << "can be resized."; if ( !candidate->fileSystem().supportGrow() || !candidate->fileSystem().supportShrink() ) { @@ -140,13 +159,13 @@ canBeResized( Partition* candidate ) << QString( "(%1GB)" ).arg( advisedStorageGB ); cDebug() << "Available storage B:" << availableStorageB << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) - << "for" << candidate->partitionPath() << " length:" << candidate->length() + << "for" << convenienceName( candidate ) << " length:" << candidate->length() << " sectorsUsed:" << candidate->sectorsUsed() << " fsType:" << candidate->fileSystem().name(); if ( ok && availableStorageB > advisedStorageB ) { - cDebug() << "Partition" << candidate->partitionPath() << "authorized for resize + autopartition install."; + cDebug() << "Partition" << convenienceName( candidate ) << "authorized for resize + autopartition install."; return true; } @@ -382,7 +401,7 @@ isEfiSystem() bool isEfiBootable( const Partition* candidate ) { - cDebug() << "Check EFI bootable" << candidate->partitionPath() << candidate->devicePath(); + cDebug() << "Check EFI bootable" << convenienceName( candidate ) << candidate->devicePath(); cDebug() << " .. flags" << candidate->activeFlags(); auto flags = PartitionInfo::flags( candidate ); diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index c48c1562c..743f9c178 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -154,6 +154,9 @@ public: void setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ); + /// @brief Retrieve the path where the bootloader will be installed + QString bootLoaderInstallPath() const { return m_bootLoaderInstallPath; } + /// @brief Set the path where the bootloader will be installed void setBootLoaderInstallPath( const QString& path ); void initLayout(); diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 2743ec53a..ba6845020 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -56,7 +56,6 @@ #include // Qt -#include #include #include #include @@ -90,22 +89,9 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) updateFromCurrentDevice(); - connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, - [ this ]( const QString& /* text */ ) - { - updateFromCurrentDevice(); - } ); - connect( m_ui->bootLoaderComboBox, static_cast(&QComboBox::activated), - [ this ]( const QString& /* text */ ) - { - m_lastSelectedBootLoaderIndex = m_ui->bootLoaderComboBox->currentIndex(); - } ); - - connect( m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, - [ this ]( const QString& /* text */ ) - { - updateBootLoaderInstallPath(); - } ); + connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateFromCurrentDevice ); + connect( m_ui->bootLoaderComboBox, QOverload::of(&QComboBox::activated), this, &PartitionPage::updateSelectedBootLoaderIndex ); + connect( m_ui->bootLoaderComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateBootLoaderInstallPath ); connect( m_core, &PartitionCoreModule::isDirtyChanged, m_ui->revertButton, &QWidget::setEnabled ); @@ -376,18 +362,18 @@ PartitionPage::onCreateClicked() if ( !checkCanCreate( model->device() ) ) return; - QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( model->device(), - partition->parent(), - nullptr, - getCurrentUsedMountpoints(), - this ); - dlg->initFromFreeSpace( partition ); - if ( dlg->exec() == QDialog::Accepted ) + CreatePartitionDialog dlg( + model->device(), + partition->parent(), + nullptr, + getCurrentUsedMountpoints(), + this ); + dlg.initFromFreeSpace( partition ); + if ( dlg.exec() == QDialog::Accepted ) { - Partition* newPart = dlg->createPartition(); - m_core->createPartition( model->device(), newPart, dlg->newFlags() ); + Partition* newPart = dlg.createPartition(); + m_core->createPartition( model->device(), newPart, dlg.newFlags() ); } - delete dlg; } void @@ -508,10 +494,17 @@ PartitionPage::updateBootLoaderInstallPath() QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; - qDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); + cDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } +void +PartitionPage::updateSelectedBootLoaderIndex() +{ + m_lastSelectedBootLoaderIndex = m_ui->bootLoaderComboBox->currentIndex(); + cDebug() << "Selected bootloader index" << m_lastSelectedBootLoaderIndex; +} + void PartitionPage::updateFromCurrentDevice() { diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index 8289f2cdd..75d39c9dc 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -50,6 +50,14 @@ public: int selectedDeviceIndex(); void selectDeviceByIndex( int index ); +private slots: + /// @brief Update everything when the base device changes + void updateFromCurrentDevice(); + /// @brief Update when the selected device for boot loader changes + void updateBootLoaderInstallPath(); + /// @brief Explicitly selected boot loader path + void updateSelectedBootLoaderIndex(); + private: QScopedPointer< Ui_PartitionPage > m_ui; PartitionCoreModule* m_core; @@ -67,8 +75,6 @@ private: void updatePartitionToCreate( Device*, Partition* ); void editExistingPartition( Device*, Partition* ); - void updateBootLoaderInstallPath(); - void updateFromCurrentDevice(); void updateBootLoaderIndex(); /**