diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 2652567d2..a11aec48b 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -43,13 +43,15 @@ // Qt #include #include +#include -EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, QWidget* parentWidget ) +EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) , m_partition( partition ) , m_partitionSizeController( new PartitionSizeController( this ) ) + , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); @@ -60,11 +62,14 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit mountPoints.sort(); m_ui->mountPointComboBox->addItems( mountPoints ); + m_usedMountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); + QColor color = ColorUtils::colorForPartition( m_partition ); m_partitionSizeController->init( m_device, m_partition, color ); m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); m_ui->mountPointComboBox->setCurrentText( PartitionInfo::mountPoint( partition ) ); + connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &EditExistingPartitionDialog::checkMountPointSelection ); replacePartResizerWidget(); @@ -291,3 +296,17 @@ EditExistingPartitionDialog::updateMountPointPicker() if ( !canMount ) m_ui->mountPointComboBox->setCurrentText( QString() ); } + +void +EditExistingPartitionDialog::checkMountPointSelection() +{ + const QString& selection = m_ui->mountPointComboBox->currentText(); + + if (m_usedMountPoints.contains(selection)) { + m_ui->labelMountPoint->setText("Mountpoint already in use. Please select another one."); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + } else { + m_ui->labelMountPoint->setText( QString() ); + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + } +} diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.h b/src/modules/partition/gui/EditExistingPartitionDialog.h index 0aa89bb98..83552fe55 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.h +++ b/src/modules/partition/gui/EditExistingPartitionDialog.h @@ -40,16 +40,20 @@ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: - EditExistingPartitionDialog( Device* device, Partition* partition, QWidget* parentWidget = nullptr ); + EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~EditExistingPartitionDialog(); void applyChanges( PartitionCoreModule* module ); +private slots: + void checkMountPointSelection(); + private: QScopedPointer< Ui_EditExistingPartitionDialog > m_ui; Device* m_device; Partition* m_partition; PartitionSizeController* m_partitionSizeController; + QStringList m_usedMountPoints; PartitionTable::Flags newFlags() const; void setupFlagsList(); diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index 9ed7e1bb4..27e930fda 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -139,14 +139,14 @@ - + Flags: - + true @@ -159,6 +159,18 @@ + + + + + true + + + + + + + diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 438d89b3d..6fa64fda8 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -280,7 +280,7 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) void PartitionPage::editExistingPartition( Device* device, Partition* partition ) { - QPointer dlg = new EditExistingPartitionDialog( device, partition, this ); + QPointer dlg = new EditExistingPartitionDialog( device, partition, getCurrentUsedMountpoints(), this ); if ( dlg->exec() == QDialog::Accepted ) dlg->applyChanges( m_core ); delete dlg;