mirror of
https://github.com/parchlinux/calamares.git
synced 2025-06-29 02:15:36 -04:00
[partition] Including CreateVolumeGroupDialog and fixing some of its GUI issues.
This commit is contained in:
parent
d15ce56c97
commit
208d58bcd9
12 changed files with 409 additions and 37 deletions
|
@ -21,22 +21,160 @@
|
|||
|
||||
#include "gui/ListPhysicalVolumeWidgetItem.h"
|
||||
|
||||
#include <kpmcore/util/capacity.h>
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QSpinBox>
|
||||
|
||||
VolumeGroupBaseDialog::VolumeGroupBaseDialog( QString& vgName,
|
||||
QList< const Partition* > pvList,
|
||||
QVector< const Partition* > pvList,
|
||||
qint32& peSize,
|
||||
QWidget *parent)
|
||||
QWidget *parent )
|
||||
: QDialog(parent)
|
||||
, ui(new Ui::VolumeGroupBaseDialog)
|
||||
, m_vgName(vgName)
|
||||
, m_peSize(peSize)
|
||||
, m_vgNameValue(vgName)
|
||||
, m_peSizeValue(peSize)
|
||||
, m_totalSizeValue(0)
|
||||
, m_usedSizeValue(0)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
for ( const Partition* p : pvList )
|
||||
ui->pvList->addItem( new ListPhysicalVolumeWidgetItem(p, false) );
|
||||
ui->pvList->addItem( new ListPhysicalVolumeWidgetItem( p, false ) );
|
||||
|
||||
ui->vgType->addItems( QStringList() << "LVM" << "RAID" );
|
||||
ui->vgType->setCurrentIndex(0);
|
||||
|
||||
QRegularExpression re(R"(^(?!_|\.)[\w\-.+]+)");
|
||||
ui->vgName->setValidator( new QRegularExpressionValidator( re, this ) );
|
||||
ui->vgName->setText( m_vgNameValue );
|
||||
|
||||
ui->peSize->setValue( m_peSizeValue );
|
||||
|
||||
updateOkButton();
|
||||
updateTotalSize();
|
||||
|
||||
connect( ui->pvList, &QListWidget::itemChanged, this,
|
||||
[&](QListWidgetItem*) {
|
||||
updateTotalSize();
|
||||
updateOkButton();
|
||||
} );
|
||||
|
||||
connect( ui->peSize, qOverload<int>(&QSpinBox::valueChanged), this,
|
||||
[&](int) {
|
||||
updateTotalSectors();
|
||||
updateOkButton();
|
||||
});
|
||||
|
||||
connect( ui->vgName, &QLineEdit::textChanged, this,
|
||||
[&](const QString&) {
|
||||
updateOkButton();
|
||||
});
|
||||
}
|
||||
|
||||
VolumeGroupBaseDialog::~VolumeGroupBaseDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QVector< const Partition* >
|
||||
VolumeGroupBaseDialog::checkedItems() const
|
||||
{
|
||||
QVector< const Partition* > items;
|
||||
|
||||
for ( int i = 0; i < ui->pvList->count(); i++) {
|
||||
ListPhysicalVolumeWidgetItem* item = dynamic_cast< ListPhysicalVolumeWidgetItem* >( ui->pvList->item(i) );
|
||||
|
||||
if ( item && item->checkState() == Qt::Checked )
|
||||
items << item->partition();
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
bool
|
||||
VolumeGroupBaseDialog::isSizeValid() const
|
||||
{
|
||||
return m_totalSizeValue >= m_usedSizeValue;
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::updateOkButton()
|
||||
{
|
||||
okButton()->setEnabled(isSizeValid() &&
|
||||
!checkedItems().empty() &&
|
||||
!ui->vgName->text().isEmpty() &&
|
||||
ui->peSize->value() > 0);
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::updateTotalSize()
|
||||
{
|
||||
m_totalSizeValue = 0;
|
||||
|
||||
for ( const Partition *p : checkedItems())
|
||||
m_totalSizeValue += p->capacity() - p->capacity() % (ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB));
|
||||
|
||||
ui->totalSize->setText(Capacity::formatByteSize(m_totalSizeValue));
|
||||
|
||||
updateTotalSectors();
|
||||
}
|
||||
|
||||
void
|
||||
VolumeGroupBaseDialog::updateTotalSectors()
|
||||
{
|
||||
qint32 totalSectors = 0;
|
||||
|
||||
qint32 extentSize = ui->peSize->value() * Capacity::unitFactor(Capacity::Unit::Byte, Capacity::Unit::MiB);
|
||||
|
||||
if ( extentSize > 0 )
|
||||
totalSectors = m_totalSizeValue / extentSize;
|
||||
|
||||
ui->totalSectors->setText( QString::number( totalSectors ) );
|
||||
}
|
||||
|
||||
QString&
|
||||
VolumeGroupBaseDialog::vgNameValue() const
|
||||
{
|
||||
return m_vgNameValue;
|
||||
}
|
||||
|
||||
qint32&
|
||||
VolumeGroupBaseDialog::peSizeValue() const
|
||||
{
|
||||
return m_peSizeValue;
|
||||
}
|
||||
|
||||
QLineEdit*
|
||||
VolumeGroupBaseDialog::vgName() const
|
||||
{
|
||||
return ui->vgName;
|
||||
}
|
||||
|
||||
QComboBox*
|
||||
VolumeGroupBaseDialog::vgType() const
|
||||
{
|
||||
return ui->vgType;
|
||||
}
|
||||
|
||||
QSpinBox*
|
||||
VolumeGroupBaseDialog::peSize() const
|
||||
{
|
||||
return ui->peSize;
|
||||
}
|
||||
|
||||
QListWidget*
|
||||
VolumeGroupBaseDialog::pvList() const
|
||||
{
|
||||
return ui->pvList;
|
||||
}
|
||||
|
||||
QPushButton*
|
||||
VolumeGroupBaseDialog::okButton() const
|
||||
{
|
||||
return ui->buttonBox->button( QDialogButtonBox::StandardButton::Ok );
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue