diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 2ac64e9a78..8518d2c75d 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -121,13 +121,15 @@ void TaskLinearPatternParameters::setupUI() ui->listWidgetFeatures->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onFeatureDeleted())); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + connect(ui->listWidgetFeatures->model(), + SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(indexesMoved())); updateViewTimer = new QTimer(this); updateViewTimer->setSingleShot(true); updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, SIGNAL(timeout()), this, SLOT(onUpdateViewTimer())); + connect(ui->comboDirection, SIGNAL(activated(int)), this, SLOT(onDirectionChanged(int))); connect(ui->checkReverse, SIGNAL(toggled(bool)), @@ -220,6 +222,22 @@ void TaskLinearPatternParameters::updateUI() blockUpdate = false; } +void TaskLinearPatternParameters::indexesMoved() +{ + PartDesign::Transformed* pcTransformed = getObject(); + std::vector originals = pcTransformed->Originals.getValues(); + // the number of items has not been changed, they have just been reordered + // so we read every list item to recreate the originals vector + std::string name; + for (unsigned i = 0; i < ui->listWidgetFeatures->count(); i++) { + name = ui->listWidgetFeatures->item(i)->data(Qt::UserRole).toByteArray().constData(); + originals[i] = pcTransformed->getDocument()->getObject(name.c_str()); + } + setupTransaction(); + pcTransformed->Originals.setValues(originals); + recomputeFeature(); +} + void TaskLinearPatternParameters::onUpdateViewTimer() { setupTransaction(); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index b492c965cd..571d0aff68 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -60,6 +60,7 @@ public: virtual void apply(); private Q_SLOTS: + void indexesMoved(); void onUpdateViewTimer(); void onDirectionChanged(int num); void onCheckReverse(const bool on); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui index 3cee218330..bf7a8f733a 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui @@ -40,6 +40,9 @@ + + List can be reordered by dragging + QAbstractItemView::InternalMove diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 9b8f16498f..ef3a5d7268 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -118,6 +118,8 @@ void TaskMirroredParameters::setupUI() ui->listWidgetFeatures->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onFeatureDeleted())); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + connect(ui->listWidgetFeatures->model(), + SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(indexesMoved())); connect(ui->comboPlane, SIGNAL(activated(int)), this, SLOT(onPlaneChanged(int))); @@ -184,6 +186,22 @@ void TaskMirroredParameters::updateUI() blockUpdate = false; } +void TaskMirroredParameters::indexesMoved() +{ + PartDesign::Transformed* pcTransformed = getObject(); + std::vector originals = pcTransformed->Originals.getValues(); + // the number of items has not been changed, they have just been reordered + // so we read every list item to recreate the originals vector + std::string name; + for (unsigned i = 0; i < ui->listWidgetFeatures->count(); i++) { + name = ui->listWidgetFeatures->item(i)->data(Qt::UserRole).toByteArray().constData(); + originals[i] = pcTransformed->getDocument()->getObject(name.c_str()); + } + setupTransaction(); + pcTransformed->Originals.setValues(originals); + recomputeFeature(); +} + void TaskMirroredParameters::addObject(App::DocumentObject* obj) { QString label = QString::fromUtf8(obj->Label.getValue()); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index 906c0d4516..d5e14e301e 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -62,6 +62,7 @@ public: virtual void apply(); private Q_SLOTS: + void indexesMoved(); void onPlaneChanged(int num); virtual void onUpdateView(bool); virtual void onFeatureDeleted(void); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index d13d8a1d07..772e5ccea9 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -83,6 +83,8 @@ TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransform ui->listWidgetFeatures->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onFeatureDeleted())); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + connect(ui->listWidgetFeatures->model(), + SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(indexesMoved())); // Create a context menu for the listview of transformation features action = new QAction(tr("Edit"), ui->listTransformFeatures); @@ -160,6 +162,22 @@ TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransform // --------------------- } +void TaskMultiTransformParameters::indexesMoved() +{ + PartDesign::Transformed* pcTransformed = getObject(); + std::vector originals = pcTransformed->Originals.getValues(); + // the number of items has not been changed, they have just been reordered + // so we read every list item to recreate the originals vector + std::string name; + for (unsigned i = 0; i < ui->listWidgetFeatures->count(); i++) { + name = ui->listWidgetFeatures->item(i)->data(Qt::UserRole).toByteArray().constData(); + originals[i] = pcTransformed->getDocument()->getObject(name.c_str()); + } + setupTransaction(); + pcTransformed->Originals.setValues(originals); + recomputeFeature(); +} + void TaskMultiTransformParameters::addObject(App::DocumentObject* obj) { QString label = QString::fromUtf8(obj->Label.getValue()); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index f309247fb1..bc2ff52bae 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -68,6 +68,7 @@ public: virtual void apply(); private Q_SLOTS: + void indexesMoved(); void onTransformDelete(); void onTransformEdit(); void onTransformActivated(const QModelIndex& index); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui index d93323b3b9..8aca6273e7 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui @@ -39,7 +39,14 @@ - + + + List can be reordered by dragging + + + QAbstractItemView::InternalMove + + diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 7cd65f43e2..12d7b64fac 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -119,13 +119,15 @@ void TaskPolarPatternParameters::setupUI() ui->listWidgetFeatures->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onFeatureDeleted())); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + connect(ui->listWidgetFeatures->model(), + SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(indexesMoved())); updateViewTimer = new QTimer(this); updateViewTimer->setSingleShot(true); updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, SIGNAL(timeout()), this, SLOT(onUpdateViewTimer())); + connect(ui->comboAxis, SIGNAL(activated(int)), this, SLOT(onAxisChanged(int))); connect(ui->checkReverse, SIGNAL(toggled(bool)), @@ -215,6 +217,22 @@ void TaskPolarPatternParameters::updateUI() blockUpdate = false; } +void TaskPolarPatternParameters::indexesMoved() +{ + PartDesign::Transformed* pcTransformed = getObject(); + std::vector originals = pcTransformed->Originals.getValues(); + // the number of items has not been changed, they have just been reordered + // so we read every list item to recreate the originals vector + std::string name; + for (unsigned i = 0; i < ui->listWidgetFeatures->count(); i++) { + name = ui->listWidgetFeatures->item(i)->data(Qt::UserRole).toByteArray().constData(); + originals[i] = pcTransformed->getDocument()->getObject(name.c_str()); + } + setupTransaction(); + pcTransformed->Originals.setValues(originals); + recomputeFeature(); +} + void TaskPolarPatternParameters::onUpdateViewTimer() { setupTransaction(); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 55bda7e23a..bc2ea97b8f 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -59,6 +59,7 @@ public: void apply(); private Q_SLOTS: + void indexesMoved(); void onUpdateViewTimer(); void onAxisChanged(int num); void onCheckReverse(const bool on); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui index 6fd401a954..03ed17771d 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui @@ -40,6 +40,9 @@ + + List can be reordered by dragging + QAbstractItemView::InternalMove