Merge branch 'issue-1098'

- Doesn't fix the issue, but adds useful things I want in master
   already, also for debugging other issues.
This commit is contained in:
Adriaan de Groot 2019-03-01 07:09:45 -05:00
commit fdb4311a70
4 changed files with 57 additions and 36 deletions

View File

@ -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 );

View File

@ -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();

View File

@ -56,7 +56,6 @@
#include <kpmcore/ops/removevolumegroupoperation.h>
// Qt
#include <QDebug>
#include <QHeaderView>
#include <QItemSelectionModel>
#include <QMessageBox>
@ -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<void(QComboBox::*)(const QString &)>(&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<int>::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()
{

View File

@ -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();
/**