mirror of
https://github.com/parchlinux/calamares.git
synced 2025-06-28 01:45:36 -04:00
[partition] Adding resizing, deactivating and removing procedures for LVM VGs.
This commit is contained in:
parent
98a158c6e5
commit
295e14530e
18 changed files with 738 additions and 41 deletions
|
@ -28,13 +28,16 @@
|
|||
CreateVolumeGroupDialog::CreateVolumeGroupDialog( QString& vgName,
|
||||
QVector< const Partition* >& selectedPVs,
|
||||
QVector< const Partition* > pvList,
|
||||
qint32& peSize,
|
||||
qint64& pSize,
|
||||
QWidget* parent )
|
||||
: VolumeGroupBaseDialog( vgName, pvList, peSize, parent )
|
||||
: VolumeGroupBaseDialog( vgName, pvList, parent )
|
||||
, m_selectedPVs( selectedPVs )
|
||||
, m_peSize( pSize )
|
||||
{
|
||||
setWindowTitle( "Create Volume Group" );
|
||||
|
||||
peSize()->setValue( pSize );
|
||||
|
||||
vgType()->setEnabled( false );
|
||||
}
|
||||
|
||||
|
@ -46,7 +49,7 @@ CreateVolumeGroupDialog::accept()
|
|||
|
||||
m_selectedPVs << checkedItems();
|
||||
|
||||
qint32& pe = peSizeValue();
|
||||
qint64& pe = m_peSize;
|
||||
pe = peSize()->value();
|
||||
|
||||
QDialog::accept();
|
||||
|
|
|
@ -27,13 +27,15 @@ public:
|
|||
CreateVolumeGroupDialog( QString& vgName,
|
||||
QVector< const Partition* >& selectedPVs,
|
||||
QVector< const Partition* > pvList,
|
||||
qint32& peSize,
|
||||
qint64& pSize,
|
||||
QWidget* parent );
|
||||
|
||||
void accept() override;
|
||||
|
||||
private:
|
||||
QVector< const Partition* >& m_selectedPVs;
|
||||
|
||||
qint64& m_peSize;
|
||||
};
|
||||
|
||||
#endif // CREATEVOLUMEGROUPDIALOG_H
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "gui/CreatePartitionDialog.h"
|
||||
#include "gui/CreateVolumeGroupDialog.h"
|
||||
#include "gui/EditExistingPartitionDialog.h"
|
||||
#include "gui/ResizeVolumeGroupDialog.h"
|
||||
#include "gui/ScanningDialog.h"
|
||||
|
||||
#include "ui_PartitionPage.h"
|
||||
|
@ -43,6 +44,8 @@
|
|||
// KPMcore
|
||||
#include <kpmcore/core/device.h>
|
||||
#include <kpmcore/core/partition.h>
|
||||
#include <kpmcore/ops/deactivatevolumegroupoperation.h>
|
||||
#include <kpmcore/ops/removevolumegroupoperation.h>
|
||||
|
||||
// Qt
|
||||
#include <QDebug>
|
||||
|
@ -101,6 +104,9 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent )
|
|||
connect( m_ui->partitionTreeView, &QAbstractItemView::doubleClicked, this, &PartitionPage::onPartitionViewActivated );
|
||||
connect( m_ui->revertButton, &QAbstractButton::clicked, this, &PartitionPage::onRevertClicked );
|
||||
connect( m_ui->newVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onNewVolumeGroupClicked );
|
||||
connect( m_ui->resizeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onResizeVolumeGroupClicked );
|
||||
connect( m_ui->deactivateVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onDeactivateVolumeGroupClicked );
|
||||
connect( m_ui->removeVolumeGroupButton, &QAbstractButton::clicked, this, &PartitionPage::onRemoveVolumeGroupClicked );
|
||||
connect( m_ui->newPartitionTableButton, &QAbstractButton::clicked, this, &PartitionPage::onNewPartitionTableClicked );
|
||||
connect( m_ui->createButton, &QAbstractButton::clicked, this, &PartitionPage::onCreateClicked );
|
||||
connect( m_ui->editButton, &QAbstractButton::clicked, this, &PartitionPage::onEditClicked );
|
||||
|
@ -121,7 +127,8 @@ PartitionPage::~PartitionPage()
|
|||
void
|
||||
PartitionPage::updateButtons()
|
||||
{
|
||||
bool create = false, createTable = false, edit = false, del = false;
|
||||
bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, isDeactivable = false;
|
||||
bool isRemovable = false, isVGdeactivated = false;
|
||||
|
||||
QModelIndex index = m_ui->partitionTreeView->currentIndex();
|
||||
if ( index.isValid() )
|
||||
|
@ -152,12 +159,28 @@ PartitionPage::updateButtons()
|
|||
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
||||
if ( m_core->deviceModel()->deviceForIndex( deviceIndex )->type() != Device::Type::LVM_Device )
|
||||
createTable = true;
|
||||
else
|
||||
{
|
||||
currentDeviceIsVG = true;
|
||||
|
||||
LvmDevice* lvmDevice = dynamic_cast<LvmDevice*>(m_core->deviceModel()->deviceForIndex( deviceIndex ));
|
||||
|
||||
isDeactivable = DeactivateVolumeGroupOperation::isDeactivatable( lvmDevice );
|
||||
isRemovable = RemoveVolumeGroupOperation::isRemovable( lvmDevice );
|
||||
|
||||
isVGdeactivated = m_core->isVGdeactivated( lvmDevice );
|
||||
|
||||
m_ui->revertButton->setEnabled( isVGdeactivated );
|
||||
}
|
||||
}
|
||||
|
||||
m_ui->createButton->setEnabled( create );
|
||||
m_ui->editButton->setEnabled( edit );
|
||||
m_ui->deleteButton->setEnabled( del );
|
||||
m_ui->newPartitionTableButton->setEnabled( createTable );
|
||||
m_ui->resizeVolumeGroupButton->setEnabled( currentDeviceIsVG && !isVGdeactivated );
|
||||
m_ui->deactivateVolumeGroupButton->setEnabled( currentDeviceIsVG && isDeactivable && !isVGdeactivated );
|
||||
m_ui->removeVolumeGroupButton->setEnabled( currentDeviceIsVG && isRemovable );
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -188,7 +211,7 @@ PartitionPage::onNewVolumeGroupClicked()
|
|||
{
|
||||
QString vgName;
|
||||
QVector< const Partition* > selectedPVs;
|
||||
qint32 peSize = 4;
|
||||
qint64 peSize = 4;
|
||||
|
||||
QVector< const Partition* > availablePVs;
|
||||
|
||||
|
@ -238,6 +261,59 @@ PartitionPage::onNewVolumeGroupClicked()
|
|||
delete dlg;
|
||||
}
|
||||
|
||||
void
|
||||
PartitionPage::onResizeVolumeGroupClicked()
|
||||
{
|
||||
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
||||
LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) );
|
||||
|
||||
Q_ASSERT( device && device->type() == Device::Type::LVM_Device );
|
||||
|
||||
QVector< const Partition* > availablePVs;
|
||||
QVector< const Partition* > selectedPVs;
|
||||
|
||||
for ( const Partition* p : m_core->lvmPVs() )
|
||||
if ( !m_core->isInVG( p ) )
|
||||
availablePVs << p;
|
||||
|
||||
QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device,
|
||||
availablePVs,
|
||||
selectedPVs,
|
||||
this );
|
||||
|
||||
if ( dlg->exec() == QDialog::Accepted )
|
||||
m_core->resizeVolumeGroup( device, selectedPVs );
|
||||
|
||||
delete dlg;
|
||||
}
|
||||
|
||||
void
|
||||
PartitionPage::onDeactivateVolumeGroupClicked()
|
||||
{
|
||||
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
||||
LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) );
|
||||
|
||||
Q_ASSERT( device && device->type() == Device::Type::LVM_Device );
|
||||
|
||||
m_core->deactivateVolumeGroup( device );
|
||||
|
||||
updateFromCurrentDevice();
|
||||
|
||||
PartitionModel* model = m_core->partitionModelForDevice( device );
|
||||
model->update();
|
||||
}
|
||||
|
||||
void
|
||||
PartitionPage::onRemoveVolumeGroupClicked()
|
||||
{
|
||||
QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 );
|
||||
LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) );
|
||||
|
||||
Q_ASSERT( device && device->type() == Device::Type::LVM_Device );
|
||||
|
||||
m_core->removeVolumeGroup( device );
|
||||
}
|
||||
|
||||
void
|
||||
PartitionPage::onCreateClicked()
|
||||
{
|
||||
|
|
|
@ -51,6 +51,9 @@ private:
|
|||
void updateButtons();
|
||||
void onNewPartitionTableClicked();
|
||||
void onNewVolumeGroupClicked();
|
||||
void onResizeVolumeGroupClicked();
|
||||
void onDeactivateVolumeGroupClicked();
|
||||
void onRemoveVolumeGroupClicked();
|
||||
void onCreateClicked();
|
||||
void onEditClicked();
|
||||
void onDeleteClicked();
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>655</width>
|
||||
<width>684</width>
|
||||
<height>304</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
@ -88,13 +88,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="newVolumeGroupButton">
|
||||
<property name="text">
|
||||
<string>New Volume Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
|
@ -131,6 +124,51 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QPushButton" name="newVolumeGroupButton">
|
||||
<property name="text">
|
||||
<string>New Volume Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="resizeVolumeGroupButton">
|
||||
<property name="text">
|
||||
<string>Resize Volume Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="deactivateVolumeGroupButton">
|
||||
<property name="text">
|
||||
<string>Deactivate Volume Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="removeVolumeGroupButton">
|
||||
<property name="text">
|
||||
<string>Remove Volume Group</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
62
src/modules/partition/gui/ResizeVolumeGroupDialog.cpp
Normal file
62
src/modules/partition/gui/ResizeVolumeGroupDialog.cpp
Normal file
|
@ -0,0 +1,62 @@
|
|||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2018, Caio Jordão Carvalho <caiojcarvalho@gmail.com>
|
||||
*
|
||||
* Calamares is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Calamares is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ResizeVolumeGroupDialog.h"
|
||||
|
||||
#include "gui/ListPhysicalVolumeWidgetItem.h"
|
||||
|
||||
#include <kpmcore/core/lvmdevice.h>
|
||||
#include <kpmcore/util/capacity.h>
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QLineEdit>
|
||||
#include <QListWidgetItem>
|
||||
#include <QSpinBox>
|
||||
|
||||
ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice *device,
|
||||
QVector< const Partition* > availablePVs,
|
||||
QVector< const Partition* >& selectedPVs,
|
||||
QWidget* parent )
|
||||
: VolumeGroupBaseDialog( device->name(), device->physicalVolumes(), parent )
|
||||
, m_selectedPVs( selectedPVs )
|
||||
{
|
||||
setWindowTitle( "Resize Volume Group" );
|
||||
|
||||
for ( int i = 0; i < pvList()->count(); i++ )
|
||||
pvList()->item(i)->setCheckState( Qt::Checked );
|
||||
|
||||
for ( const Partition* p : availablePVs )
|
||||
pvList()->addItem( new ListPhysicalVolumeWidgetItem( p, false ) );
|
||||
|
||||
peSize()->setValue( device->peSize() / Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB) );
|
||||
|
||||
vgName()->setEnabled( false );
|
||||
peSize()->setEnabled( false );
|
||||
vgType()->setEnabled( false );
|
||||
|
||||
setUsedSizeValue( device->allocatedPE() * device->peSize() );
|
||||
setLVQuantity( device->partitionTable()->children().count() );
|
||||
}
|
||||
|
||||
void
|
||||
ResizeVolumeGroupDialog::accept()
|
||||
{
|
||||
m_selectedPVs << checkedItems();
|
||||
|
||||
QDialog::accept();
|
||||
}
|
40
src/modules/partition/gui/ResizeVolumeGroupDialog.h
Normal file
40
src/modules/partition/gui/ResizeVolumeGroupDialog.h
Normal file
|
@ -0,0 +1,40 @@
|
|||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2018, Caio Jordão Carvalho <caiojcarvalho@gmail.com>
|
||||
*
|
||||
* Calamares is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Calamares is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef RESIZEVOLUMEGROUPDIALOG_H
|
||||
#define RESIZEVOLUMEGROUPDIALOG_H
|
||||
|
||||
#include "gui/VolumeGroupBaseDialog.h"
|
||||
|
||||
class LvmDevice;
|
||||
|
||||
class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog
|
||||
{
|
||||
public:
|
||||
ResizeVolumeGroupDialog( LvmDevice *device,
|
||||
QVector< const Partition* > availablePVs,
|
||||
QVector< const Partition* >& selectedPVs,
|
||||
QWidget* parent );
|
||||
|
||||
void accept() override;
|
||||
|
||||
private:
|
||||
QVector< const Partition* >& m_selectedPVs;
|
||||
};
|
||||
|
||||
#endif // RESIZEVOLUMEGROUPDIALOG_H
|
|
@ -32,12 +32,10 @@
|
|||
|
||||
VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName,
|
||||
QVector< const Partition* > pvList,
|
||||
qint32& peSize,
|
||||
QWidget *parent )
|
||||
: QDialog(parent)
|
||||
, ui(new Ui::VolumeGroupBaseDialog)
|
||||
, m_vgNameValue(vgName)
|
||||
, m_peSizeValue(peSize)
|
||||
, m_totalSizeValue(0)
|
||||
, m_usedSizeValue(0)
|
||||
{
|
||||
|
@ -53,8 +51,6 @@ VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName,
|
|||
ui->vgName->setValidator( new QRegularExpressionValidator( re, this ) );
|
||||
ui->vgName->setText( m_vgNameValue );
|
||||
|
||||
ui->peSize->setValue( m_peSizeValue );
|
||||
|
||||
updateOkButton();
|
||||
updateTotalSize();
|
||||
|
||||
|
@ -111,6 +107,20 @@ VolumeGroupBaseDialog::updateOkButton()
|
|||
ui->peSize->value() > 0);
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize )
|
||||
{
|
||||
m_usedSizeValue = usedSize;
|
||||
|
||||
ui->usedSize->setText( Capacity::formatByteSize(m_usedSizeValue) );
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::setLVQuantity( qint32 lvQuantity )
|
||||
{
|
||||
ui->lvQuantity->setText( QString::number( lvQuantity ) );
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::updateTotalSize()
|
||||
{
|
||||
|
@ -143,12 +153,6 @@ VolumeGroupBaseDialog::vgNameValue() const
|
|||
return m_vgNameValue;
|
||||
}
|
||||
|
||||
qint32&
|
||||
VolumeGroupBaseDialog::peSizeValue() const
|
||||
{
|
||||
return m_peSizeValue;
|
||||
}
|
||||
|
||||
QLineEdit*
|
||||
VolumeGroupBaseDialog::vgName() const
|
||||
{
|
||||
|
|
|
@ -39,13 +39,16 @@ class VolumeGroupBaseDialog : public QDialog
|
|||
public:
|
||||
explicit VolumeGroupBaseDialog( QString& vgName,
|
||||
QVector< const Partition* > pvList,
|
||||
qint32& peSize,
|
||||
QWidget* parent = nullptr );
|
||||
~VolumeGroupBaseDialog();
|
||||
|
||||
protected:
|
||||
virtual void updateOkButton();
|
||||
|
||||
void setUsedSizeValue( qint64 usedSize );
|
||||
|
||||
void setLVQuantity( qint32 lvQuantity );
|
||||
|
||||
void updateTotalSize();
|
||||
|
||||
void updateTotalSectors();
|
||||
|
@ -56,8 +59,6 @@ protected:
|
|||
|
||||
QString& vgNameValue() const;
|
||||
|
||||
qint32& peSizeValue() const;
|
||||
|
||||
QLineEdit* vgName() const;
|
||||
|
||||
QComboBox* vgType() const;
|
||||
|
@ -72,7 +73,6 @@ private:
|
|||
Ui::VolumeGroupBaseDialog* ui;
|
||||
|
||||
QString& m_vgNameValue;
|
||||
qint32& m_peSizeValue;
|
||||
|
||||
qint64 m_totalSizeValue;
|
||||
qint64 m_usedSizeValue;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue