[PD] allow to change feature order in patterns
As discussed here: https://forum.freecadweb.org/viewtopic.php?f=27&t=48998#p420352 The pattern dialogs need a feature to change the order of the features to be patterned
This commit is contained in:
@@ -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<App::DocumentObject*> 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();
|
||||
|
||||
@@ -60,6 +60,7 @@ public:
|
||||
virtual void apply();
|
||||
|
||||
private Q_SLOTS:
|
||||
void indexesMoved();
|
||||
void onUpdateViewTimer();
|
||||
void onDirectionChanged(int num);
|
||||
void onCheckReverse(const bool on);
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidgetFeatures">
|
||||
<property name="toolTip">
|
||||
<string>List can be reordered by dragging</string>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::InternalMove</enum>
|
||||
</property>
|
||||
|
||||
@@ -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<App::DocumentObject*> 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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<App::DocumentObject*> 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());
|
||||
|
||||
@@ -68,6 +68,7 @@ public:
|
||||
virtual void apply();
|
||||
|
||||
private Q_SLOTS:
|
||||
void indexesMoved();
|
||||
void onTransformDelete();
|
||||
void onTransformEdit();
|
||||
void onTransformActivated(const QModelIndex& index);
|
||||
|
||||
@@ -39,7 +39,14 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidgetFeatures"/>
|
||||
<widget class="QListWidget" name="listWidgetFeatures">
|
||||
<property name="toolTip">
|
||||
<string>List can be reordered by dragging</string>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::InternalMove</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
|
||||
@@ -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<App::DocumentObject*> 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();
|
||||
|
||||
@@ -59,6 +59,7 @@ public:
|
||||
|
||||
void apply();
|
||||
private Q_SLOTS:
|
||||
void indexesMoved();
|
||||
void onUpdateViewTimer();
|
||||
void onAxisChanged(int num);
|
||||
void onCheckReverse(const bool on);
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listWidgetFeatures">
|
||||
<property name="toolTip">
|
||||
<string>List can be reordered by dragging</string>
|
||||
</property>
|
||||
<property name="dragDropMode">
|
||||
<enum>QAbstractItemView::InternalMove</enum>
|
||||
</property>
|
||||
|
||||
Reference in New Issue
Block a user