only return true from PartResizerWidget::movePartition() if the partition was
actually moved. set single step for the sector spinboxes to align value add a checkbox to turn off aligning the partition svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1105207
This commit is contained in:
parent
6eab5deb08
commit
791377f176
|
@ -472,10 +472,7 @@ void PartitionManagerWidget::onNewPartition()
|
|||
|
||||
QPointer<NewDialog> dlg = new NewDialog(this, *selectedDevice(), *newPartition, selectedDevice()->partitionTable()->childRoles(*selectedPartition()));
|
||||
if (dlg->exec() == KDialog::Accepted)
|
||||
{
|
||||
PartitionTable::alignPartition(*selectedDevice(), *newPartition);
|
||||
operationStack().push(new NewOperation(*selectedDevice(), newPartition));
|
||||
}
|
||||
else
|
||||
delete newPartition;
|
||||
|
||||
|
@ -565,8 +562,6 @@ void PartitionManagerWidget::onResizePartition()
|
|||
|
||||
if (dlg->exec() == KDialog::Accepted && dlg->isModified())
|
||||
{
|
||||
PartitionTable::alignPartition(*selectedDevice(), resizedPartition, selectedPartition());
|
||||
|
||||
if (resizedPartition.firstSector() == selectedPartition()->firstSector() && resizedPartition.lastSector() == selectedPartition()->lastSector())
|
||||
Log(Log::information) << i18nc("@info/plain", "Partition <filename>%1</filename> has the same position and size after resize/move. Ignoring operation.", selectedPartition()->deviceNode());
|
||||
else
|
||||
|
@ -628,7 +623,7 @@ void PartitionManagerWidget::onPastePartition()
|
|||
delete copiedPartition;
|
||||
}
|
||||
|
||||
bool PartitionManagerWidget::showInsertDialog(Partition& insertPartition, qint64 sourceLength)
|
||||
bool PartitionManagerWidget::showInsertDialog(Partition& insertedPartition, qint64 sourceLength)
|
||||
{
|
||||
Q_ASSERT(selectedDevice());
|
||||
Q_ASSERT(selectedPartition());
|
||||
|
@ -643,22 +638,20 @@ bool PartitionManagerWidget::showInsertDialog(Partition& insertPartition, qint64
|
|||
|
||||
// Make sure the inserted partition has the right parent and logical or primary set. Only then
|
||||
// can PartitionTable::alignPartition() work correctly.
|
||||
selectedPartition()->parent()->reparent(insertPartition);
|
||||
selectedPartition()->parent()->reparent(insertedPartition);
|
||||
|
||||
if (!overwrite)
|
||||
{
|
||||
QPointer<InsertDialog> dlg = new InsertDialog(this, *selectedDevice(), insertPartition, *selectedPartition());
|
||||
QPointer<InsertDialog> dlg = new InsertDialog(this, *selectedDevice(), insertedPartition, *selectedPartition());
|
||||
|
||||
int result = dlg->exec();
|
||||
delete dlg;
|
||||
|
||||
if (result != KDialog::Accepted)
|
||||
return false;
|
||||
|
||||
PartitionTable::alignPartition(*selectedDevice(), insertPartition, selectedPartition());
|
||||
}
|
||||
|
||||
if (insertPartition.length() < sourceLength)
|
||||
if (insertedPartition.length() < sourceLength)
|
||||
{
|
||||
if (overwrite)
|
||||
KMessageBox::error(this, i18nc("@info",
|
||||
|
|
|
@ -59,7 +59,8 @@ PartResizerWidget::PartResizerWidget(QWidget* parent) :
|
|||
m_DraggedWidget(NULL),
|
||||
m_Hotspot(0),
|
||||
m_MoveAllowed(true),
|
||||
m_ReadOnly(false)
|
||||
m_ReadOnly(false),
|
||||
m_Align(true)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -207,18 +208,31 @@ bool PartResizerWidget::movePartition(qint64 newFirstSector)
|
|||
return false;
|
||||
}
|
||||
|
||||
const qint64 originalFirst = partition().firstSector();
|
||||
const qint64 originalLast = partition().lastSector();
|
||||
|
||||
partition().setFirstSector(newFirstSector);
|
||||
partition().fileSystem().setFirstSector(newFirstSector);
|
||||
emit firstSectorChanged(newFirstSector);
|
||||
|
||||
partition().setLastSector(newLastSector);
|
||||
partition().fileSystem().setLastSector(newLastSector);
|
||||
emit lastSectorChanged(newLastSector);
|
||||
|
||||
resizeLogicals();
|
||||
updatePositions();
|
||||
if (align())
|
||||
device().partitionTable()->alignPartition(device(), partition());
|
||||
|
||||
return true;
|
||||
if (originalFirst != partition().firstSector() || originalLast != partition().lastSector())
|
||||
{
|
||||
resizeLogicals();
|
||||
updatePositions();
|
||||
}
|
||||
|
||||
if (originalFirst != partition().firstSector())
|
||||
emit firstSectorChanged(partition().firstSector());
|
||||
|
||||
if (originalLast != partition().lastSector())
|
||||
emit lastSectorChanged(partition().lastSector());
|
||||
|
||||
return originalFirst != partition().firstSector() || originalLast != partition().lastSector();
|
||||
}
|
||||
|
||||
void PartResizerWidget::mouseMoveEvent(QMouseEvent* event)
|
||||
|
@ -266,16 +280,21 @@ bool PartResizerWidget::updateFirstSector(qint64 newFirstSector)
|
|||
|
||||
if (newFirstSector != partition().firstSector() && (partition().children().size() == 0 || checkAlignment(*partition().children().first(), partition().firstSector() - newFirstSector)))
|
||||
{
|
||||
const qint64 originalFirst = partition().lastSector();
|
||||
|
||||
partition().setFirstSector(newFirstSector);
|
||||
partition().fileSystem().setFirstSector(newFirstSector);
|
||||
|
||||
resizeLogicals();
|
||||
if (align())
|
||||
device().partitionTable()->alignPartition(device(), partition());
|
||||
|
||||
emit firstSectorChanged(newFirstSector);
|
||||
|
||||
updatePositions();
|
||||
|
||||
return true;
|
||||
if (originalFirst != partition().firstSector())
|
||||
{
|
||||
resizeLogicals();
|
||||
updatePositions();
|
||||
emit firstSectorChanged(partition().firstSector());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -323,16 +342,21 @@ bool PartResizerWidget::updateLastSector(qint64 newLastSector)
|
|||
|
||||
if (newLastSector != partition().lastSector() && (partition().children().size() == 0 || checkAlignment(*partition().children().last(), partition().lastSector() - newLastSector)))
|
||||
{
|
||||
const qint64 originalLast = partition().lastSector();
|
||||
|
||||
partition().setLastSector(newLastSector);
|
||||
partition().fileSystem().setLastSector(newLastSector);
|
||||
|
||||
resizeLogicals();
|
||||
if (align())
|
||||
device().partitionTable()->alignPartition(device(), partition());
|
||||
|
||||
emit lastSectorChanged(newLastSector);
|
||||
|
||||
updatePositions();
|
||||
|
||||
return true;
|
||||
if (partition().lastSector() != originalLast)
|
||||
{
|
||||
resizeLogicals();
|
||||
updatePositions();
|
||||
emit lastSectorChanged(partition().lastSector());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -72,6 +72,9 @@ class PartResizerWidget : public QWidget
|
|||
bool readOnly() const { return m_ReadOnly; } /**< @return true if the widget is read only */
|
||||
void setReadOnly(bool b) { m_ReadOnly = b; } /**< @param b the new value for read only */
|
||||
|
||||
bool align() const { return m_Align; } /**< @return true if the Partition is to be aligned */
|
||||
void setAlign(bool b) { m_Align = b; } /**< @param b the new value for aligning the Partition */
|
||||
|
||||
static qint32 handleWidth() { return m_HandleWidth; } /**< @return the handle width in pixels */
|
||||
static qint32 handleHeight() { return m_HandleHeight; } /**< @return the handle height in pixels */
|
||||
|
||||
|
@ -143,6 +146,7 @@ class PartResizerWidget : public QWidget
|
|||
|
||||
bool m_MoveAllowed;
|
||||
bool m_ReadOnly;
|
||||
bool m_Align;
|
||||
|
||||
static const qint32 m_HandleWidth;
|
||||
static const qint32 m_HandleHeight;
|
||||
|
|
|
@ -39,6 +39,7 @@ class SizeDetailsWidget : public QWidget, public Ui::SizeDetailsWidgetBase
|
|||
public:
|
||||
QDoubleSpinBox& spinFirstSector() { Q_ASSERT(m_SpinFirstSector); return *m_SpinFirstSector; }
|
||||
QDoubleSpinBox& spinLastSector() { Q_ASSERT(m_SpinLastSector); return *m_SpinLastSector; }
|
||||
QCheckBox& checkAlign() { Q_ASSERT(m_CheckAlign); return *m_CheckAlign; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -7,81 +7,11 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>428</width>
|
||||
<height>134</height>
|
||||
<height>211</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string comment="@label:listbox">First sector:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_SpinFreeBefore</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_SpinFirstSector">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>3</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string comment="@label:listbox">Last sector:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_SpinFreeBefore</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_SpinLastSector">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>3</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -97,14 +27,14 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<item row="2" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -120,7 +50,87 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string comment="@label:listbox">First sector:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_SpinFirstSector</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_SpinFirstSector">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>3</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string comment="@label:listbox">Last sector:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>m_SpinLastSector</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QDoubleSpinBox" name="m_SpinLastSector">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>3</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="m_CheckAlign">
|
||||
<property name="text">
|
||||
<string>Align Partition According To Partition Table Settings</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -136,6 +146,29 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>10</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "util/capacity.h"
|
||||
|
||||
#include <kdebug.h>
|
||||
#include <config.h>
|
||||
|
||||
SizeDialogBase::SizeDialogBase(QWidget* parent, Device& d, Partition& part, qint64 minFirst, qint64 maxLast) :
|
||||
KDialog(parent),
|
||||
|
@ -127,6 +128,9 @@ void SizeDialogBase::setupConstraints()
|
|||
|
||||
detailsWidget().spinFirstSector().setRange(minimumFirstSector(), maximumLastSector());
|
||||
detailsWidget().spinLastSector().setRange(minimumFirstSector(), maximumLastSector());
|
||||
|
||||
detailsWidget().spinFirstSector().setSingleStep(Config::sectorAlignment());
|
||||
detailsWidget().spinLastSector().setSingleStep(Config::sectorAlignment());
|
||||
}
|
||||
|
||||
void SizeDialogBase::setupConnections()
|
||||
|
@ -140,6 +144,7 @@ void SizeDialogBase::setupConnections()
|
|||
|
||||
connect(&detailsWidget().spinFirstSector(), SIGNAL(valueChanged(double)), SLOT(onSpinFirstSectorChanged(double)));
|
||||
connect(&detailsWidget().spinLastSector(), SIGNAL(valueChanged(double)), SLOT(onSpinLastSectorChanged(double)));
|
||||
connect(&detailsWidget().checkAlign(), SIGNAL(stateChanged(int)), SLOT(onAlignStateChanged(int)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -161,6 +166,14 @@ void SizeDialogBase::onSpinLastSectorChanged(double newLast)
|
|||
}
|
||||
}
|
||||
|
||||
void SizeDialogBase::onAlignStateChanged(int)
|
||||
{
|
||||
const bool align = detailsWidget().checkAlign().isChecked();
|
||||
dialogWidget().partResizerWidget().setAlign(align);
|
||||
detailsWidget().spinFirstSector().setSingleStep(align ? Config::sectorAlignment() : 1);
|
||||
detailsWidget().spinLastSector().setSingleStep(align ? Config::sectorAlignment() : 1);
|
||||
}
|
||||
|
||||
void SizeDialogBase::onFirstSectorChanged(qint64 newFirst)
|
||||
{
|
||||
bool state = dialogWidget().spinFreeBefore().blockSignals(true);
|
||||
|
|
|
@ -80,6 +80,7 @@ class SizeDialogBase : public KDialog
|
|||
|
||||
void onSpinFirstSectorChanged(double newFirst);
|
||||
void onSpinLastSectorChanged(double newLast);
|
||||
void onAlignStateChanged(int);
|
||||
|
||||
protected:
|
||||
SizeDialogWidget* m_SizeDialogWidget;
|
||||
|
|
|
@ -76,7 +76,7 @@ QList<Device*> DummyBackend::scanDevices()
|
|||
|
||||
Device* DummyBackend::scanDevice(const QString& device_node)
|
||||
{
|
||||
Device* d = new Device("Dummy Device", QString("/tmp" + device_node), 255, 3000, 63, 512);
|
||||
Device* d = new Device("Dummy Device", QString("/tmp" + device_node), 255, 30, 63, 512);
|
||||
CoreBackend::setPartitionTableForDevice(*d, new PartitionTable(PartitionTable::msdos_sectorbased, 2048, d->totalSectors() - 2048));
|
||||
CoreBackend::setPartitionTableMaxPrimaries(*d->partitionTable(), 128);
|
||||
d->partitionTable()->updateUnallocated(*d);
|
||||
|
|
Loading…
Reference in New Issue