From 5139182dbeb72e1601f28dd2f98c09b1f044bad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 10:40:04 +0100 Subject: [PATCH 01/14] Refactor PD Pattern Tasks ui files All files contain the same add/remove buttons and a feature list. These common elements are moved into the TaskTransformedParameters.ui file. The same goes for the common OK Button that is used in a MultiTransform. The ui files for the patterns only contain their distinctive parameters. And the common ui files contain an empy widget that will be filled with the respective parameter widgets from the patterns. --- src/Mod/PartDesign/Gui/CMakeLists.txt | 1 + .../Gui/TaskLinearPatternParameters.ui | 109 +++--------------- .../PartDesign/Gui/TaskMirroredParameters.ui | 109 +++--------------- .../Gui/TaskMultiTransformParameters.ui | 101 ++++------------ .../Gui/TaskPolarPatternParameters.ui | 109 +++--------------- .../PartDesign/Gui/TaskScaledParameters.ui | 86 +++----------- .../Gui/TaskTransformedParameters.ui | 80 +++++++++++++ 7 files changed, 158 insertions(+), 437 deletions(-) create mode 100644 src/Mod/PartDesign/Gui/TaskTransformedParameters.ui diff --git a/src/Mod/PartDesign/Gui/CMakeLists.txt b/src/Mod/PartDesign/Gui/CMakeLists.txt index 009fd1a327..bcad23de7c 100644 --- a/src/Mod/PartDesign/Gui/CMakeLists.txt +++ b/src/Mod/PartDesign/Gui/CMakeLists.txt @@ -41,6 +41,7 @@ set(PartDesignGui_UIC_SRCS TaskHoleParameters.ui TaskRevolutionParameters.ui TaskTransformedMessages.ui + TaskTransformedParameters.ui TaskMirroredParameters.ui TaskLinearPatternParameters.ui TaskPolarPatternParameters.ui diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui index 51ef47944e..1c89aa967e 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.ui @@ -7,47 +7,25 @@ 0 0 270 - 339 + 188 Form - - - - - - Add feature - - - true - - - - - - - Remove feature - - - true - - - - - - - - - List can be reordered by dragging - - - QAbstractItemView::InternalMove - - - + + 0 + + + 0 + + + 0 + + + 0 + @@ -184,27 +162,6 @@ - - - - - - OK - - - - - - - - - Update view - - - true - - - @@ -221,49 +178,11 @@ - buttonAddFeature - buttonRemoveFeature - listWidgetFeatures comboDirection checkReverse spinLength spinOccurrences - buttonOK - checkBoxUpdateView - - - buttonAddFeature - clicked(bool) - buttonRemoveFeature - setDisabled(bool) - - - 70 - 21 - - - 198 - 21 - - - - - buttonRemoveFeature - clicked(bool) - buttonAddFeature - setDisabled(bool) - - - 198 - 21 - - - 70 - 21 - - - - + diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui b/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui index 4138d20fe8..881e61bb19 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.ui @@ -7,47 +7,25 @@ 0 0 253 - 260 + 55 Form - - - - - - Add feature - - - true - - - - - - - Remove feature - - - true - - - - - - - - - List can be reordered by dragging - - - QAbstractItemView::InternalMove - - - + + 0 + + + 0 + + + 0 + + + 0 + @@ -62,70 +40,11 @@ - - - - - - OK - - - - - - - - - Update view - - - true - - - - buttonAddFeature - buttonRemoveFeature - listWidgetFeatures comboPlane - buttonOK - checkBoxUpdateView - - - buttonAddFeature - clicked(bool) - buttonRemoveFeature - setDisabled(bool) - - - 66 - 21 - - - 186 - 21 - - - - - buttonRemoveFeature - clicked(bool) - buttonAddFeature - setDisabled(bool) - - - 186 - 21 - - - 66 - 21 - - - - + diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui index 09b74c5cfa..b6e3d60d24 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.ui @@ -6,48 +6,26 @@ 0 0 - 256 - 266 + 229 + 174 Form - - - - - - - Add feature - - - true - - - - - - - Remove feature - - - true - - - - - - - - - List can be reordered by dragging - - - QAbstractItemView::InternalMove - - - + + + 0 + + + 0 + + + 0 + + + 0 + @@ -66,57 +44,20 @@ - + + + + - Update view - - - true + OK - buttonAddFeature - buttonRemoveFeature - listWidgetFeatures listTransformFeatures - checkBoxUpdateView - - - buttonAddFeature - clicked(bool) - buttonRemoveFeature - setDisabled(bool) - - - 67 - 21 - - - 188 - 21 - - - - - buttonRemoveFeature - clicked(bool) - buttonAddFeature - setDisabled(bool) - - - 188 - 21 - - - 67 - 21 - - - - + diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui index 3ed6882fee..aecc727b4f 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.ui @@ -7,47 +7,25 @@ 0 0 253 - 339 + 206 Form - - - - - - Add feature - - - true - - - - - - - Remove feature - - - true - - - - - - - - - List can be reordered by dragging - - - QAbstractItemView::InternalMove - - - + + 0 + + + 0 + + + 0 + + + 0 + @@ -196,27 +174,6 @@ - - - - - - OK - - - - - - - - - Update view - - - true - - - @@ -233,49 +190,11 @@ - buttonAddFeature - buttonRemoveFeature - listWidgetFeatures comboAxis checkReverse polarAngle spinOccurrences - buttonOK - checkBoxUpdateView - - - buttonAddFeature - clicked(bool) - buttonRemoveFeature - setDisabled(bool) - - - 66 - 21 - - - 186 - 21 - - - - - buttonRemoveFeature - clicked(bool) - buttonAddFeature - setDisabled(bool) - - - 186 - 21 - - - 66 - 21 - - - - + diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.ui b/src/Mod/PartDesign/Gui/TaskScaledParameters.ui index 07b60ed81e..112fdc4969 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.ui @@ -7,44 +7,25 @@ 0 0 253 - 270 + 85 Form - - - - - - Add feature - - - true - - - - - - - Remove feature - - - true - - - - - - - - - QAbstractItemView::InternalMove - - - + + 0 + + + 0 + + + 0 + + + 0 + @@ -55,7 +36,7 @@ - + @@ -73,40 +54,6 @@ - - - - - - OK - - - - - - - - - Update view - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -123,13 +70,8 @@ - buttonAddFeature - buttonRemoveFeature - listWidgetFeatures spinFactor spinOccurrences - buttonOK - checkBoxUpdateView diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.ui b/src/Mod/PartDesign/Gui/TaskTransformedParameters.ui new file mode 100644 index 0000000000..14bfe88d8a --- /dev/null +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.ui @@ -0,0 +1,80 @@ + + + PartDesignGui::TaskTransformedParameters + + + + 0 + 0 + 262 + 207 + + + + Form + + + + + + + + Add feature + + + true + + + + + + + Remove feature + + + true + + + + + + + + + + 16777215 + 120 + + + + List can be reordered by dragging + + + QAbstractItemView::InternalMove + + + + + + + + + + Update view + + + true + + + + + + + buttonAddFeature + buttonRemoveFeature + listWidgetFeatures + checkBoxUpdateView + + + + From 24c138373c28674d90f18507bb95ebd91b07f048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 11:16:34 +0100 Subject: [PATCH 02/14] Move duplicated code to the base class All pattern sublcasses contain the same code for handling the feature list. This code is now moved into the base class that handles the common ui. The subclasses now only need to call the setupUI/setupParameterUI function in their constructors and implement the setupParameterUI function to create their parameter ui into the specified widget. The MultiTransform also handles it's common ui and the subclasses can reuse setupParameterUI without code duplication. --- .../Gui/TaskLinearPatternParameters.cpp | 172 ++++-------------- .../Gui/TaskLinearPatternParameters.h | 10 +- .../PartDesign/Gui/TaskMirroredParameters.cpp | 126 +------------ .../PartDesign/Gui/TaskMirroredParameters.h | 10 +- .../Gui/TaskMultiTransformParameters.cpp | 136 ++++---------- .../Gui/TaskMultiTransformParameters.h | 10 +- .../Gui/TaskPolarPatternParameters.cpp | 170 +++-------------- .../Gui/TaskPolarPatternParameters.h | 10 +- .../PartDesign/Gui/TaskScaledParameters.cpp | 121 +----------- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 9 +- .../Gui/TaskTransformedParameters.cpp | 109 ++++++++++- .../Gui/TaskTransformedParameters.h | 19 +- 12 files changed, 249 insertions(+), 653 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index b0e6c13d64..e9bb9b2358 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -24,7 +24,6 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include # include # include #endif @@ -57,104 +56,22 @@ TaskLinearPatternParameters::TaskLinearPatternParameters(ViewProviderTransformed : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskLinearPatternParameters) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui->setupUi(proxy); - QMetaObject::connectSlotsByName(this); - - this->groupLayout()->addWidget(proxy); - - ui->buttonOK->hide(); - ui->checkBoxUpdateView->setEnabled(true); - - selectionMode = none; - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! setupUI(); } -TaskLinearPatternParameters::TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QLayout *layout) +TaskLinearPatternParameters::TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) : TaskTransformedParameters(parentTask), ui(new Ui_TaskLinearPatternParameters) { - proxy = new QWidget(parentTask); - ui->setupUi(proxy); - connect(ui->buttonOK, &QToolButton::pressed, - parentTask, &TaskLinearPatternParameters::onSubTaskButtonOK); + setupParameterUI(parameterWidget); +} + +void TaskLinearPatternParameters::setupParameterUI(QWidget *widget) +{ + ui->setupUi(widget); QMetaObject::connectSlotsByName(this); - layout->addWidget(proxy); - - ui->buttonOK->setEnabled(true); - ui->buttonAddFeature->hide(); - ui->buttonRemoveFeature->hide(); - ui->listWidgetFeatures->hide(); - ui->checkBoxUpdateView->hide(); - - selectionMode = none; - - // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! - blockUpdate = false; - setupUI(); -} - -void TaskLinearPatternParameters::connectSignals() -{ - connect(ui->buttonAddFeature, &QToolButton::toggled, - this, &TaskLinearPatternParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QToolButton::toggled, - this, &TaskLinearPatternParameters::onButtonRemoveFeature); - - // Create context menu - QAction* action = new QAction(tr("Remove"), this); - action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - // display shortcut behind the context menu entry - action->setShortcutVisibleInContextMenu(true); -#endif - ui->listWidgetFeatures->addAction(action); - connect(action, &QAction::triggered, this, &TaskLinearPatternParameters::onFeatureDeleted); - ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, - this, &TaskLinearPatternParameters::indexesMoved); - - updateViewTimer = new QTimer(this); - updateViewTimer->setSingleShot(true); - updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, &QTimer::timeout, - this, &TaskLinearPatternParameters::onUpdateViewTimer); - - connect(ui->comboDirection, qOverload(&QComboBox::activated), - this, &TaskLinearPatternParameters::onDirectionChanged); - connect(ui->checkReverse, &QCheckBox::toggled, - this, &TaskLinearPatternParameters::onCheckReverse); - connect(ui->comboMode, qOverload(&QComboBox::activated), - this, &TaskLinearPatternParameters::onModeChanged); - connect(ui->spinLength, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskLinearPatternParameters::onLength); - connect(ui->spinOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskLinearPatternParameters::onOffset); - connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, - this, &TaskLinearPatternParameters::onOccurrences); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskLinearPatternParameters::onUpdateView); -} - -void TaskLinearPatternParameters::setupUI() -{ // Get the feature data PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); - std::vector originals = pcLinearPattern->Originals.getValues(); - - // Fill data into dialog elements - for (auto obj : originals) { - if (obj) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(QString::fromUtf8(obj->Label.getValue())); - item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); - ui->listWidgetFeatures->addItem(item); - } - } - // --------------------- ui->spinLength->bind(pcLinearPattern->Length); ui->spinOffset->bind(pcLinearPattern->Offset); @@ -198,7 +115,30 @@ void TaskLinearPatternParameters::setupUI() } adaptVisibilityToMode(); - connectSignals(); + + updateViewTimer = new QTimer(this); + updateViewTimer->setSingleShot(true); + updateViewTimer->setInterval(getUpdateViewTimeout()); + connect(updateViewTimer, &QTimer::timeout, + this, &TaskLinearPatternParameters::onUpdateViewTimer); + + connect(ui->comboDirection, qOverload(&QComboBox::activated), + this, &TaskLinearPatternParameters::onDirectionChanged); + connect(ui->checkReverse, &QCheckBox::toggled, + this, &TaskLinearPatternParameters::onCheckReverse); + connect(ui->comboMode, qOverload(&QComboBox::activated), + this, &TaskLinearPatternParameters::onModeChanged); + connect(ui->spinLength, qOverload(&Gui::QuantitySpinBox::valueChanged), + this, &TaskLinearPatternParameters::onLength); + connect(ui->spinOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), + this, &TaskLinearPatternParameters::onOffset); + connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, + this, &TaskLinearPatternParameters::onOccurrences); +} + +void TaskLinearPatternParameters::retranslateParameterUI(QWidget* widget) +{ + ui->retranslateUi(widget); } void TaskLinearPatternParameters::updateUI() @@ -255,23 +195,6 @@ void TaskLinearPatternParameters::kickUpdateViewTimer() const updateViewTimer->start(); } -void TaskLinearPatternParameters::addObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - QString objectName = QString::fromLatin1(obj->getNameInDocument()); - - QListWidgetItem* item = new QListWidgetItem(); - item->setText(label); - item->setData(Qt::UserRole, objectName); - ui->listWidgetFeatures->addItem(item); -} - -void TaskLinearPatternParameters::removeObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - removeItemFromListWidget(ui->listWidgetFeatures, label); -} - void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode != none && msg.Type == Gui::SelectionChanges::AddSelection) { @@ -303,12 +226,6 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges } } -void TaskLinearPatternParameters::clearButtons() -{ - ui->buttonAddFeature->setChecked(false); - ui->buttonRemoveFeature->setChecked(false); -} - void TaskLinearPatternParameters::onCheckReverse(const bool on) { if (blockUpdate) return; @@ -406,22 +323,6 @@ void TaskLinearPatternParameters::onUpdateView(bool on) } } -void TaskLinearPatternParameters::onFeatureDeleted() -{ - PartDesign::Transformed* pcTransformed = getObject(); - std::vector originals = pcTransformed->Originals.getValues(); - int currentRow = ui->listWidgetFeatures->currentRow(); - if (currentRow < 0) { - Base::Console().Error("PartDesign LinearPattern: No feature selected for removing.\n"); - return; //no current row selected - } - originals.erase(originals.begin() + currentRow); - setupTransaction(); - pcTransformed->Originals.setValues(originals); - ui->listWidgetFeatures->model()->removeRow(currentRow); - recomputeFeature(); -} - void TaskLinearPatternParameters::getDirection(App::DocumentObject*& obj, std::vector& sub) const { const App::PropertyLinkSub &lnk = dirLinks.getCurrentLink(); @@ -469,17 +370,6 @@ TaskLinearPatternParameters::~TaskLinearPatternParameters() catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what () ); } - - if (proxy) - delete proxy; -} - -void TaskLinearPatternParameters::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } } void TaskLinearPatternParameters::apply() diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 41cb67733e..cce38910e3 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -50,7 +50,7 @@ public: /// Constructor for task with ViewProvider explicit TaskLinearPatternParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QLayout *layout); + TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskLinearPatternParameters() override; void apply() override; @@ -64,14 +64,9 @@ private Q_SLOTS: void onOffset(const double o); void onOccurrences(const uint n); void onUpdateView(bool) override; - void onFeatureDeleted() override; protected: - void addObject(App::DocumentObject*) override; - void removeObject(App::DocumentObject*) override; - void changeEvent(QEvent *e) override; void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons() override; void getDirection(App::DocumentObject*& obj, std::vector& sub) const; bool getReverse() const; int getMode() const; @@ -80,8 +75,9 @@ protected: unsigned getOccurrences() const; private: + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; void connectSignals(); - void setupUI(); void updateUI(); void adaptVisibilityToMode(); void kickUpdateViewTimer() const; diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 9e14d0d4d5..e34e14babb 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -24,7 +24,6 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include # include #endif @@ -53,82 +52,22 @@ TaskMirroredParameters::TaskMirroredParameters(ViewProviderTransformed *Transfor : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskMirroredParameters) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui->setupUi(proxy); - QMetaObject::connectSlotsByName(this); - - this->groupLayout()->addWidget(proxy); - - ui->buttonOK->hide(); - ui->checkBoxUpdateView->setEnabled(true); - - selectionMode = none; - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! setupUI(); } -TaskMirroredParameters::TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QLayout *layout) +TaskMirroredParameters::TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) : TaskTransformedParameters(parentTask), ui(new Ui_TaskMirroredParameters) { - proxy = new QWidget(parentTask); - ui->setupUi(proxy); - connect(ui->buttonOK, &QToolButton::pressed, - parentTask, &TaskMirroredParameters::onSubTaskButtonOK); - QMetaObject::connectSlotsByName(this); - - layout->addWidget(proxy); - - ui->buttonOK->setEnabled(true); - ui->buttonAddFeature->hide(); - ui->buttonRemoveFeature->hide(); - ui->listWidgetFeatures->hide(); - ui->checkBoxUpdateView->hide(); - - selectionMode = none; - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! - setupUI(); + setupParameterUI(parameterWidget); } -void TaskMirroredParameters::setupUI() +void TaskMirroredParameters::setupParameterUI(QWidget *widget) { - connect(ui->buttonAddFeature, &QToolButton::toggled, this, &TaskMirroredParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QToolButton::toggled, this, &TaskMirroredParameters::onButtonRemoveFeature); - - // Create context menu - QAction* action = new QAction(tr("Remove"), this); - action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - // display shortcut behind the context menu entry - action->setShortcutVisibleInContextMenu(true); -#endif - ui->listWidgetFeatures->addAction(action); - connect(action, &QAction::triggered, this, &TaskMirroredParameters::onFeatureDeleted); - ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, - this, &TaskMirroredParameters::indexesMoved); + ui->setupUi(widget); + QMetaObject::connectSlotsByName(this); connect(ui->comboPlane, qOverload(&QComboBox::activated), this, &TaskMirroredParameters::onPlaneChanged); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskMirroredParameters::onUpdateView); - - // Get the feature data - PartDesign::Mirrored* pcMirrored = static_cast(getObject()); - std::vector originals = pcMirrored->Originals.getValues(); - - // Fill data into dialog elements - for (auto obj : originals) { - if (obj) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(QString::fromUtf8(obj->Label.getValue())); - item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); - ui->listWidgetFeatures->addItem(item); - } - } - // --------------------- this->planeLinks.setCombo(*(ui->comboPlane)); ui->comboPlane->setEnabled(true); @@ -157,6 +96,11 @@ void TaskMirroredParameters::setupUI() updateUI(); } +void TaskMirroredParameters::retranslateParameterUI(QWidget* widget) +{ + ui->retranslateUi(widget); +} + void TaskMirroredParameters::updateUI() { if (blockUpdate) @@ -174,23 +118,6 @@ void TaskMirroredParameters::updateUI() blockUpdate = false; } -void TaskMirroredParameters::addObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - QString objectName = QString::fromLatin1(obj->getNameInDocument()); - - QListWidgetItem* item = new QListWidgetItem(); - item->setText(label); - item->setData(Qt::UserRole, objectName); - ui->listWidgetFeatures->addItem(item); -} - -void TaskMirroredParameters::removeObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - removeItemFromListWidget(ui->listWidgetFeatures, label); -} - void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) { @@ -216,12 +143,6 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg } } -void TaskMirroredParameters::clearButtons() -{ - ui->buttonAddFeature->setChecked(false); - ui->buttonRemoveFeature->setChecked(false); -} - void TaskMirroredParameters::onPlaneChanged(int /*num*/) { if (blockUpdate) @@ -264,22 +185,6 @@ void TaskMirroredParameters::onUpdateView(bool on) } } -void TaskMirroredParameters::onFeatureDeleted() -{ - PartDesign::Transformed* pcTransformed = getObject(); - std::vector originals = pcTransformed->Originals.getValues(); - int currentRow = ui->listWidgetFeatures->currentRow(); - if (currentRow < 0) { - Base::Console().Error("PartDesign MirroredPattern: No feature selected for removing.\n"); - return; //no current row selected - } - originals.erase(originals.begin() + currentRow); - setupTransaction(); - pcTransformed->Originals.setValues(originals); - ui->listWidgetFeatures->model()->removeRow(currentRow); - recomputeFeature(); -} - void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, std::vector &sub) const { const App::PropertyLinkSub &lnk = planeLinks.getCurrentLink(); @@ -305,17 +210,6 @@ TaskMirroredParameters::~TaskMirroredParameters() } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what () ); } - - if (proxy) - delete proxy; -} - -void TaskMirroredParameters::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } } //************************************************************************** diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index c7d6d60264..51b920050e 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -49,7 +49,7 @@ public: /// Constructor for task with ViewProvider explicit TaskMirroredParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QLayout *layout); + TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskMirroredParameters() override; @@ -60,17 +60,13 @@ public: private Q_SLOTS: void onPlaneChanged(int num); void onUpdateView(bool) override; - void onFeatureDeleted() override; protected: - void addObject(App::DocumentObject*) override; - void removeObject(App::DocumentObject*) override; - void changeEvent(QEvent *e) override; void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons() override; private: - void setupUI(); + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; void updateUI(); ComboLinks planeLinks; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 4728070c15..c8f3c1622d 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -60,33 +60,16 @@ TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransform , subTask(nullptr) , subFeature(nullptr) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui->setupUi(proxy); + setupUI(); +} + +void TaskMultiTransformParameters::setupParameterUI(QWidget *widget) +{ + ui->setupUi(widget); QMetaObject::connectSlotsByName(this); - this->groupLayout()->addWidget(proxy); - - connect(ui->buttonAddFeature, &QToolButton::toggled, - this, &TaskMultiTransformParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QToolButton::toggled, - this, &TaskMultiTransformParameters::onButtonRemoveFeature); - - // Create context menu - QAction* action = new QAction(tr("Remove"), this); - action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - // display shortcut behind the context menu entry - action->setShortcutVisibleInContextMenu(true); -#endif - ui->listWidgetFeatures->addAction(action); - connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onFeatureDeleted); - ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, - this, &TaskMultiTransformParameters::indexesMoved); // Create a context menu for the listview of transformation features - action = new QAction(tr("Edit"), ui->listTransformFeatures); + QAction* action = new QAction(tr("Edit"), ui->listTransformFeatures); action->connect(action, &QAction::triggered, this, &TaskMultiTransformParameters::onTransformEdit); ui->listTransformFeatures->addAction(action); @@ -119,12 +102,14 @@ TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransform this, &TaskMultiTransformParameters::onMoveDown); ui->listTransformFeatures->addAction(action); ui->listTransformFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskMultiTransformParameters::onUpdateView); connect(ui->listTransformFeatures, &QListWidget::activated, this, &TaskMultiTransformParameters::onTransformActivated); + connect(ui->buttonOK, &QToolButton::pressed, + this, &TaskMultiTransformParameters::onSubTaskButtonOK); + ui->buttonOK->hide(); + // Get the transformFeatures data PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); @@ -144,66 +129,11 @@ TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransform ui->listTransformFeatures->addItem(tr("Right-click to add")); editHint = true; } - - // Get the Originals data - std::vector originals = pcMultiTransform->Originals.getValues(); - - // Fill data into dialog elements - for (auto obj : originals) { - if (obj) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(QString::fromUtf8(obj->Label.getValue())); - item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); - ui->listWidgetFeatures->addItem(item); - } - } - // --------------------- } -void TaskMultiTransformParameters::addObject(App::DocumentObject* obj) +void TaskMultiTransformParameters::retranslateParameterUI(QWidget* widget) { - QString label = QString::fromUtf8(obj->Label.getValue()); - QString objectName = QString::fromLatin1(obj->getNameInDocument()); - - QListWidgetItem* item = new QListWidgetItem(); - item->setText(label); - item->setData(Qt::UserRole, objectName); - ui->listWidgetFeatures->addItem(item); -} - -void TaskMultiTransformParameters::removeObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - removeItemFromListWidget(ui->listWidgetFeatures, label); -} - -void TaskMultiTransformParameters::onSelectionChanged(const Gui::SelectionChanges& msg) -{ - if (originalSelected(msg)) { - exitSelectionMode(); - } -} - -void TaskMultiTransformParameters::clearButtons() -{ - ui->buttonAddFeature->setChecked(false); - ui->buttonRemoveFeature->setChecked(false); -} - -void TaskMultiTransformParameters::onFeatureDeleted() -{ - PartDesign::Transformed* pcTransformed = getObject(); - std::vector originals = pcTransformed->Originals.getValues(); - int currentRow = ui->listWidgetFeatures->currentRow(); - if (currentRow < 0){ - Base::Console().Error("PartDesign Multitransform: No feature selected for removing.\n"); - return; //no current row selected - } - originals.erase(originals.begin() + currentRow); - setupTransaction(); - pcTransformed->Originals.setValues(originals); - ui->listWidgetFeatures->model()->removeRow(currentRow); - recomputeFeature(); + ui->retranslateUi(widget); } void TaskMultiTransformParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) @@ -216,8 +146,16 @@ void TaskMultiTransformParameters::slotDeletedObject(const Gui::ViewProviderDocu void TaskMultiTransformParameters::closeSubTask() { if (subTask) { + ui->buttonOK->hide(); + + // Remove all parameter ui widgets and layout + ui->subFeatureWidget->setUpdatesEnabled(false); + qDeleteAll(ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); + qDeleteAll(ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); + ui->subFeatureWidget->setUpdatesEnabled(true); + + exitSelectionMode(); - disconnect(ui->checkBoxUpdateView, nullptr, subTask, nullptr); delete subTask; subTask = nullptr; } @@ -260,20 +198,20 @@ void TaskMultiTransformParameters::onTransformEdit() std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); subFeature = static_cast(transformFeatures[row]); - if (transformFeatures[row]->is()) - subTask = new TaskMirroredParameters(this, ui->verticalLayout); - else if (transformFeatures[row]->is()) - subTask = new TaskLinearPatternParameters(this, ui->verticalLayout); - else if (transformFeatures[row]->is()) - subTask = new TaskPolarPatternParameters(this, ui->verticalLayout); - else if (transformFeatures[row]->is()) - subTask = new TaskScaledParameters(this, ui->verticalLayout); + if (subFeature->is()) + subTask = new TaskMirroredParameters(this, ui->subFeatureWidget); + else if (subFeature->is()) + subTask = new TaskLinearPatternParameters(this, ui->subFeatureWidget); + else if (subFeature->is()) + subTask = new TaskPolarPatternParameters(this, ui->subFeatureWidget); + else if (subFeature->is()) + subTask = new TaskScaledParameters(this, ui->subFeatureWidget); else return; // TODO: Show an error? + ui->buttonOK->show(); + subTask->setEnabledTransaction(isEnabledTransaction()); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - subTask, &TaskTransformedParameters::onUpdateView); } void TaskMultiTransformParameters::onTransformActivated(const QModelIndex& index) @@ -533,16 +471,6 @@ TaskMultiTransformParameters::~TaskMultiTransformParameters() Base::PyException e; // extract the Python error text e.ReportException(); } - if (proxy) - delete proxy; -} - -void TaskMultiTransformParameters::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } } //************************************************************************** diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index a6491dc059..d61a0bb949 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -80,18 +80,12 @@ private Q_SLOTS: // Note: There is no Cancel button because I couldn't work out how to save the state of // a subFeature so as to revert the changes of an edit operation void onUpdateView(bool) override; - void onFeatureDeleted() override; /** Notifies when the object is about to be removed. */ void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; -protected: - void addObject(App::DocumentObject*) override; - void removeObject(App::DocumentObject*) override; - void changeEvent(QEvent *e) override; - void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons() override; - private: + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; void updateUI(); void closeSubTask(); void moveTransformFeature(const int increment); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 92bdb55912..0a46247c13 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -25,7 +25,6 @@ #ifndef _PreComp_ # include -# include # include #endif @@ -64,103 +63,22 @@ TaskPolarPatternParameters::TaskPolarPatternParameters(ViewProviderTransformed * : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskPolarPatternParameters) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui->setupUi(proxy); - QMetaObject::connectSlotsByName(this); - - this->groupLayout()->addWidget(proxy); - - ui->buttonOK->hide(); - ui->checkBoxUpdateView->setEnabled(true); - - selectionMode = none; - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! setupUI(); } -TaskPolarPatternParameters::TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QLayout *layout) +TaskPolarPatternParameters::TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) : TaskTransformedParameters(parentTask), ui(new Ui_TaskPolarPatternParameters) { - proxy = new QWidget(parentTask); - ui->setupUi(proxy); - connect(ui->buttonOK, &QToolButton::pressed, - parentTask, &TaskMultiTransformParameters::onSubTaskButtonOK); + setupParameterUI(parameterWidget); +} + +void TaskPolarPatternParameters::setupParameterUI(QWidget *widget) +{ + ui->setupUi(widget); QMetaObject::connectSlotsByName(this); - layout->addWidget(proxy); - - ui->buttonOK->setEnabled(true); - ui->buttonAddFeature->hide(); - ui->buttonRemoveFeature->hide(); - ui->listWidgetFeatures->hide(); - ui->checkBoxUpdateView->hide(); - - selectionMode = none; - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! - setupUI(); -} - -void TaskPolarPatternParameters::connectSignals() -{ - connect(ui->buttonAddFeature, &QToolButton::toggled, - this, &TaskPolarPatternParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QToolButton::toggled, - this, &TaskPolarPatternParameters::onButtonRemoveFeature); - - // Create context menu - QAction* action = new QAction(tr("Remove"), this); - action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - // display shortcut behind the context menu entry - action->setShortcutVisibleInContextMenu(true); -#endif - ui->listWidgetFeatures->addAction(action); - connect(action, &QAction::triggered, - this, &TaskPolarPatternParameters::onFeatureDeleted); - ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, - this, &TaskPolarPatternParameters::indexesMoved); - - updateViewTimer = new QTimer(this); - updateViewTimer->setSingleShot(true); - updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, &QTimer::timeout, - this, &TaskPolarPatternParameters::onUpdateViewTimer); - connect(ui->comboAxis, qOverload(&QComboBox::activated), - this, &TaskPolarPatternParameters::onAxisChanged); - connect(ui->comboMode, qOverload(&QComboBox::activated), - this, &TaskPolarPatternParameters::onModeChanged); - connect(ui->checkReverse, &QCheckBox::toggled, - this, &TaskPolarPatternParameters::onCheckReverse); - connect(ui->polarAngle, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskPolarPatternParameters::onAngle); - connect(ui->angleOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskPolarPatternParameters::onOffset); - connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, - this, &TaskPolarPatternParameters::onOccurrences); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskPolarPatternParameters::onUpdateView); -} - -void TaskPolarPatternParameters::setupUI() -{ // Get the feature data PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); - std::vector originals = pcPolarPattern->Originals.getValues(); - - // Fill data into dialog elements - for (auto obj : originals) { - if (obj) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(QString::fromUtf8(obj->Label.getValue())); - item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); - ui->listWidgetFeatures->addItem(item); - } - } - // --------------------- ui->polarAngle->bind(pcPolarPattern->Angle); ui->angleOffset->bind(pcPolarPattern->Offset); @@ -200,7 +118,29 @@ void TaskPolarPatternParameters::setupUI() adaptVisibilityToMode(); updateUI(); - connectSignals(); + + updateViewTimer = new QTimer(this); + updateViewTimer->setSingleShot(true); + updateViewTimer->setInterval(getUpdateViewTimeout()); + connect(updateViewTimer, &QTimer::timeout, + this, &TaskPolarPatternParameters::onUpdateViewTimer); + connect(ui->comboAxis, qOverload(&QComboBox::activated), + this, &TaskPolarPatternParameters::onAxisChanged); + connect(ui->comboMode, qOverload(&QComboBox::activated), + this, &TaskPolarPatternParameters::onModeChanged); + connect(ui->checkReverse, &QCheckBox::toggled, + this, &TaskPolarPatternParameters::onCheckReverse); + connect(ui->polarAngle, qOverload(&Gui::QuantitySpinBox::valueChanged), + this, &TaskPolarPatternParameters::onAngle); + connect(ui->angleOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), + this, &TaskPolarPatternParameters::onOffset); + connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, + this, &TaskPolarPatternParameters::onOccurrences); +} + +void TaskPolarPatternParameters::retranslateParameterUI(QWidget* widget) +{ + ui->retranslateUi(widget); } void TaskPolarPatternParameters::updateUI() @@ -254,23 +194,6 @@ void TaskPolarPatternParameters::adaptVisibilityToMode() ui->angleOffsetWrapper->setVisible(mode == PartDesign::PolarPatternMode::offset); } -void TaskPolarPatternParameters::addObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - QString objectName = QString::fromLatin1(obj->getNameInDocument()); - - QListWidgetItem* item = new QListWidgetItem(); - item->setText(label); - item->setData(Qt::UserRole, objectName); - ui->listWidgetFeatures->addItem(item); -} - -void TaskPolarPatternParameters::removeObject(App::DocumentObject* obj) -{ - QString label = QString::fromUtf8(obj->Label.getValue()); - removeItemFromListWidget(ui->listWidgetFeatures, label); -} - void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) { @@ -297,12 +220,6 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& } } -void TaskPolarPatternParameters::clearButtons() -{ - ui->buttonAddFeature->setChecked(false); - ui->buttonRemoveFeature->setChecked(false); -} - void TaskPolarPatternParameters::onCheckReverse(const bool on) { if (blockUpdate) return; @@ -400,22 +317,6 @@ void TaskPolarPatternParameters::onUpdateView(bool on) } } -void TaskPolarPatternParameters::onFeatureDeleted() -{ - PartDesign::Transformed* pcTransformed = getObject(); - std::vector originals = pcTransformed->Originals.getValues(); - int currentRow = ui->listWidgetFeatures->currentRow(); - if (currentRow < 0) { - Base::Console().Error("PartDesign PolarPattern: No feature selected for removing.\n"); - return; //no current row selected - } - originals.erase(originals.begin() + currentRow); - setupTransaction(); - pcTransformed->Originals.setValues(originals); - ui->listWidgetFeatures->model()->removeRow(currentRow); - recomputeFeature(); -} - void TaskPolarPatternParameters::getAxis(App::DocumentObject*& obj, std::vector& sub) const { const App::PropertyLinkSub &lnk = axesLinks.getCurrentLink(); @@ -453,17 +354,6 @@ TaskPolarPatternParameters::~TaskPolarPatternParameters() } catch (const Base::Exception &ex) { Base::Console().Error ("%s\n", ex.what () ); } - - if (proxy) - delete proxy; -} - -void TaskPolarPatternParameters::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } } void TaskPolarPatternParameters::apply() diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index b01121c23c..520eb614fd 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -50,7 +50,7 @@ public: /// Constructor for task with ViewProvider explicit TaskPolarPatternParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QLayout *layout); + TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskPolarPatternParameters() override; void apply() override; @@ -64,14 +64,9 @@ private Q_SLOTS: void onOffset(const double a); void onOccurrences(const uint n); void onUpdateView(bool) override; - void onFeatureDeleted() override; protected: - void addObject(App::DocumentObject*) override; - void removeObject(App::DocumentObject*) override; - void changeEvent(QEvent *e) override; void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons() override; void getAxis(App::DocumentObject*& obj, std::vector& sub) const; const std::string getStdAxis() const; const std::string getAxis() const; @@ -80,8 +75,9 @@ protected: unsigned getOccurrences() const; private: + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; void connectSignals(); - void setupUI(); void updateUI(); void kickUpdateViewTimer() const; void adaptVisibilityToMode(); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index 8a63c37e61..b791c98b70 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -24,7 +24,6 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include #endif #include @@ -48,78 +47,27 @@ TaskScaledParameters::TaskScaledParameters(ViewProviderTransformed *TransformedV : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskScaledParameters) { - // we need a separate container widget to add all controls to - proxy = new QWidget(this); - ui->setupUi(proxy); - QMetaObject::connectSlotsByName(this); - - this->groupLayout()->addWidget(proxy); - - ui->buttonOK->hide(); - ui->checkBoxUpdateView->setEnabled(true); - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! setupUI(); } -TaskScaledParameters::TaskScaledParameters(TaskMultiTransformParameters *parentTask, QLayout *layout) +TaskScaledParameters::TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) : TaskTransformedParameters(parentTask), ui(new Ui_TaskScaledParameters) { - proxy = new QWidget(parentTask); - ui->setupUi(proxy); - connect(ui->buttonOK, &QPushButton::pressed, - parentTask, &TaskScaledParameters::onSubTaskButtonOK); - QMetaObject::connectSlotsByName(this); - - layout->addWidget(proxy); - - ui->buttonOK->setEnabled(true); - ui->buttonAddFeature->hide(); - ui->buttonRemoveFeature->hide(); - ui->listWidgetFeatures->hide(); - ui->checkBoxUpdateView->hide(); - - blockUpdate = false; // Hack, sometimes it is NOT false although set to false in Transformed::Transformed()!! - setupUI(); + setupParameterUI(parameterWidget); } -void TaskScaledParameters::setupUI() +void TaskScaledParameters::setupParameterUI(QWidget *widget) { - connect(ui->buttonAddFeature, &QPushButton::toggled, this, &TaskScaledParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QPushButton::toggled, this, &TaskScaledParameters::onButtonRemoveFeature); - - // Create context menu - QAction* action = new QAction(tr("Remove"), this); - action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) - // display shortcut behind the context menu entry - action->setShortcutVisibleInContextMenu(true); -#endif - ui->listWidgetFeatures->addAction(action); - connect(action, &QAction::triggered, this, &TaskScaledParameters::onFeatureDeleted); - ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + ui->setupUi(widget); + QMetaObject::connectSlotsByName(this); connect(ui->spinFactor, qOverload(&Gui::QuantitySpinBox::valueChanged), this, &TaskScaledParameters::onFactor); connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, this, &TaskScaledParameters::onOccurrences); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskScaledParameters::onUpdateView); // Get the feature data PartDesign::Scaled* pcScaled = static_cast(getObject()); - std::vector originals = pcScaled->Originals.getValues(); - - // Fill data into dialog elements - for (auto obj : originals) { - if (obj) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(QString::fromUtf8(obj->Label.getValue())); - item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); - ui->listWidgetFeatures->addItem(item); - } - } - // --------------------- ui->spinFactor->bind(pcScaled->Factor); ui->spinOccurrences->setMaximum(INT_MAX); @@ -131,6 +79,11 @@ void TaskScaledParameters::setupUI() updateUI(); } +void TaskScaledParameters::retranslateParameterUI(QWidget* widget) +{ + ui->retranslateUi(widget); +} + void TaskScaledParameters::updateUI() { if (blockUpdate) @@ -148,35 +101,6 @@ void TaskScaledParameters::updateUI() blockUpdate = false; } -void TaskScaledParameters::onSelectionChanged(const Gui::SelectionChanges& msg) -{ - if (originalSelected(msg)) { - Gui::SelectionObject selObj(msg); - App::DocumentObject* obj = selObj.getObject(); - Q_ASSERT(obj); - - QString label = QString::fromUtf8(obj->Label.getValue()); - QString objectName = QString::fromLatin1(msg.pObjectName); - - if (selectionMode == addFeature) { - QListWidgetItem* item = new QListWidgetItem(); - item->setText(label); - item->setData(Qt::UserRole, objectName); - ui->listWidgetFeatures->addItem(item); - } - else { - removeItemFromListWidget(ui->listWidgetFeatures, label); - } - exitSelectionMode(); - } -} - -void TaskScaledParameters::clearButtons() -{ - ui->buttonAddFeature->setChecked(false); - ui->buttonRemoveFeature->setChecked(false); -} - void TaskScaledParameters::onFactor(const double f) { if (blockUpdate) @@ -207,21 +131,6 @@ void TaskScaledParameters::onUpdateView(bool on) } } -void TaskScaledParameters::onFeatureDeleted() -{ - PartDesign::Transformed* pcTransformed = getObject(); - std::vector originals = pcTransformed->Originals.getValues(); - int currentRow = ui->listWidgetFeatures->currentRow(); - if (currentRow < 0) { - Base::Console().Error("PartDesign ScaledPattern: No feature selected for removing.\n"); - return; //no current row selected - } - originals.erase(originals.begin() + currentRow); - pcTransformed->Originals.setValues(originals); - ui->listWidgetFeatures->model()->removeRow(currentRow); - recomputeFeature(); -} - double TaskScaledParameters::getFactor() const { return ui->spinFactor->value().getValue(); @@ -234,16 +143,6 @@ unsigned TaskScaledParameters::getOccurrences() const TaskScaledParameters::~TaskScaledParameters() { - if (proxy) - delete proxy; -} - -void TaskScaledParameters::changeEvent(QEvent *e) -{ - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange) { - ui->retranslateUi(proxy); - } } void TaskScaledParameters::apply() diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index 3675482930..e663ff8cfa 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -49,7 +49,7 @@ public: /// Constructor for task with ViewProvider explicit TaskScaledParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskScaledParameters(TaskMultiTransformParameters *parentTask, QLayout *layout); + TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskScaledParameters() override; void apply() override; @@ -58,17 +58,14 @@ private Q_SLOTS: void onFactor(const double f); void onOccurrences(const uint n); void onUpdateView(bool) override; - void onFeatureDeleted() override; protected: - void changeEvent(QEvent *e) override; - void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons() override; double getFactor() const; unsigned getOccurrences() const; private: - void setupUI(); + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; void updateUI(); private: diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 23d6f238fc..dbdc46a6a8 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -23,6 +23,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include #endif @@ -40,6 +41,7 @@ #include #include +#include "ui_TaskTransformedParameters.h" #include "TaskTransformedParameters.h" #include "TaskMultiTransformParameters.h" #include "ReferenceSelection.h" @@ -60,6 +62,7 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr , parentTask(nullptr) , insideMultiTransform(false) , blockUpdate(false) + , ui(new Ui_TaskTransformedParameters) { Gui::Document* doc = TransformedView->getDocument(); this->attachDocument(doc); @@ -82,6 +85,53 @@ TaskTransformedParameters::~TaskTransformedParameters() { // make sure to remove selection gate in all cases Gui::Selection().rmvSelectionGate(); + + if (proxy) + delete proxy; +} + +void TaskTransformedParameters::setupUI() +{ + // we need a separate container widget to add all controls to + proxy = new QWidget(this); + ui->setupUi(proxy); + QMetaObject::connectSlotsByName(this); + + connect(ui->buttonAddFeature, &QToolButton::toggled, this, &TaskTransformedParameters::onButtonAddFeature); + connect(ui->buttonRemoveFeature, &QToolButton::toggled, this, &TaskTransformedParameters::onButtonRemoveFeature); + + // Create context menu + QAction* action = new QAction(tr("Remove"), this); + action->setShortcut(QKeySequence::Delete); +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // display shortcut behind the context menu entry + action->setShortcutVisibleInContextMenu(true); +#endif + ui->listWidgetFeatures->addAction(action); + connect(action, &QAction::triggered, this, &TaskTransformedParameters::onFeatureDeleted); + ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); + connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, + this, &TaskTransformedParameters::indexesMoved); + + connect(ui->checkBoxUpdateView, &QCheckBox::toggled, + this, &TaskTransformedParameters::onUpdateView); + + // Get the feature data + PartDesign::Transformed* pcTransformed = static_cast(getObject()); + std::vector originals = pcTransformed->Originals.getValues(); + + // Fill data into dialog elements + for (auto obj : originals) { + if (obj) { + QListWidgetItem* item = new QListWidgetItem(); + item->setText(QString::fromUtf8(obj->Label.getValue())); + item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); + ui->listWidgetFeatures->addItem(item); + } + } + + setupParameterUI(ui->featureUI); // create parameter UI widgets + this->groupLayout()->addWidget(proxy); } void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) @@ -90,6 +140,32 @@ void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumen TransformedView = nullptr; } +void TaskTransformedParameters::changeEvent(QEvent *e) +{ + TaskBox::changeEvent(e); + if (e->type() == QEvent::LanguageChange && proxy) { + ui->retranslateUi(proxy); + retranslateParameterUI(ui->featureUI); + } +} + +void TaskTransformedParameters::onSelectionChanged(const Gui::SelectionChanges& msg) +{ + if (originalSelected(msg)) { + exitSelectionMode(); + } +} + +void TaskTransformedParameters::clearButtons() +{ + if (insideMultiTransform) { + parentTask->clearButtons(); + } else { + ui->buttonAddFeature->setChecked(false); + ui->buttonRemoveFeature->setChecked(false); + } +} + bool TaskTransformedParameters::isViewUpdated() const { return (blockUpdate == false); @@ -100,12 +176,21 @@ int TaskTransformedParameters::getUpdateViewTimeout() const return 500; } -void TaskTransformedParameters::addObject(App::DocumentObject*) +void TaskTransformedParameters::addObject(App::DocumentObject* obj) { + QString label = QString::fromUtf8(obj->Label.getValue()); + QString objectName = QString::fromLatin1(obj->getNameInDocument()); + + QListWidgetItem* item = new QListWidgetItem(); + item->setText(label); + item->setData(Qt::UserRole, objectName); + ui->listWidgetFeatures->addItem(item); } -void TaskTransformedParameters::removeObject(App::DocumentObject*) +void TaskTransformedParameters::removeObject(App::DocumentObject* obj) { + QString label = QString::fromUtf8(obj->Label.getValue()); + removeItemFromListWidget(ui->listWidgetFeatures, label); } bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& msg) @@ -191,6 +276,8 @@ void TaskTransformedParameters::onButtonAddFeature(bool checked) } else { exitSelectionMode(); } + + ui->buttonRemoveFeature->setDisabled(checked); } // Make sure only some feature before the given one is visible @@ -221,6 +308,24 @@ void TaskTransformedParameters::onButtonRemoveFeature(bool checked) } else { exitSelectionMode(); } + + ui->buttonAddFeature->setDisabled(checked); +} + +void TaskTransformedParameters::onFeatureDeleted() +{ + PartDesign::Transformed* pcTransformed = getObject(); + std::vector originals = pcTransformed->Originals.getValues(); + int currentRow = ui->listWidgetFeatures->currentRow(); + if (currentRow < 0) { + Base::Console().Error("PartDesign Pattern: No feature selected for removing.\n"); + return; //no current row selected + } + originals.erase(originals.begin() + currentRow); + setupTransaction(); + pcTransformed->Originals.setValues(originals); + ui->listWidgetFeatures->model()->removeRow(currentRow); + recomputeFeature(); } void TaskTransformedParameters::removeItemFromListWidget(QListWidget* widget, const QString& itemstr) diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index cc09a7b832..0e76ab97bd 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -38,6 +38,8 @@ class QListWidget; +class Ui_TaskTransformedParameters; + namespace Part { class Feature; } @@ -177,10 +179,12 @@ protected Q_SLOTS: virtual void onSubTaskButtonOK() {} void onButtonAddFeature(const bool checked); void onButtonRemoveFeature(const bool checked); - virtual void onFeatureDeleted() = 0; + void onFeatureDeleted(); void indexesMoved(); protected: + void setupUI(); + /** * Returns the base transformation * For stand alone features it will be objects associated with the view provider @@ -205,14 +209,18 @@ protected: void checkVisibility(); +private: + virtual void setupParameterUI(QWidget* widget) = 0; + virtual void retranslateParameterUI(QWidget* widget) = 0; + protected: virtual void addObject(App::DocumentObject*); virtual void removeObject(App::DocumentObject*); /** Notifies when the object is about to be removed. */ void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; - void changeEvent(QEvent *e) override = 0; - void onSelectionChanged(const Gui::SelectionChanges& msg) override = 0; - virtual void clearButtons()=0; + void changeEvent(QEvent *e) override; + void onSelectionChanged(const Gui::SelectionChanges& msg) override; + void clearButtons(); static void removeItemFromListWidget(QListWidget* widget, const QString& itemstr); void fillAxisCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); @@ -233,6 +241,9 @@ protected: bool insideMultiTransform; /// Lock updateUI(), applying changes to the underlying feature and calling recomputeFeature() bool blockUpdate; + +private: + std::unique_ptr ui; }; /// simulation dialog for the TaskView From ab7dd607a55f0111287601c4457ccb0b40da9277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 12:09:24 +0100 Subject: [PATCH 03/14] Refactor: replace enum with enum class --- src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp | 8 ++++---- src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp | 6 +++--- src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp | 6 +++--- src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp | 10 +++++----- src/Mod/PartDesign/Gui/TaskTransformedParameters.h | 9 +++++++-- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index e9bb9b2358..cf5f4d4692 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -197,11 +197,11 @@ void TaskLinearPatternParameters::kickUpdateViewTimer() const void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { - if (selectionMode != none && msg.Type == Gui::SelectionChanges::AddSelection) { + if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { if (originalSelected(msg)) { exitSelectionMode(); } - else if (selectionMode == reference) { + else if (selectionMode == SelectionMode::Reference) { // TODO check if this works correctly (2015-09-01, Fat-Zer) exitSelectionMode(); std::vector directions; @@ -211,7 +211,7 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges getReferencedSelection(pcLinearPattern, msg, selObj, directions); // Note: ReferenceSelection has already checked the selection for validity - if (selObj && (selectionMode == reference || + if (selObj && (selectionMode == SelectionMode::Reference || selObj->isDerivedFrom(App::Line::getClassTypeId()) || selObj->isDerivedFrom(Part::Feature::getClassTypeId()) || selObj->isDerivedFrom(PartDesign::Line::getClassTypeId()) || @@ -288,7 +288,7 @@ void TaskLinearPatternParameters::onDirectionChanged(int /*num*/) // enter reference selection mode hideObject(); showBase(); - selectionMode = reference; + selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); addReferenceSelectionGate(AllowSelection::EDGE | AllowSelection::FACE | AllowSelection::PLANAR); } else { diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index e34e14babb..bd1c5a8266 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -120,7 +120,7 @@ void TaskMirroredParameters::updateUI() void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { - if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) { + if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { if (originalSelected(msg)) { exitSelectionMode(); @@ -132,7 +132,7 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg if (!selObj) return; - if ( selectionMode == reference || selObj->isDerivedFrom ( App::Plane::getClassTypeId () ) ) { + if ( selectionMode == SelectionMode::Reference || selObj->isDerivedFrom ( App::Plane::getClassTypeId () ) ) { setupTransaction(); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); recomputeFeature(); @@ -154,7 +154,7 @@ void TaskMirroredParameters::onPlaneChanged(int /*num*/) // enter reference selection mode hideObject(); showBase(); - selectionMode = reference; + selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); addReferenceSelectionGate(AllowSelection::FACE | AllowSelection::PLANAR); } else { diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 0a46247c13..e297023f61 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -196,7 +196,7 @@ void TaskPolarPatternParameters::adaptVisibilityToMode() void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { - if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) { + if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { if (originalSelected(msg)) { exitSelectionMode(); @@ -209,7 +209,7 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& if(!selObj) return; - if (selectionMode == reference || selObj->isDerivedFrom ( App::Line::getClassTypeId () ) ) { + if (selectionMode == SelectionMode::Reference || selObj->isDerivedFrom ( App::Line::getClassTypeId () ) ) { setupTransaction(); pcPolarPattern->Axis.setValue(selObj, axes); recomputeFeature(); @@ -283,7 +283,7 @@ void TaskPolarPatternParameters::onAxisChanged(int /*num*/) // enter reference selection mode hideObject(); showBase(); - selectionMode = reference; + selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); addReferenceSelectionGate(AllowSelection::EDGE | AllowSelection::CIRCLE); } else { diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index dbdc46a6a8..3ff597c14c 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -196,7 +196,7 @@ void TaskTransformedParameters::removeObject(App::DocumentObject* obj) bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& msg) { if (msg.Type == Gui::SelectionChanges::AddSelection && ( - (selectionMode == addFeature) || (selectionMode == removeFeature))) { + (selectionMode == SelectionMode::AddFeature) || (selectionMode == SelectionMode::RemoveFeature))) { if (strcmp(msg.pDocName, getObject()->getDocument()->getName()) != 0) return false; @@ -208,7 +208,7 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms // Do the same like in TaskDlgTransformedParameters::accept() but without doCommand std::vector originals = pcTransformed->Originals.getValues(); std::vector::iterator o = std::find(originals.begin(), originals.end(), selectedObject); - if (selectionMode == addFeature) { + if (selectionMode == SelectionMode::AddFeature) { if (o == originals.end()) { originals.push_back(selectedObject); addObject(selectedObject); @@ -271,7 +271,7 @@ void TaskTransformedParameters::onButtonAddFeature(bool checked) if (checked) { hideObject(); showBase(); - selectionMode = addFeature; + selectionMode = SelectionMode::AddFeature; Gui::Selection().clearSelection(); } else { exitSelectionMode(); @@ -303,7 +303,7 @@ void TaskTransformedParameters::onButtonRemoveFeature(bool checked) { if (checked) { checkVisibility(); - selectionMode = removeFeature; + selectionMode = SelectionMode::RemoveFeature; Gui::Selection().clearSelection(); } else { exitSelectionMode(); @@ -510,7 +510,7 @@ void TaskTransformedParameters::exitSelectionMode() { try { clearButtons(); - selectionMode = none; + selectionMode = SelectionMode::None; Gui::Selection().rmvSelectionGate(); showObject(); } catch(Base::Exception &e) { diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 0e76ab97bd..ae433343fe 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -232,8 +232,13 @@ protected: int transactionID = 0; bool enableTransaction = true; - enum selectionModes { none, addFeature, removeFeature, reference }; - selectionModes selectionMode = none; + enum class SelectionMode { + None, + AddFeature, + RemoveFeature, + Reference + }; + SelectionMode selectionMode = SelectionMode::None; /// The MultiTransform parent task of this task TaskMultiTransformParameters* parentTask; From 4ae184706da1e63460031c84a82a64767867c2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 12:17:38 +0100 Subject: [PATCH 04/14] Refactor: add default member initializers --- .../Gui/TaskLinearPatternParameters.h | 2 +- .../Gui/TaskMultiTransformParameters.cpp | 2 -- .../Gui/TaskMultiTransformParameters.h | 6 ++--- .../Gui/TaskPolarPatternParameters.h | 2 +- .../Gui/TaskTransformedParameters.cpp | 14 +++--------- .../Gui/TaskTransformedParameters.h | 22 ++++++++++--------- 6 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index cce38910e3..f870edf64a 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -84,7 +84,7 @@ private: private: std::unique_ptr ui; - QTimer* updateViewTimer; + QTimer* updateViewTimer = nullptr; ComboLinks dirLinks; }; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index c8f3c1622d..12f467e465 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -57,8 +57,6 @@ using namespace Gui; TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransformed *TransformedView,QWidget *parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskMultiTransformParameters) - , subTask(nullptr) - , subFeature(nullptr) { setupUI(); } diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index d61a0bb949..37bab1dc51 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -94,9 +94,9 @@ private: private: std::unique_ptr ui; /// The subTask and subFeature currently active in the UI - TaskTransformedParameters* subTask; - PartDesign::Transformed* subFeature; - bool editHint; + TaskTransformedParameters* subTask = nullptr; + PartDesign::Transformed* subFeature = nullptr; + bool editHint = false; }; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 520eb614fd..18a5c213bc 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -84,7 +84,7 @@ private: private: std::unique_ptr ui; - QTimer* updateViewTimer; + QTimer* updateViewTimer = nullptr; ComboLinks axesLinks; }; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 3ff597c14c..a68c19f7de 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -57,11 +57,7 @@ using namespace Gui; TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *TransformedView, QWidget *parent) : TaskBox(Gui::BitmapFactory().pixmap(TransformedView->featureIcon().c_str()), TransformedView->menuName, true, parent) - , proxy(nullptr) , TransformedView(TransformedView) - , parentTask(nullptr) - , insideMultiTransform(false) - , blockUpdate(false) , ui(new Ui_TaskTransformedParameters) { Gui::Document* doc = TransformedView->getDocument(); @@ -73,11 +69,8 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask) : TaskBox(QPixmap(), tr(""), true, parentTask), - proxy(nullptr), - TransformedView(nullptr), parentTask(parentTask), - insideMultiTransform(true), - blockUpdate(false) + insideMultiTransform(true) { } @@ -553,7 +546,7 @@ void TaskTransformedParameters::indexesMoved() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TaskDlgTransformedParameters::TaskDlgTransformedParameters(ViewProviderTransformed *TransformedView_) - : TaskDlgFeatureParameters(TransformedView_), parameter(nullptr) + : TaskDlgFeatureParameters(TransformedView_) { assert(vp); message = new TaskTransformedMessages(getTransformedView()); @@ -583,9 +576,8 @@ bool TaskDlgTransformedParameters::reject() ComboLinks::ComboLinks(QComboBox &combo) - : doc(nullptr) + : _combo(&combo) { - this->_combo = &combo; _combo->clear(); } diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index ae433343fe..d8c995f199 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -67,7 +67,8 @@ public: * will go out of sync, and crashes may result. */ explicit ComboLinks(QComboBox &combo); - ComboLinks() {_combo = nullptr; doc = nullptr;} + ComboLinks() = default; + void setCombo(QComboBox &combo) {assert(!_combo); this->_combo = &combo; _combo->clear();} /** @@ -104,8 +105,8 @@ public: ~ComboLinks() {_combo = nullptr; clear();} private: - QComboBox* _combo; - App::Document* doc; + QComboBox* _combo = nullptr; + App::Document* doc = nullptr; std::vector linksInList; }; @@ -227,8 +228,8 @@ protected: void fillPlanesCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); protected: - QWidget* proxy; - ViewProviderTransformed *TransformedView; + QWidget* proxy = nullptr; + ViewProviderTransformed *TransformedView = nullptr; int transactionID = 0; bool enableTransaction = true; @@ -241,11 +242,11 @@ protected: SelectionMode selectionMode = SelectionMode::None; /// The MultiTransform parent task of this task - TaskMultiTransformParameters* parentTask; + TaskMultiTransformParameters* parentTask = nullptr; /// Flag indicating whether this object is a container for MultiTransform - bool insideMultiTransform; + bool insideMultiTransform = false; /// Lock updateUI(), applying changes to the underlying feature and calling recomputeFeature() - bool blockUpdate; + bool blockUpdate = false; private: std::unique_ptr ui; @@ -268,9 +269,10 @@ public: bool accept() override; /// is called by the framework if the dialog is rejected (Cancel) bool reject() override; + protected: - TaskTransformedParameters *parameter; - TaskTransformedMessages *message; + TaskTransformedParameters *parameter = nullptr; + TaskTransformedMessages *message = nullptr; }; } //namespace PartDesignGui From 77bcd7e50fdb69ec0afdab9a843355c6f22aa0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 13:05:01 +0100 Subject: [PATCH 05/14] Refactor: remove unused functions --- .../Gui/TaskLinearPatternParameters.h | 1 - .../PartDesign/Gui/TaskMirroredParameters.h | 1 - .../Gui/TaskMultiTransformParameters.cpp | 22 ------------------- .../Gui/TaskMultiTransformParameters.h | 1 - .../Gui/TaskPolarPatternParameters.h | 1 - .../PartDesign/Gui/TaskScaledParameters.cpp | 4 ---- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 2 -- .../Gui/TaskTransformedParameters.cpp | 6 ----- .../Gui/TaskTransformedParameters.h | 2 -- 9 files changed, 40 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index f870edf64a..91b24f2cea 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -97,7 +97,6 @@ class TaskDlgLinearPatternParameters : public TaskDlgTransformedParameters public: explicit TaskDlgLinearPatternParameters(ViewProviderLinearPattern *LinearPatternView); - ~TaskDlgLinearPatternParameters() override = default; }; } //namespace PartDesignGui diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index 51b920050e..ac63ead9cc 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -82,7 +82,6 @@ class TaskDlgMirroredParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMirroredParameters(ViewProviderMirrored *MirroredView); - ~TaskDlgMirroredParameters() override = default; public: /// is called by the framework if the dialog is accepted (Ok) diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 12f467e465..75ab3f23ab 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -504,26 +504,4 @@ bool TaskDlgMultiTransformParameters::accept() return TaskDlgFeatureParameters::accept (); } -// FIXME: It seems all roll back is finely handled by abortCommand() in parent classes. On the other -// hand manual removal of objects may lead to segfault in dialog distructer of subtransformation -// due to TaskMultiTransformParameters::getSubFeature() returns already destroid object. So check -// that everything is fine and delete the method. (2015-07-31, Fat-Zer) -//bool TaskDlgMultiTransformParameters::reject() -//{ -// // Get objects before view is invalidated -// // For the same reason we can't delegate showing the originals to TaskDlgTransformedParameters::reject() -// PartDesign::MultiTransform* pcMultiTransform = static_cast(vp->getObject()); -// std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); -// -// // Delete the transformation features - must happen before abortCommand()! -// for (std::vector::const_iterator it = transformFeatures.begin(); it != transformFeatures.end(); ++it) -// { -// if ((*it) != NULL) -// Gui::Command::doCommand( -// Gui::Command::Doc,"App.ActiveDocument.removeObject(\"%s\")", (*it)->getNameInDocument()); -// } -// -// return TaskDlgTransformedParameters::reject(); -//} - #include "moc_TaskMultiTransformParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 37bab1dc51..c8f8ec5c01 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -107,7 +107,6 @@ class TaskDlgMultiTransformParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMultiTransformParameters(ViewProviderMultiTransform *MultiTransformView); - ~TaskDlgMultiTransformParameters() override = default; public: /// is called by the framework if the dialog is accepted (Ok) diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 18a5c213bc..7fec756d8f 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -97,7 +97,6 @@ class TaskDlgPolarPatternParameters : public TaskDlgTransformedParameters public: explicit TaskDlgPolarPatternParameters(ViewProviderPolarPattern *PolarPatternView); - ~TaskDlgPolarPatternParameters() override = default; }; } //namespace PartDesignGui diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index b791c98b70..19922ad3b6 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -141,10 +141,6 @@ unsigned TaskScaledParameters::getOccurrences() const return ui->spinOccurrences->value(); } -TaskScaledParameters::~TaskScaledParameters() -{ -} - void TaskScaledParameters::apply() { std::string name = TransformedView->getObject()->getNameInDocument(); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index e663ff8cfa..8b4e342b6f 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -50,7 +50,6 @@ public: explicit TaskScaledParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); - ~TaskScaledParameters() override; void apply() override; @@ -80,7 +79,6 @@ class TaskDlgScaledParameters : public TaskDlgTransformedParameters public: explicit TaskDlgScaledParameters(ViewProviderScaled *ScaledView); - ~TaskDlgScaledParameters() override = default; public: /// is called by the framework if the dialog is accepted (Ok) diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index a68c19f7de..9d2f4ea0d4 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -159,11 +159,6 @@ void TaskTransformedParameters::clearButtons() } } -bool TaskTransformedParameters::isViewUpdated() const -{ - return (blockUpdate == false); -} - int TaskTransformedParameters::getUpdateViewTimeout() const { return 500; @@ -560,7 +555,6 @@ bool TaskDlgTransformedParameters::accept() { parameter->exitSelectionMode(); - // Continue (usually in virtual method accept()) return TaskDlgFeatureParameters::accept (); } diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index d8c995f199..302dd85303 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -205,7 +205,6 @@ protected: void addReferenceSelectionGate(AllowSelectionFlags); - bool isViewUpdated() const; int getUpdateViewTimeout() const; void checkVisibility(); @@ -259,7 +258,6 @@ class TaskDlgTransformedParameters : public PartDesignGui::TaskDlgFeatureParamet public: explicit TaskDlgTransformedParameters(ViewProviderTransformed *TransformedView); - ~TaskDlgTransformedParameters() override = default; ViewProviderTransformed* getTransformedView() const { return static_cast(vp); } From 48d9a8da86e55245eb3227d18cdceb1af6201ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 12:47:16 +0100 Subject: [PATCH 06/14] Refactor: optimize member access specifiers After refactoring many members have unnecessarily open access specifiers. This changes as many members as possible to private or protected. --- .../Gui/TaskLinearPatternParameters.h | 22 +-- .../PartDesign/Gui/TaskMirroredParameters.h | 9 +- .../Gui/TaskMultiTransformParameters.h | 13 +- .../Gui/TaskPolarPatternParameters.h | 22 +-- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 8 +- .../Gui/TaskTransformedParameters.h | 163 ++++++++++-------- 6 files changed, 125 insertions(+), 112 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 91b24f2cea..4425a98933 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -55,6 +55,9 @@ public: void apply() override; +protected: + void onSelectionChanged(const Gui::SelectionChanges& msg) override; + private Q_SLOTS: void onUpdateViewTimer(); void onDirectionChanged(int num); @@ -65,8 +68,15 @@ private Q_SLOTS: void onOccurrences(const uint n); void onUpdateView(bool) override; -protected: - void onSelectionChanged(const Gui::SelectionChanges& msg) override; +private: + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; + + void connectSignals(); + void updateUI(); + void adaptVisibilityToMode(); + void kickUpdateViewTimer() const; + void getDirection(App::DocumentObject*& obj, std::vector& sub) const; bool getReverse() const; int getMode() const; @@ -74,14 +84,6 @@ protected: double getOffset() const; unsigned getOccurrences() const; -private: - void setupParameterUI(QWidget* widget) override; - void retranslateParameterUI(QWidget* widget) override; - void connectSignals(); - void updateUI(); - void adaptVisibilityToMode(); - void kickUpdateViewTimer() const; - private: std::unique_ptr ui; QTimer* updateViewTimer = nullptr; diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index ac63ead9cc..ff354786fa 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -57,20 +57,20 @@ public: void apply() override; +protected: + void onSelectionChanged(const Gui::SelectionChanges& msg) override; + private Q_SLOTS: void onPlaneChanged(int num); void onUpdateView(bool) override; -protected: - void onSelectionChanged(const Gui::SelectionChanges& msg) override; - private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; void updateUI(); - ComboLinks planeLinks; private: + ComboLinks planeLinks; std::unique_ptr ui; }; @@ -83,7 +83,6 @@ class TaskDlgMirroredParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMirroredParameters(ViewProviderMirrored *MirroredView); -public: /// is called by the framework if the dialog is accepted (Ok) bool accept() override; }; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index c8f8ec5c01..6270dcfcdf 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -63,11 +63,9 @@ public: void apply() override; -public Q_SLOTS: - /// User finished editing a subFeature - void onSubTaskButtonOK() override; - private Q_SLOTS: + /// User finished editing a subFeature + void onSubTaskButtonOK(); void onTransformDelete(); void onTransformEdit(); void onTransformActivated(const QModelIndex& index); @@ -80,12 +78,14 @@ private Q_SLOTS: // Note: There is no Cancel button because I couldn't work out how to save the state of // a subFeature so as to revert the changes of an edit operation void onUpdateView(bool) override; - /** Notifies when the object is about to be removed. */ - void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + + /** Notifies when the object is about to be removed. */ + void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; + void updateUI(); void closeSubTask(); void moveTransformFeature(const int increment); @@ -108,7 +108,6 @@ class TaskDlgMultiTransformParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMultiTransformParameters(ViewProviderMultiTransform *MultiTransformView); -public: /// is called by the framework if the dialog is accepted (Ok) bool accept() override; /// is called by the framework if the dialog is rejected (Cancel) diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 7fec756d8f..1d5c8e2e9a 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -55,6 +55,9 @@ public: void apply() override; +protected: + void onSelectionChanged(const Gui::SelectionChanges& msg) override; + private Q_SLOTS: void onUpdateViewTimer(); void onAxisChanged(int num); @@ -65,8 +68,15 @@ private Q_SLOTS: void onOccurrences(const uint n); void onUpdateView(bool) override; -protected: - void onSelectionChanged(const Gui::SelectionChanges& msg) override; +private: + void setupParameterUI(QWidget* widget) override; + void retranslateParameterUI(QWidget* widget) override; + + void connectSignals(); + void updateUI(); + void kickUpdateViewTimer() const; + void adaptVisibilityToMode(); + void getAxis(App::DocumentObject*& obj, std::vector& sub) const; const std::string getStdAxis() const; const std::string getAxis() const; @@ -74,14 +84,6 @@ protected: double getAngle() const; unsigned getOccurrences() const; -private: - void setupParameterUI(QWidget* widget) override; - void retranslateParameterUI(QWidget* widget) override; - void connectSignals(); - void updateUI(); - void kickUpdateViewTimer() const; - void adaptVisibilityToMode(); - private: std::unique_ptr ui; QTimer* updateViewTimer = nullptr; diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index 8b4e342b6f..49373d895a 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -58,15 +58,14 @@ private Q_SLOTS: void onOccurrences(const uint n); void onUpdateView(bool) override; -protected: - double getFactor() const; - unsigned getOccurrences() const; - private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; void updateUI(); + double getFactor() const; + unsigned getOccurrences() const; + private: std::unique_ptr ui; }; @@ -80,7 +79,6 @@ class TaskDlgScaledParameters : public TaskDlgTransformedParameters public: explicit TaskDlgScaledParameters(ViewProviderScaled *ScaledView); -public: /// is called by the framework if the dialog is accepted (Ok) bool accept() override; }; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 302dd85303..a46dce1216 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -131,20 +131,7 @@ public: explicit TaskTransformedParameters(TaskMultiTransformParameters *parentTask); ~TaskTransformedParameters() override; - /// Returns the originals property of associated top feeature object - const std::vector & getOriginals() const; - - /// Get the TransformedFeature object associated with this task - // Either through the ViewProvider or the currently active subFeature of the parentTask - App::DocumentObject *getBaseObject() const; - - /// Get the sketch object of the first original either of the object associated with this feature or with the parent feature (MultiTransform mode) - App::DocumentObject* getSketchObject() const; - - void exitSelectionMode(); - virtual void apply() = 0; - virtual void onUpdateView(bool) = 0; /*! * \brief setEnabledTransaction @@ -153,14 +140,87 @@ public: * By default, transactions are enabled. */ void setEnabledTransaction(bool); + + /// Exit the selection mode of the associated task panel + void exitSelectionMode(); + +protected: + /** Setup the standalone UI. + * Call this in the derived destructor with ViewProvider. + */ + void setupUI(); + + /** + * Returns the base transformation + * For stand alone features it will be object associated with the view provider + * For features inside MultiTransform it will be the parent MultiTransform's sub feature object + */ + PartDesign::Transformed *getObject() const; + + /// Get the sketch object of the first original either of the object associated with this feature or with the parent feature (MultiTransform mode) + App::DocumentObject* getSketchObject() const; + + /** Handle adding/removing of selected features + * Returns true if a selected feature was added/removed. + */ + bool originalSelected(const Gui::SelectionChanges& msg); + + /// Recompute either this feature or the parent MultiTransform feature + void recomputeFeature(); + + /// Hide the top transformed object (see getTopTransformedObject()) + void hideObject(); + /// Show the top transformed object (see getTopTransformedObject()) + void showObject(); + /// Hide the base transformation object (see getObject()) + void hideBase(); + /// Show the base transformation object (see getObject()) + void showBase(); + + void addReferenceSelectionGate(AllowSelectionFlags); + + int getUpdateViewTimeout() const; + + /** Notifies when the object is about to be removed. */ + void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; + + void onSelectionChanged(const Gui::SelectionChanges& msg) override; + + /// Fill combobox with the axis from the sketch and the own bodys origin axis + void fillAxisCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); + /// Fill combobox with the planes from the sketch and the own bodys origin planes + void fillPlanesCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); + bool isEnabledTransaction() const; void setupTransaction(); - int getTransactionID() const { - return transactionID; - } +private Q_SLOTS: + virtual void onUpdateView(bool) = 0; + + void onButtonAddFeature(const bool checked); + void onButtonRemoveFeature(const bool checked); + void onFeatureDeleted(); + void indexesMoved(); + +private: + /** Setup the parameter UI. + * This is called to create the parameter UI in the specified widget. + * Call this in the derived constructor with MultiTransform parent. + */ + virtual void setupParameterUI(QWidget* widget) = 0; + + /// Change translation of the parameter UI + virtual void retranslateParameterUI(QWidget* widget) = 0; + + void addObject(App::DocumentObject*); + void removeObject(App::DocumentObject*); + void clearButtons(); + void checkVisibility(); + + /// Return the base object of the base transformed object (see getTopTransformedObject()) + // Either through the ViewProvider or the currently active subFeature of the parentTask + App::DocumentObject *getBaseObject() const; -protected: /** * Returns the base transformation view provider * For stand alone features it will be view provider associated with this object @@ -175,79 +235,33 @@ protected: */ PartDesign::Transformed *getTopTransformedObject () const; -protected Q_SLOTS: - /// Connect the subTask OK button to the MultiTransform task - virtual void onSubTaskButtonOK() {} - void onButtonAddFeature(const bool checked); - void onButtonRemoveFeature(const bool checked); - void onFeatureDeleted(); - void indexesMoved(); - -protected: - void setupUI(); - - /** - * Returns the base transformation - * For stand alone features it will be objects associated with the view provider - * For features inside multitransform it will be the parent's multitransform object - */ - PartDesign::Transformed *getObject () const; - - bool originalSelected(const Gui::SelectionChanges& msg); - - /// Recompute either this feature or the parent feature (MultiTransform mode) - void recomputeFeature(); - - void hideObject(); - void showObject(); - void hideBase(); - void showBase(); - - void addReferenceSelectionGate(AllowSelectionFlags); - - int getUpdateViewTimeout() const; - - void checkVisibility(); - -private: - virtual void setupParameterUI(QWidget* widget) = 0; - virtual void retranslateParameterUI(QWidget* widget) = 0; - -protected: - virtual void addObject(App::DocumentObject*); - virtual void removeObject(App::DocumentObject*); - /** Notifies when the object is about to be removed. */ - void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; void changeEvent(QEvent *e) override; - void onSelectionChanged(const Gui::SelectionChanges& msg) override; - void clearButtons(); + static void removeItemFromListWidget(QListWidget* widget, const QString& itemstr); - void fillAxisCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); - void fillPlanesCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); - protected: - QWidget* proxy = nullptr; - ViewProviderTransformed *TransformedView = nullptr; - int transactionID = 0; - bool enableTransaction = true; - enum class SelectionMode { None, AddFeature, RemoveFeature, Reference }; + + ViewProviderTransformed *TransformedView = nullptr; SelectionMode selectionMode = SelectionMode::None; - /// The MultiTransform parent task of this task - TaskMultiTransformParameters* parentTask = nullptr; - /// Flag indicating whether this object is a container for MultiTransform - bool insideMultiTransform = false; /// Lock updateUI(), applying changes to the underlying feature and calling recomputeFeature() bool blockUpdate = false; private: + int transactionID = 0; + bool enableTransaction = true; + /// The MultiTransform parent task of this task + TaskMultiTransformParameters* parentTask = nullptr; + /// Flag indicating whether this object is a container for MultiTransform + bool insideMultiTransform = false; + /// Widget holding the transform task UI + QWidget* proxy = nullptr; std::unique_ptr ui; }; @@ -262,7 +276,6 @@ public: ViewProviderTransformed* getTransformedView() const { return static_cast(vp); } -public: /// is called by the framework if the dialog is accepted (Ok) bool accept() override; /// is called by the framework if the dialog is rejected (Cancel) From fd4bea24b72fa3ade02932379e99b586fd48842c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 14:30:49 +0100 Subject: [PATCH 07/14] Fix apply() method not called consistently The python console commands where not consistenly reported because the apply function was not called or not implemented. The function is now called from the base class and also when a subfeature is closed in MultiTransform. Some missing properties are also added. --- .../Gui/TaskLinearPatternParameters.cpp | 6 +-- .../Gui/TaskLinearPatternParameters.h | 3 +- .../PartDesign/Gui/TaskMirroredParameters.cpp | 22 ++++------ .../PartDesign/Gui/TaskMirroredParameters.h | 9 +--- .../Gui/TaskMultiTransformParameters.cpp | 42 +++++++------------ .../Gui/TaskMultiTransformParameters.h | 7 +--- .../Gui/TaskPolarPatternParameters.cpp | 11 ++++- .../Gui/TaskPolarPatternParameters.h | 4 +- .../PartDesign/Gui/TaskScaledParameters.cpp | 16 ++----- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 6 +-- .../Gui/TaskTransformedParameters.cpp | 2 + .../Gui/TaskTransformedParameters.h | 9 +++- 12 files changed, 53 insertions(+), 84 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index cf5f4d4692..d4c19630af 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -372,17 +372,17 @@ TaskLinearPatternParameters::~TaskLinearPatternParameters() } } -void TaskLinearPatternParameters::apply() +void TaskLinearPatternParameters::doApply() { std::vector directions; App::DocumentObject* obj; getDirection(obj, directions); std::string direction = buildLinkSingleSubPythonStr(obj, directions); - auto tobj = TransformedView->getObject(); + auto tobj = getObject(); FCMD_OBJ_CMD(tobj,"Direction = " << direction); FCMD_OBJ_CMD(tobj,"Reversed = " << getReverse()); - + FCMD_OBJ_CMD(tobj,"Mode = " << getMode()); ui->spinLength->apply(); ui->spinOffset->apply(); ui->spinOccurrences->apply(); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 4425a98933..410a2f0e52 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -53,8 +53,6 @@ public: TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskLinearPatternParameters() override; - void apply() override; - protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -71,6 +69,7 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + void doApply() override; void connectSignals(); void updateUI(); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index bd1c5a8266..db694beb3a 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -192,8 +192,14 @@ void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, std::vect sub = lnk.getSubValues(); } -void TaskMirroredParameters::apply() +void TaskMirroredParameters::doApply() { + std::vector mirrorPlanes; + App::DocumentObject* obj; + getMirrorPlane(obj, mirrorPlanes); + std::string mirrorPlane = buildLinkSingleSubPythonStr(obj, mirrorPlanes); + + FCMD_OBJ_CMD(getObject(),"MirrorPlane = " << mirrorPlane); } TaskMirroredParameters::~TaskMirroredParameters() @@ -224,19 +230,5 @@ TaskDlgMirroredParameters::TaskDlgMirroredParameters(ViewProviderMirrored *Mirro Content.push_back(parameter); } -//==== calls from the TaskView =============================================================== - -bool TaskDlgMirroredParameters::accept() -{ - TaskMirroredParameters* mirrorParameter = static_cast(parameter); - std::vector mirrorPlanes; - App::DocumentObject* obj; - mirrorParameter->getMirrorPlane(obj, mirrorPlanes); - std::string mirrorPlane = buildLinkSingleSubPythonStr(obj, mirrorPlanes); - - FCMD_OBJ_CMD(vp->getObject(),"MirrorPlane = " << mirrorPlane); - - return TaskDlgTransformedParameters::accept(); -} #include "moc_TaskMirroredParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index ff354786fa..641fc590df 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -53,10 +53,6 @@ public: ~TaskMirroredParameters() override; - void getMirrorPlane(App::DocumentObject*& obj, std::vector& sub) const; - - void apply() override; - protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -67,7 +63,9 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + void doApply() override; void updateUI(); + void getMirrorPlane(App::DocumentObject*& obj, std::vector& sub) const; private: ComboLinks planeLinks; @@ -82,9 +80,6 @@ class TaskDlgMirroredParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMirroredParameters(ViewProviderMirrored *MirroredView); - - /// is called by the framework if the dialog is accepted (Ok) - bool accept() override; }; } //namespace PartDesignGui diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 75ab3f23ab..e903839601 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -145,6 +145,8 @@ void TaskMultiTransformParameters::closeSubTask() { if (subTask) { ui->buttonOK->hide(); + exitSelectionMode(); + subTask->apply(); // Remove all parameter ui widgets and layout ui->subFeatureWidget->setUpdatesEnabled(false); @@ -152,8 +154,6 @@ void TaskMultiTransformParameters::closeSubTask() qDeleteAll(ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); ui->subFeatureWidget->setUpdatesEnabled(true); - - exitSelectionMode(); delete subTask; subTask = nullptr; } @@ -450,14 +450,19 @@ void TaskMultiTransformParameters::onUpdateView(bool on) } } -const std::vector TaskMultiTransformParameters::getTransformFeatures() const -{ - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); - return pcMultiTransform->Transformations.getValues(); -} - -void TaskMultiTransformParameters::apply() +void TaskMultiTransformParameters::doApply() { + PartDesign::MultiTransform* pcMultiTransform = static_cast(getObject()); + std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + std::stringstream str; + str << Gui::Command::getObjectCmd(TransformedView->getObject()) << ".Transformations = ["; + for (auto it : transformFeatures) { + if (it) { + str << Gui::Command::getObjectCmd(it) << ","; + } + } + str << "]"; + Gui::Command::runCommand(Gui::Command::Doc,str.str().c_str()); } TaskMultiTransformParameters::~TaskMultiTransformParameters() @@ -484,24 +489,5 @@ TaskDlgMultiTransformParameters::TaskDlgMultiTransformParameters(ViewProviderMul Content.push_back(parameter); } -//==== calls from the TaskView =============================================================== - -bool TaskDlgMultiTransformParameters::accept() -{ - // Set up transformations - TaskMultiTransformParameters* mtParameter = static_cast(parameter); - std::vector transformFeatures = mtParameter->getTransformFeatures(); - std::stringstream str; - str << Gui::Command::getObjectCmd(vp->getObject()) << ".Transformations = ["; - for (auto it : transformFeatures) { - if (it) { - str << Gui::Command::getObjectCmd(it) << ","; - } - } - str << "]"; - Gui::Command::runCommand(Gui::Command::Doc,str.str().c_str()); - - return TaskDlgFeatureParameters::accept (); -} #include "moc_TaskMultiTransformParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 6270dcfcdf..feb3730dcb 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -54,15 +54,11 @@ public: explicit TaskMultiTransformParameters(ViewProviderTransformed *TransformedView,QWidget *parent = nullptr); ~TaskMultiTransformParameters() override; - const std::vector getTransformFeatures() const; - /// Return the currently active subFeature PartDesign::Transformed* getSubFeature() { return subFeature; } - void apply() override; - private Q_SLOTS: /// User finished editing a subFeature void onSubTaskButtonOK(); @@ -82,6 +78,7 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + void doApply() override; /** Notifies when the object is about to be removed. */ void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; @@ -108,8 +105,6 @@ class TaskDlgMultiTransformParameters : public TaskDlgTransformedParameters public: explicit TaskDlgMultiTransformParameters(ViewProviderMultiTransform *MultiTransformView); - /// is called by the framework if the dialog is accepted (Ok) - bool accept() override; /// is called by the framework if the dialog is rejected (Cancel) // virtual bool reject(); }; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index e297023f61..db282a28f4 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -329,6 +329,11 @@ bool TaskPolarPatternParameters::getReverse() const return ui->checkReverse->isChecked(); } +int TaskPolarPatternParameters::getMode() const +{ + return ui->comboMode->currentIndex(); +} + double TaskPolarPatternParameters::getAngle() const { return ui->polarAngle->value().getValue(); @@ -356,17 +361,19 @@ TaskPolarPatternParameters::~TaskPolarPatternParameters() } } -void TaskPolarPatternParameters::apply() +void TaskPolarPatternParameters::doApply() { - auto tobj = TransformedView->getObject(); std::vector axes; App::DocumentObject* obj; getAxis(obj, axes); std::string axis = buildLinkSingleSubPythonStr(obj, axes); + auto tobj = getObject(); FCMD_OBJ_CMD(tobj,"Axis = " << axis.c_str()); FCMD_OBJ_CMD(tobj,"Reversed = " << getReverse()); + FCMD_OBJ_CMD(tobj,"Mode = " << getMode()); ui->polarAngle->apply(); + ui->angleOffset->apply(); ui->spinOccurrences->apply(); } diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 1d5c8e2e9a..f0fcfc8f53 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -53,8 +53,6 @@ public: TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); ~TaskPolarPatternParameters() override; - void apply() override; - protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -71,6 +69,7 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + void doApply() override; void connectSignals(); void updateUI(); @@ -81,6 +80,7 @@ private: const std::string getStdAxis() const; const std::string getAxis() const; bool getReverse() const; + int getMode() const; double getAngle() const; unsigned getOccurrences() const; diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index 19922ad3b6..76fd21239e 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -27,6 +27,7 @@ #endif #include +#include #include #include #include @@ -141,11 +142,9 @@ unsigned TaskScaledParameters::getOccurrences() const return ui->spinOccurrences->value(); } -void TaskScaledParameters::apply() +void TaskScaledParameters::doApply() { - std::string name = TransformedView->getObject()->getNameInDocument(); - - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Factor = %f",name.c_str(), getFactor()); + FCMD_OBJ_CMD(getObject(),"Factor = " << getFactor()); ui->spinOccurrences->apply(); } @@ -161,14 +160,5 @@ TaskDlgScaledParameters::TaskDlgScaledParameters(ViewProviderScaled *ScaledView) Content.push_back(parameter); } -//==== calls from the TaskView =============================================================== - -bool TaskDlgScaledParameters::accept() -{ - - parameter->apply(); - - return TaskDlgTransformedParameters::accept(); -} #include "moc_TaskScaledParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index 49373d895a..1ab7c6ff6f 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -51,8 +51,6 @@ public: /// Constructor for task with parent task (MultiTransform mode) TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); - void apply() override; - private Q_SLOTS: void onFactor(const double f); void onOccurrences(const uint n); @@ -61,6 +59,7 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; + void doApply() override; void updateUI(); double getFactor() const; @@ -78,9 +77,6 @@ class TaskDlgScaledParameters : public TaskDlgTransformedParameters public: explicit TaskDlgScaledParameters(ViewProviderScaled *ScaledView); - - /// is called by the framework if the dialog is accepted (Ok) - bool accept() override; }; } //namespace PartDesignGui diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 9d2f4ea0d4..c296a1d4a2 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -554,6 +554,7 @@ TaskDlgTransformedParameters::TaskDlgTransformedParameters(ViewProviderTransform bool TaskDlgTransformedParameters::accept() { parameter->exitSelectionMode(); + parameter->apply(); return TaskDlgFeatureParameters::accept (); } @@ -562,6 +563,7 @@ bool TaskDlgTransformedParameters::reject() { // ensure that we are not in selection mode parameter->exitSelectionMode(); + return TaskDlgFeatureParameters::reject (); } diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index a46dce1216..4ddc5dd79f 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -131,7 +131,11 @@ public: explicit TaskTransformedParameters(TaskMultiTransformParameters *parentTask); ~TaskTransformedParameters() override; - virtual void apply() = 0; + /// Apply changes for python console + void apply() + { + doApply(); + } /*! * \brief setEnabledTransaction @@ -212,6 +216,9 @@ private: /// Change translation of the parameter UI virtual void retranslateParameterUI(QWidget* widget) = 0; + /// Implementation for apply() + virtual void doApply() = 0; + void addObject(App::DocumentObject*); void removeObject(App::DocumentObject*); void clearButtons(); From bb250740768d29e8c3ff4baf3a7a3741f06ad6c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Sat, 17 Feb 2024 14:41:12 +0100 Subject: [PATCH 08/14] Reformat files with clang-format --- .../Gui/TaskLinearPatternParameters.cpp | 204 +++++++----- .../Gui/TaskLinearPatternParameters.h | 24 +- .../PartDesign/Gui/TaskMirroredParameters.cpp | 99 +++--- .../PartDesign/Gui/TaskMirroredParameters.h | 24 +- .../Gui/TaskMultiTransformParameters.cpp | 290 +++++++++++------ .../Gui/TaskMultiTransformParameters.h | 31 +- .../Gui/TaskPolarPatternParameters.cpp | 176 ++++++---- .../Gui/TaskPolarPatternParameters.h | 24 +- .../PartDesign/Gui/TaskScaledParameters.cpp | 38 ++- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 24 +- .../Gui/TaskTransformedParameters.cpp | 308 ++++++++++-------- .../Gui/TaskTransformedParameters.h | 98 +++--- 12 files changed, 819 insertions(+), 521 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index d4c19630af..a35b5ff75d 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -24,8 +24,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include -# include +#include +#include #endif #include @@ -52,26 +52,30 @@ using namespace Gui; /* TRANSLATOR PartDesignGui::TaskLinearPatternParameters */ -TaskLinearPatternParameters::TaskLinearPatternParameters(ViewProviderTransformed *TransformedView,QWidget *parent) +TaskLinearPatternParameters::TaskLinearPatternParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskLinearPatternParameters) { setupUI(); } -TaskLinearPatternParameters::TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) - : TaskTransformedParameters(parentTask), ui(new Ui_TaskLinearPatternParameters) +TaskLinearPatternParameters::TaskLinearPatternParameters(TaskMultiTransformParameters* parentTask, + QWidget* parameterWidget) + : TaskTransformedParameters(parentTask) + , ui(new Ui_TaskLinearPatternParameters) { setupParameterUI(parameterWidget); } -void TaskLinearPatternParameters::setupParameterUI(QWidget *widget) +void TaskLinearPatternParameters::setupParameterUI(QWidget* widget) { ui->setupUi(widget); QMetaObject::connectSlotsByName(this); // Get the feature data - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); ui->spinLength->bind(pcLinearPattern->Length); ui->spinOffset->bind(pcLinearPattern->Offset); @@ -101,16 +105,18 @@ void TaskLinearPatternParameters::setupParameterUI(QWidget *widget) this->fillAxisCombo(dirLinks, nullptr); } - //show the parts coordinate system axis for selection - PartDesign::Body * body = PartDesign::Body::findBodyOf(getObject()); - if(body) { + // show the parts coordinate system axis for selection + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); + if (body) { try { - App::Origin *origin = body->getOrigin(); + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(true, false); - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -119,21 +125,35 @@ void TaskLinearPatternParameters::setupParameterUI(QWidget *widget) updateViewTimer = new QTimer(this); updateViewTimer->setSingleShot(true); updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, &QTimer::timeout, - this, &TaskLinearPatternParameters::onUpdateViewTimer); + connect(updateViewTimer, + &QTimer::timeout, + this, + &TaskLinearPatternParameters::onUpdateViewTimer); - connect(ui->comboDirection, qOverload(&QComboBox::activated), - this, &TaskLinearPatternParameters::onDirectionChanged); - connect(ui->checkReverse, &QCheckBox::toggled, - this, &TaskLinearPatternParameters::onCheckReverse); - connect(ui->comboMode, qOverload(&QComboBox::activated), - this, &TaskLinearPatternParameters::onModeChanged); - connect(ui->spinLength, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskLinearPatternParameters::onLength); - connect(ui->spinOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskLinearPatternParameters::onOffset); - connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, - this, &TaskLinearPatternParameters::onOccurrences); + connect(ui->comboDirection, + qOverload(&QComboBox::activated), + this, + &TaskLinearPatternParameters::onDirectionChanged); + connect(ui->checkReverse, + &QCheckBox::toggled, + this, + &TaskLinearPatternParameters::onCheckReverse); + connect(ui->comboMode, + qOverload(&QComboBox::activated), + this, + &TaskLinearPatternParameters::onModeChanged); + connect(ui->spinLength, + qOverload(&Gui::QuantitySpinBox::valueChanged), + this, + &TaskLinearPatternParameters::onLength); + connect(ui->spinOffset, + qOverload(&Gui::QuantitySpinBox::valueChanged), + this, + &TaskLinearPatternParameters::onOffset); + connect(ui->spinOccurrences, + &Gui::UIntSpinBox::unsignedChanged, + this, + &TaskLinearPatternParameters::onOccurrences); } void TaskLinearPatternParameters::retranslateParameterUI(QWidget* widget) @@ -143,22 +163,26 @@ void TaskLinearPatternParameters::retranslateParameterUI(QWidget* widget) void TaskLinearPatternParameters::updateUI() { - if (blockUpdate) + if (blockUpdate) { return; + } blockUpdate = true; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); - PartDesign::LinearPatternMode mode = static_cast(pcLinearPattern->Mode.getValue()); + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); + PartDesign::LinearPatternMode mode = + static_cast(pcLinearPattern->Mode.getValue()); bool reverse = pcLinearPattern->Reversed.getValue(); double length = pcLinearPattern->Length.getValue(); double offset = pcLinearPattern->Offset.getValue(); unsigned occurrences = pcLinearPattern->Occurrences.getValue(); - if (dirLinks.setCurrentLink(pcLinearPattern->Direction) == -1){ - //failed to set current, because the link isn't in the list yet - dirLinks.addLink(pcLinearPattern->Direction, getRefStr(pcLinearPattern->Direction.getValue(), - pcLinearPattern->Direction.getSubValues())); + if (dirLinks.setCurrentLink(pcLinearPattern->Direction) == -1) { + // failed to set current, because the link isn't in the list yet + dirLinks.addLink(pcLinearPattern->Direction, + getRefStr(pcLinearPattern->Direction.getValue(), + pcLinearPattern->Direction.getSubValues())); dirLinks.setCurrentLink(pcLinearPattern->Direction); } @@ -206,16 +230,18 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges exitSelectionMode(); std::vector directions; App::DocumentObject* selObj = nullptr; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); if (pcLinearPattern) { getReferencedSelection(pcLinearPattern, msg, selObj, directions); // Note: ReferenceSelection has already checked the selection for validity - if (selObj && (selectionMode == SelectionMode::Reference || - selObj->isDerivedFrom(App::Line::getClassTypeId()) || - selObj->isDerivedFrom(Part::Feature::getClassTypeId()) || - selObj->isDerivedFrom(PartDesign::Line::getClassTypeId()) || - selObj->isDerivedFrom(PartDesign::Plane::getClassTypeId()))) { + if (selObj + && (selectionMode == SelectionMode::Reference + || selObj->isDerivedFrom(App::Line::getClassTypeId()) + || selObj->isDerivedFrom(Part::Feature::getClassTypeId()) + || selObj->isDerivedFrom(PartDesign::Line::getClassTypeId()) + || selObj->isDerivedFrom(PartDesign::Plane::getClassTypeId()))) { setupTransaction(); pcLinearPattern->Direction.setValue(selObj, directions); recomputeFeature(); @@ -226,20 +252,26 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges } } -void TaskLinearPatternParameters::onCheckReverse(const bool on) { - if (blockUpdate) +void TaskLinearPatternParameters::onCheckReverse(const bool on) +{ + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); pcLinearPattern->Reversed.setValue(on); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onModeChanged(const int mode) { - if (blockUpdate) +void TaskLinearPatternParameters::onModeChanged(const int mode) +{ + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); pcLinearPattern->Mode.setValue(mode); adaptVisibilityToMode(); @@ -248,30 +280,39 @@ void TaskLinearPatternParameters::onModeChanged(const int mode) { kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onLength(const double l) { - if (blockUpdate) +void TaskLinearPatternParameters::onLength(const double l) +{ + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); pcLinearPattern->Length.setValue(l); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onOffset(const double o) { - if (blockUpdate) +void TaskLinearPatternParameters::onOffset(const double o) +{ + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); pcLinearPattern->Offset.setValue(o); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onOccurrences(const uint n) { - if (blockUpdate) +void TaskLinearPatternParameters::onOccurrences(const uint n) +{ + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); pcLinearPattern->Occurrences.setValue(n); exitSelectionMode(); @@ -280,23 +321,28 @@ void TaskLinearPatternParameters::onOccurrences(const uint n) { void TaskLinearPatternParameters::onDirectionChanged(int /*num*/) { - if (blockUpdate) + if (blockUpdate) { return; - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); - try{ + } + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); + try { if (!dirLinks.getCurrentLink().getValue()) { // enter reference selection mode hideObject(); showBase(); selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); - addReferenceSelectionGate(AllowSelection::EDGE | AllowSelection::FACE | AllowSelection::PLANAR); - } else { + addReferenceSelectionGate(AllowSelection::EDGE | AllowSelection::FACE + | AllowSelection::PLANAR); + } + else { exitSelectionMode(); pcLinearPattern->Direction.Paste(dirLinks.getCurrentLink()); } - } catch (Base::Exception &e) { - QMessageBox::warning(nullptr,tr("Error"),QApplication::translate("Exception", e.what())); + } + catch (Base::Exception& e) { + QMessageBox::warning(nullptr, tr("Error"), QApplication::translate("Exception", e.what())); } kickUpdateViewTimer(); @@ -307,13 +353,14 @@ void TaskLinearPatternParameters::onUpdateView(bool on) blockUpdate = !on; if (on) { // Do the same like in TaskDlgLinearPatternParameters::accept() but without doCommand - PartDesign::LinearPattern* pcLinearPattern = static_cast(getObject()); + PartDesign::LinearPattern* pcLinearPattern = + static_cast(getObject()); std::vector directions; App::DocumentObject* obj; setupTransaction(); getDirection(obj, directions); - pcLinearPattern->Direction.setValue(obj,directions); + pcLinearPattern->Direction.setValue(obj, directions); pcLinearPattern->Reversed.setValue(getReverse()); pcLinearPattern->Length.setValue(getLength()); pcLinearPattern->Offset.setValue(getOffset()); @@ -323,9 +370,10 @@ void TaskLinearPatternParameters::onUpdateView(bool on) } } -void TaskLinearPatternParameters::getDirection(App::DocumentObject*& obj, std::vector& sub) const +void TaskLinearPatternParameters::getDirection(App::DocumentObject*& obj, + std::vector& sub) const { - const App::PropertyLinkSub &lnk = dirLinks.getCurrentLink(); + const App::PropertyLinkSub& lnk = dirLinks.getCurrentLink(); obj = lnk.getValue(); sub = lnk.getSubValues(); } @@ -358,17 +406,18 @@ unsigned TaskLinearPatternParameters::getOccurrences() const TaskLinearPatternParameters::~TaskLinearPatternParameters() { try { - //hide the parts coordinate system axis for selection - PartDesign::Body * body = PartDesign::Body::findBodyOf(getObject()); + // hide the parts coordinate system axis for selection + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); if (body) { - App::Origin *origin = body->getOrigin(); + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); vpOrigin->resetTemporaryVisibility(); } } - catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -380,9 +429,9 @@ void TaskLinearPatternParameters::doApply() std::string direction = buildLinkSingleSubPythonStr(obj, directions); auto tobj = getObject(); - FCMD_OBJ_CMD(tobj,"Direction = " << direction); - FCMD_OBJ_CMD(tobj,"Reversed = " << getReverse()); - FCMD_OBJ_CMD(tobj,"Mode = " << getMode()); + FCMD_OBJ_CMD(tobj, "Direction = " << direction); + FCMD_OBJ_CMD(tobj, "Reversed = " << getReverse()); + FCMD_OBJ_CMD(tobj, "Mode = " << getMode()); ui->spinLength->apply(); ui->spinOffset->apply(); ui->spinOccurrences->apply(); @@ -393,7 +442,8 @@ void TaskLinearPatternParameters::doApply() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgLinearPatternParameters::TaskDlgLinearPatternParameters(ViewProviderLinearPattern *LinearPatternView) +TaskDlgLinearPatternParameters::TaskDlgLinearPatternParameters( + ViewProviderLinearPattern* LinearPatternView) : TaskDlgTransformedParameters(LinearPatternView) { parameter = new TaskLinearPatternParameters(LinearPatternView); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 410a2f0e52..3a2645dc13 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -30,27 +30,31 @@ class QTimer; class Ui_TaskLinearPatternParameters; -namespace App { +namespace App +{ class Property; } -namespace Gui { +namespace Gui +{ class ViewProvider; } -namespace PartDesignGui { +namespace PartDesignGui +{ class TaskMultiTransformParameters; -class TaskLinearPatternParameters : public TaskTransformedParameters +class TaskLinearPatternParameters: public TaskTransformedParameters { Q_OBJECT public: /// Constructor for task with ViewProvider - explicit TaskLinearPatternParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); + explicit TaskLinearPatternParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskLinearPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); + TaskLinearPatternParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); ~TaskLinearPatternParameters() override; protected: @@ -92,14 +96,14 @@ private: /// simulation dialog for the TaskView -class TaskDlgLinearPatternParameters : public TaskDlgTransformedParameters +class TaskDlgLinearPatternParameters: public TaskDlgTransformedParameters { Q_OBJECT public: - explicit TaskDlgLinearPatternParameters(ViewProviderLinearPattern *LinearPatternView); + explicit TaskDlgLinearPatternParameters(ViewProviderLinearPattern* LinearPatternView); }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index db694beb3a..6cbd6eba04 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -24,7 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include +#include #endif #include @@ -48,48 +48,55 @@ using namespace Gui; /* TRANSLATOR PartDesignGui::TaskMirroredParameters */ -TaskMirroredParameters::TaskMirroredParameters(ViewProviderTransformed *TransformedView, QWidget *parent) +TaskMirroredParameters::TaskMirroredParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskMirroredParameters) { setupUI(); } -TaskMirroredParameters::TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) - : TaskTransformedParameters(parentTask), ui(new Ui_TaskMirroredParameters) +TaskMirroredParameters::TaskMirroredParameters(TaskMultiTransformParameters* parentTask, + QWidget* parameterWidget) + : TaskTransformedParameters(parentTask) + , ui(new Ui_TaskMirroredParameters) { setupParameterUI(parameterWidget); } -void TaskMirroredParameters::setupParameterUI(QWidget *widget) +void TaskMirroredParameters::setupParameterUI(QWidget* widget) { ui->setupUi(widget); QMetaObject::connectSlotsByName(this); - connect(ui->comboPlane, qOverload(&QComboBox::activated), - this, &TaskMirroredParameters::onPlaneChanged); + connect(ui->comboPlane, + qOverload(&QComboBox::activated), + this, + &TaskMirroredParameters::onPlaneChanged); this->planeLinks.setCombo(*(ui->comboPlane)); ui->comboPlane->setEnabled(true); App::DocumentObject* sketch = getSketchObject(); if (sketch && sketch->isDerivedFrom(Part::Part2DObject::getClassTypeId())) { - this->fillPlanesCombo(planeLinks,static_cast(sketch)); + this->fillPlanesCombo(planeLinks, static_cast(sketch)); } else { this->fillPlanesCombo(planeLinks, nullptr); } - //show the parts coordinate system planes for selection - PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() ); - if(body) { + // show the parts coordinate system planes for selection + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); + if (body) { try { - App::Origin *origin = body->getOrigin(); + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(false, true); - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -103,15 +110,18 @@ void TaskMirroredParameters::retranslateParameterUI(QWidget* widget) void TaskMirroredParameters::updateUI() { - if (blockUpdate) + if (blockUpdate) { return; + } blockUpdate = true; PartDesign::Mirrored* pcMirrored = static_cast(getObject()); - if (planeLinks.setCurrentLink(pcMirrored->MirrorPlane) == -1){ - //failed to set current, because the link isn't in the list yet - planeLinks.addLink(pcMirrored->MirrorPlane, getRefStr(pcMirrored->MirrorPlane.getValue(),pcMirrored->MirrorPlane.getSubValues())); + if (planeLinks.setCurrentLink(pcMirrored->MirrorPlane) == -1) { + // failed to set current, because the link isn't in the list yet + planeLinks.addLink( + pcMirrored->MirrorPlane, + getRefStr(pcMirrored->MirrorPlane.getValue(), pcMirrored->MirrorPlane.getSubValues())); planeLinks.setCurrentLink(pcMirrored->MirrorPlane); } @@ -124,15 +134,18 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg if (originalSelected(msg)) { exitSelectionMode(); - } else { + } + else { std::vector mirrorPlanes; App::DocumentObject* selObj; PartDesign::Mirrored* pcMirrored = static_cast(getObject()); getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); - if (!selObj) - return; + if (!selObj) { + return; + } - if ( selectionMode == SelectionMode::Reference || selObj->isDerivedFrom ( App::Plane::getClassTypeId () ) ) { + if (selectionMode == SelectionMode::Reference + || selObj->isDerivedFrom(App::Plane::getClassTypeId())) { setupTransaction(); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); recomputeFeature(); @@ -145,11 +158,12 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg void TaskMirroredParameters::onPlaneChanged(int /*num*/) { - if (blockUpdate) + if (blockUpdate) { return; + } setupTransaction(); PartDesign::Mirrored* pcMirrored = static_cast(getObject()); - try{ + try { if (!planeLinks.getCurrentLink().getValue()) { // enter reference selection mode hideObject(); @@ -157,12 +171,14 @@ void TaskMirroredParameters::onPlaneChanged(int /*num*/) selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); addReferenceSelectionGate(AllowSelection::FACE | AllowSelection::PLANAR); - } else { + } + else { exitSelectionMode(); pcMirrored->MirrorPlane.Paste(planeLinks.getCurrentLink()); } - } catch (Base::Exception &e) { - QMessageBox::warning(nullptr,tr("Error"),QApplication::translate("Exception", e.what())); + } + catch (Base::Exception& e) { + QMessageBox::warning(nullptr, tr("Error"), QApplication::translate("Exception", e.what())); } recomputeFeature(); @@ -179,15 +195,16 @@ void TaskMirroredParameters::onUpdateView(bool on) App::DocumentObject* obj; getMirrorPlane(obj, mirrorPlanes); - pcMirrored->MirrorPlane.setValue(obj,mirrorPlanes); + pcMirrored->MirrorPlane.setValue(obj, mirrorPlanes); recomputeFeature(); } } -void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, std::vector &sub) const +void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, + std::vector& sub) const { - const App::PropertyLinkSub &lnk = planeLinks.getCurrentLink(); + const App::PropertyLinkSub& lnk = planeLinks.getCurrentLink(); obj = lnk.getValue(); sub = lnk.getSubValues(); } @@ -199,22 +216,24 @@ void TaskMirroredParameters::doApply() getMirrorPlane(obj, mirrorPlanes); std::string mirrorPlane = buildLinkSingleSubPythonStr(obj, mirrorPlanes); - FCMD_OBJ_CMD(getObject(),"MirrorPlane = " << mirrorPlane); + FCMD_OBJ_CMD(getObject(), "MirrorPlane = " << mirrorPlane); } TaskMirroredParameters::~TaskMirroredParameters() { - //hide the parts coordinate system axis for selection + // hide the parts coordinate system axis for selection try { - PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() ); - if ( body ) { - App::Origin *origin = body->getOrigin(); + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); + if (body) { + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); vpOrigin->resetTemporaryVisibility(); } - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -223,7 +242,7 @@ TaskMirroredParameters::~TaskMirroredParameters() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgMirroredParameters::TaskDlgMirroredParameters(ViewProviderMirrored *MirroredView) +TaskDlgMirroredParameters::TaskDlgMirroredParameters(ViewProviderMirrored* MirroredView) : TaskDlgTransformedParameters(MirroredView) { parameter = new TaskMirroredParameters(MirroredView); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index 641fc590df..9da2d05671 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -29,27 +29,31 @@ class Ui_TaskMirroredParameters; -namespace App { +namespace App +{ class Property; } -namespace Gui { +namespace Gui +{ class ViewProvider; } -namespace PartDesignGui { +namespace PartDesignGui +{ class TaskMultiTransformParameters; -class TaskMirroredParameters : public TaskTransformedParameters +class TaskMirroredParameters: public TaskTransformedParameters { Q_OBJECT public: /// Constructor for task with ViewProvider - explicit TaskMirroredParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); + explicit TaskMirroredParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskMirroredParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); + TaskMirroredParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); ~TaskMirroredParameters() override; @@ -74,14 +78,14 @@ private: /// simulation dialog for the TaskView -class TaskDlgMirroredParameters : public TaskDlgTransformedParameters +class TaskDlgMirroredParameters: public TaskDlgTransformedParameters { Q_OBJECT public: - explicit TaskDlgMirroredParameters(ViewProviderMirrored *MirroredView); + explicit TaskDlgMirroredParameters(ViewProviderMirrored* MirroredView); }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index e903839601..65fde209b3 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -24,7 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include +#include #endif #include @@ -54,63 +54,80 @@ using namespace Gui; /* TRANSLATOR PartDesignGui::TaskMultiTransformParameters */ -TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransformed *TransformedView,QWidget *parent) +TaskMultiTransformParameters::TaskMultiTransformParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskMultiTransformParameters) { setupUI(); } -void TaskMultiTransformParameters::setupParameterUI(QWidget *widget) +void TaskMultiTransformParameters::setupParameterUI(QWidget* widget) { ui->setupUi(widget); QMetaObject::connectSlotsByName(this); // Create a context menu for the listview of transformation features QAction* action = new QAction(tr("Edit"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformEdit); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformEdit); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Delete"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformDelete); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformDelete); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Add mirrored transformation"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformAddMirrored); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformAddMirrored); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Add linear pattern"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformAddLinearPattern); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformAddLinearPattern); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Add polar pattern"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformAddPolarPattern); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformAddPolarPattern); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Add scaled transformation"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onTransformAddScaled); + action->connect(action, + &QAction::triggered, + this, + &TaskMultiTransformParameters::onTransformAddScaled); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Move up"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onMoveUp); + action->connect(action, &QAction::triggered, this, &TaskMultiTransformParameters::onMoveUp); ui->listTransformFeatures->addAction(action); action = new QAction(tr("Move down"), ui->listTransformFeatures); - action->connect(action, &QAction::triggered, - this, &TaskMultiTransformParameters::onMoveDown); + action->connect(action, &QAction::triggered, this, &TaskMultiTransformParameters::onMoveDown); ui->listTransformFeatures->addAction(action); ui->listTransformFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listTransformFeatures, &QListWidget::activated, - this, &TaskMultiTransformParameters::onTransformActivated); + connect(ui->listTransformFeatures, + &QListWidget::activated, + this, + &TaskMultiTransformParameters::onTransformActivated); - connect(ui->buttonOK, &QToolButton::pressed, - this, &TaskMultiTransformParameters::onSubTaskButtonOK); + connect(ui->buttonOK, + &QToolButton::pressed, + this, + &TaskMultiTransformParameters::onSubTaskButtonOK); ui->buttonOK->hide(); // Get the transformFeatures data - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(TransformedView->getObject()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); // Fill data into dialog elements ui->listTransformFeatures->setEnabled(true); @@ -123,7 +140,8 @@ void TaskMultiTransformParameters::setupParameterUI(QWidget *widget) if (!transformFeatures.empty()) { ui->listTransformFeatures->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); editHint = false; - } else { + } + else { ui->listTransformFeatures->addItem(tr("Right-click to add")); editHint = true; } @@ -136,8 +154,9 @@ void TaskMultiTransformParameters::retranslateParameterUI(QWidget* widget) void TaskMultiTransformParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) { - if (Obj.getObject() == this->subFeature) + if (Obj.getObject() == this->subFeature) { this->subFeature = nullptr; + } TaskTransformedParameters::slotDeletedObject(Obj); } @@ -150,8 +169,10 @@ void TaskMultiTransformParameters::closeSubTask() // Remove all parameter ui widgets and layout ui->subFeatureWidget->setUpdatesEnabled(false); - qDeleteAll(ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); - qDeleteAll(ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); + qDeleteAll( + ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); + qDeleteAll( + ui->subFeatureWidget->findChildren(QString(), Qt::FindDirectChildrenOnly)); ui->subFeatureWidget->setUpdatesEnabled(true); delete subTask; @@ -161,15 +182,19 @@ void TaskMultiTransformParameters::closeSubTask() void TaskMultiTransformParameters::onTransformDelete() { - if (editHint) - return; // Can't delete the hint... + if (editHint) { + return; // Can't delete the hint... + } int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(TransformedView->getObject()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); App::DocumentObject* feature = transformFeatures[row]; - if (feature == this->subFeature) + if (feature == this->subFeature) { this->subFeature = nullptr; + } setupTransaction(); pcMultiTransform->getDocument()->removeObject(feature->getNameInDocument()); @@ -177,8 +202,8 @@ void TaskMultiTransformParameters::onTransformDelete() transformFeatures.erase(transformFeatures.begin() + row); pcMultiTransform->Transformations.setValues(transformFeatures); - // Note: When the last transformation is deleted, recomputeFeature does nothing, because Transformed::execute() - // says: "No transformations defined, exit silently" + // Note: When the last transformation is deleted, recomputeFeature does nothing, because + // Transformed::execute() says: "No transformations defined, exit silently" recomputeFeature(); ui->listTransformFeatures->model()->removeRow(row); @@ -187,25 +212,34 @@ void TaskMultiTransformParameters::onTransformDelete() void TaskMultiTransformParameters::onTransformEdit() { - if (editHint) - return; // Can't edit the hint... - closeSubTask(); // For example if user is editing one subTask and then double-clicks on another without OK'ing first + if (editHint) { + return; // Can't edit the hint... + } + closeSubTask(); // For example if user is editing one subTask and then double-clicks on another + // without OK'ing first ui->listTransformFeatures->currentItem()->setSelected(true); int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(TransformedView->getObject()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); subFeature = static_cast(transformFeatures[row]); - if (subFeature->is()) + if (subFeature->is()) { subTask = new TaskMirroredParameters(this, ui->subFeatureWidget); - else if (subFeature->is()) + } + else if (subFeature->is()) { subTask = new TaskLinearPatternParameters(this, ui->subFeatureWidget); - else if (subFeature->is()) + } + else if (subFeature->is()) { subTask = new TaskPolarPatternParameters(this, ui->subFeatureWidget); - else if (subFeature->is()) + } + else if (subFeature->is()) { subTask = new TaskScaledParameters(this, ui->subFeatureWidget); - else - return; // TODO: Show an error? + } + else { + return; // TODO: Show an error? + } ui->buttonOK->show(); @@ -221,30 +255,38 @@ void TaskMultiTransformParameters::onTransformActivated(const QModelIndex& index void TaskMultiTransformParameters::onTransformAddMirrored() { closeSubTask(); - std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("Mirrored"); + std::string newFeatName = + TransformedView->getObject()->getDocument()->getUniqueObjectName("Mirrored"); auto pcActiveBody = PartDesignGui::getBody(false); - if (!pcActiveBody) + if (!pcActiveBody) { return; + } - if (isEnabledTransaction()) + if (isEnabledTransaction()) { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Mirrored")); + } - FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::Mirrored','"<getDocument()->getObject(newFeatName.c_str()); - if (!Feat) + if (!Feat) { return; - //Gui::Command::updateActive(); + } + // Gui::Command::updateActive(); App::DocumentObject* sketch = getSketchObject(); - if (sketch) - FCMD_OBJ_CMD(Feat, "MirrorPlane = ("<getOrigin(); - FCMD_OBJ_CMD(Feat, "MirrorPlane = ("<getXY())<<",[''])"); + FCMD_OBJ_CMD(Feat, + "MirrorPlane = (" << Gui::Command::getObjectCmd(orig->getXY()) << ",[''])"); } finishAdd(newFeatName); // show the new view when no error - if (!Feat->isError()) + if (!Feat->isError()) { TransformedView->getObject()->Visibility.setValue(true); + } } void TaskMultiTransformParameters::onTransformAddLinearPattern() @@ -252,29 +294,36 @@ void TaskMultiTransformParameters::onTransformAddLinearPattern() // See CmdPartDesignLinearPattern // closeSubTask(); - std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("LinearPattern"); + std::string newFeatName = + TransformedView->getObject()->getDocument()->getUniqueObjectName("LinearPattern"); auto pcActiveBody = PartDesignGui::getBody(false); - if (!pcActiveBody) + if (!pcActiveBody) { return; + } - if (isEnabledTransaction()) + if (isEnabledTransaction()) { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Make LinearPattern")); + } - FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::LinearPattern','"<getDocument()->getObject(newFeatName.c_str()); - if (!Feat) + if (!Feat) { return; - //Gui::Command::updateActive(); + } + // Gui::Command::updateActive(); App::DocumentObject* sketch = getSketchObject(); if (sketch) { - FCMD_OBJ_CMD(Feat, "Direction = ("<(Part::BodyBase::findBodyOf(getObject())); + PartDesign::Body* body = + static_cast(Part::BodyBase::findBodyOf(getObject())); if (body) { - FCMD_OBJ_CMD(Feat, "Direction = ("<getOrigin()->getX())<<",[''])"); + FCMD_OBJ_CMD(Feat, + "Direction = (" << Gui::Command::getObjectCmd(body->getOrigin()->getX()) + << ",[''])"); } } @@ -283,75 +332,90 @@ void TaskMultiTransformParameters::onTransformAddLinearPattern() finishAdd(newFeatName); // show the new view when no error - if (!Feat->isError()) + if (!Feat->isError()) { TransformedView->getObject()->Visibility.setValue(true); + } } void TaskMultiTransformParameters::onTransformAddPolarPattern() { closeSubTask(); - std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("PolarPattern"); + std::string newFeatName = + TransformedView->getObject()->getDocument()->getUniqueObjectName("PolarPattern"); auto pcActiveBody = PartDesignGui::getBody(false); - if (!pcActiveBody) + if (!pcActiveBody) { return; + } - if (isEnabledTransaction()) + if (isEnabledTransaction()) { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "PolarPattern")); + } - FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::PolarPattern','"<getDocument()->getObject(newFeatName.c_str()); - if (!Feat) + if (!Feat) { return; - //Gui::Command::updateActive(); + } + // Gui::Command::updateActive(); App::DocumentObject* sketch = getSketchObject(); - if (sketch) - FCMD_OBJ_CMD(Feat, "Axis = ("<getOrigin(); - FCMD_OBJ_CMD(Feat, "Axis = ("<getX())<<",[''])"); + FCMD_OBJ_CMD(Feat, "Axis = (" << Gui::Command::getObjectCmd(orig->getX()) << ",[''])"); } FCMD_OBJ_CMD(Feat, "Angle = 360"); FCMD_OBJ_CMD(Feat, "Occurrences = 2"); finishAdd(newFeatName); // show the new view when no error - if (!Feat->isError()) + if (!Feat->isError()) { TransformedView->getObject()->Visibility.setValue(true); + } } void TaskMultiTransformParameters::onTransformAddScaled() { closeSubTask(); - std::string newFeatName = TransformedView->getObject()->getDocument()->getUniqueObjectName("Scaled"); + std::string newFeatName = + TransformedView->getObject()->getDocument()->getUniqueObjectName("Scaled"); auto pcActiveBody = PartDesignGui::getBody(false); - if (!pcActiveBody) + if (!pcActiveBody) { return; + } - if (isEnabledTransaction()) + if (isEnabledTransaction()) { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Scaled")); + } - FCMD_OBJ_CMD(pcActiveBody, "newObject('PartDesign::Scaled','"<getDocument()->getObject(newFeatName.c_str()); - if (!Feat) + if (!Feat) { return; - //Gui::Command::updateActive(); + } + // Gui::Command::updateActive(); FCMD_OBJ_CMD(Feat, "Factor = 2"); FCMD_OBJ_CMD(Feat, "Occurrences = 2"); finishAdd(newFeatName); // show the new view when no error - if (!Feat->isError()) + if (!Feat->isError()) { TransformedView->getObject()->Visibility.setValue(true); + } } -void TaskMultiTransformParameters::finishAdd(std::string &newFeatName) +void TaskMultiTransformParameters::finishAdd(std::string& newFeatName) { - //Gui::Command::updateActive(); - //Gui::Command::copyVisual(newFeatName.c_str(), "ShapeColor", getOriginals().front()->getNameInDocument().c_str()); - //Gui::Command::copyVisual(newFeatName.c_str(), "DisplayMode", getOriginals().front()->getNameInDocument().c_str()); + // Gui::Command::updateActive(); + // Gui::Command::copyVisual(newFeatName.c_str(), "ShapeColor", + // getOriginals().front()->getNameInDocument().c_str()); + // Gui::Command::copyVisual(newFeatName.c_str(), "DisplayMode", + // getOriginals().front()->getNameInDocument().c_str()); setupTransaction(); - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(TransformedView->getObject()); if (editHint) { // Remove hint, first feature is being added ui->listTransformFeatures->model()->removeRow(0); @@ -359,24 +423,30 @@ void TaskMultiTransformParameters::finishAdd(std::string &newFeatName) int row = ui->listTransformFeatures->currentIndex().row(); if (row < 0) { // Happens when first row (first transformation) is created - // Hide all the originals now (hiding them in Command.cpp presents the user with an empty screen!) + // Hide all the originals now (hiding them in Command.cpp presents the user with an empty + // screen!) hideBase(); } // Insert new transformation after the selected row - // This means that in order to insert at the beginning, the user has to use "Move Up" in the menu - App::DocumentObject* newFeature = pcMultiTransform->getDocument()->getObject(newFeatName.c_str()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + // This means that in order to insert at the beginning, the user has to use "Move Up" in the + // menu + App::DocumentObject* newFeature = + pcMultiTransform->getDocument()->getObject(newFeatName.c_str()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); if (row == ui->listTransformFeatures->model()->rowCount() - 1) { // Note: Inserts always happen before the specified iterator so in order to append at the // end we need to use push_back() and append() transformFeatures.push_back(newFeature); ui->listTransformFeatures->addItem(QString::fromLatin1(newFeature->Label.getValue())); - ui->listTransformFeatures->setCurrentRow(row+1, QItemSelectionModel::ClearAndSelect); - } else { + ui->listTransformFeatures->setCurrentRow(row + 1, QItemSelectionModel::ClearAndSelect); + } + else { // Note: The feature tree always seems to append to the end, no matter what we say here transformFeatures.insert(transformFeatures.begin() + row + 1, newFeature); - ui->listTransformFeatures->insertItem(row + 1, QString::fromLatin1(newFeature->Label.getValue())); + ui->listTransformFeatures->insertItem(row + 1, + QString::fromLatin1(newFeature->Label.getValue())); ui->listTransformFeatures->setCurrentRow(row + 1, QItemSelectionModel::ClearAndSelect); } pcMultiTransform->Transformations.setValues(transformFeatures); @@ -394,11 +464,14 @@ void TaskMultiTransformParameters::moveTransformFeature(const int increment) { setupTransaction(); int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = static_cast(TransformedView->getObject()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(TransformedView->getObject()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); - if (transformFeatures.empty()) + if (transformFeatures.empty()) { return; + } App::DocumentObject* feature = transformFeatures[row]; transformFeatures.erase(transformFeatures.begin() + row); @@ -408,8 +481,9 @@ void TaskMultiTransformParameters::moveTransformFeature(const int increment) row += increment; - if (row < 0) + if (row < 0) { row = 0; + } if (row >= ui->listTransformFeatures->model()->rowCount()) { // Note: Inserts always happen before the specified iterator so in order to append at the @@ -417,7 +491,8 @@ void TaskMultiTransformParameters::moveTransformFeature(const int increment) transformFeatures.push_back(feature); ui->listTransformFeatures->addItem(item); ui->listTransformFeatures->setCurrentRow(row, QItemSelectionModel::ClearAndSelect); - } else { + } + else { transformFeatures.insert(transformFeatures.begin() + row, feature); ui->listTransformFeatures->insertItem(row, item); ui->listTransformFeatures->setCurrentRow(row, QItemSelectionModel::ClearAndSelect); @@ -452,8 +527,10 @@ void TaskMultiTransformParameters::onUpdateView(bool on) void TaskMultiTransformParameters::doApply() { - PartDesign::MultiTransform* pcMultiTransform = static_cast(getObject()); - std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); + PartDesign::MultiTransform* pcMultiTransform = + static_cast(getObject()); + std::vector transformFeatures = + pcMultiTransform->Transformations.getValues(); std::stringstream str; str << Gui::Command::getObjectCmd(TransformedView->getObject()) << ".Transformations = ["; for (auto it : transformFeatures) { @@ -462,7 +539,7 @@ void TaskMultiTransformParameters::doApply() } } str << "]"; - Gui::Command::runCommand(Gui::Command::Doc,str.str().c_str()); + Gui::Command::runCommand(Gui::Command::Doc, str.str().c_str()); } TaskMultiTransformParameters::~TaskMultiTransformParameters() @@ -471,7 +548,7 @@ TaskMultiTransformParameters::~TaskMultiTransformParameters() closeSubTask(); } catch (const Py::Exception&) { - Base::PyException e; // extract the Python error text + Base::PyException e; // extract the Python error text e.ReportException(); } } @@ -481,7 +558,8 @@ TaskMultiTransformParameters::~TaskMultiTransformParameters() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgMultiTransformParameters::TaskDlgMultiTransformParameters(ViewProviderMultiTransform *MultiTransformView) +TaskDlgMultiTransformParameters::TaskDlgMultiTransformParameters( + ViewProviderMultiTransform* MultiTransformView) : TaskDlgTransformedParameters(MultiTransformView) { parameter = new TaskMultiTransformParameters(MultiTransformView); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index feb3730dcb..30a84f4bea 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -30,32 +30,37 @@ class Ui_TaskMultiTransformParameters; class QModelIndex; -namespace PartDesign { +namespace PartDesign +{ class Transformed; } -namespace App { +namespace App +{ class Property; } -namespace Gui { +namespace Gui +{ class ViewProvider; } -namespace PartDesignGui { +namespace PartDesignGui +{ - -class TaskMultiTransformParameters : public TaskTransformedParameters +class TaskMultiTransformParameters: public TaskTransformedParameters { Q_OBJECT public: - explicit TaskMultiTransformParameters(ViewProviderTransformed *TransformedView,QWidget *parent = nullptr); + explicit TaskMultiTransformParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); ~TaskMultiTransformParameters() override; /// Return the currently active subFeature - PartDesign::Transformed* getSubFeature() { + PartDesign::Transformed* getSubFeature() + { return subFeature; } @@ -86,7 +91,7 @@ private: void updateUI(); void closeSubTask(); void moveTransformFeature(const int increment); - void finishAdd(std::string &newFeatName); + void finishAdd(std::string& newFeatName); private: std::unique_ptr ui; @@ -98,17 +103,17 @@ private: /// simulation dialog for the TaskView -class TaskDlgMultiTransformParameters : public TaskDlgTransformedParameters +class TaskDlgMultiTransformParameters: public TaskDlgTransformedParameters { Q_OBJECT public: - explicit TaskDlgMultiTransformParameters(ViewProviderMultiTransform *MultiTransformView); + explicit TaskDlgMultiTransformParameters(ViewProviderMultiTransform* MultiTransformView); /// is called by the framework if the dialog is rejected (Cancel) // virtual bool reject(); }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index db282a28f4..0afe933dd9 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -24,8 +24,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include -# include +#include +#include #endif #include @@ -59,20 +59,23 @@ using namespace Gui; /* TRANSLATOR PartDesignGui::TaskPolarPatternParameters */ -TaskPolarPatternParameters::TaskPolarPatternParameters(ViewProviderTransformed *TransformedView,QWidget *parent) +TaskPolarPatternParameters::TaskPolarPatternParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskPolarPatternParameters) { setupUI(); } -TaskPolarPatternParameters::TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) - : TaskTransformedParameters(parentTask), ui(new Ui_TaskPolarPatternParameters) +TaskPolarPatternParameters::TaskPolarPatternParameters(TaskMultiTransformParameters* parentTask, + QWidget* parameterWidget) + : TaskTransformedParameters(parentTask) + , ui(new Ui_TaskPolarPatternParameters) { setupParameterUI(parameterWidget); } -void TaskPolarPatternParameters::setupParameterUI(QWidget *widget) +void TaskPolarPatternParameters::setupParameterUI(QWidget* widget) { ui->setupUi(widget); QMetaObject::connectSlotsByName(this); @@ -102,17 +105,19 @@ void TaskPolarPatternParameters::setupParameterUI(QWidget *widget) this->fillAxisCombo(axesLinks, nullptr); } - //show the parts coordinate system axis for selection - PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() ); + // show the parts coordinate system axis for selection + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); - if(body) { + if (body) { try { - App::Origin *origin = body->getOrigin(); + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(true, false); - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -122,20 +127,34 @@ void TaskPolarPatternParameters::setupParameterUI(QWidget *widget) updateViewTimer = new QTimer(this); updateViewTimer->setSingleShot(true); updateViewTimer->setInterval(getUpdateViewTimeout()); - connect(updateViewTimer, &QTimer::timeout, - this, &TaskPolarPatternParameters::onUpdateViewTimer); - connect(ui->comboAxis, qOverload(&QComboBox::activated), - this, &TaskPolarPatternParameters::onAxisChanged); - connect(ui->comboMode, qOverload(&QComboBox::activated), - this, &TaskPolarPatternParameters::onModeChanged); - connect(ui->checkReverse, &QCheckBox::toggled, - this, &TaskPolarPatternParameters::onCheckReverse); - connect(ui->polarAngle, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskPolarPatternParameters::onAngle); - connect(ui->angleOffset, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskPolarPatternParameters::onOffset); - connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, - this, &TaskPolarPatternParameters::onOccurrences); + connect(updateViewTimer, + &QTimer::timeout, + this, + &TaskPolarPatternParameters::onUpdateViewTimer); + connect(ui->comboAxis, + qOverload(&QComboBox::activated), + this, + &TaskPolarPatternParameters::onAxisChanged); + connect(ui->comboMode, + qOverload(&QComboBox::activated), + this, + &TaskPolarPatternParameters::onModeChanged); + connect(ui->checkReverse, + &QCheckBox::toggled, + this, + &TaskPolarPatternParameters::onCheckReverse); + connect(ui->polarAngle, + qOverload(&Gui::QuantitySpinBox::valueChanged), + this, + &TaskPolarPatternParameters::onAngle); + connect(ui->angleOffset, + qOverload(&Gui::QuantitySpinBox::valueChanged), + this, + &TaskPolarPatternParameters::onOffset); + connect(ui->spinOccurrences, + &Gui::UIntSpinBox::unsignedChanged, + this, + &TaskPolarPatternParameters::onOccurrences); } void TaskPolarPatternParameters::retranslateParameterUI(QWidget* widget) @@ -145,21 +164,25 @@ void TaskPolarPatternParameters::retranslateParameterUI(QWidget* widget) void TaskPolarPatternParameters::updateUI() { - if (blockUpdate) + if (blockUpdate) { return; + } blockUpdate = true; PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); - PartDesign::PolarPatternMode mode = static_cast(pcPolarPattern->Mode.getValue()); + PartDesign::PolarPatternMode mode = + static_cast(pcPolarPattern->Mode.getValue()); bool reverse = pcPolarPattern->Reversed.getValue(); double angle = pcPolarPattern->Angle.getValue(); double offset = pcPolarPattern->Offset.getValue(); unsigned occurrences = pcPolarPattern->Occurrences.getValue(); if (axesLinks.setCurrentLink(pcPolarPattern->Axis) == -1) { - //failed to set current, because the link isn't in the list yet - axesLinks.addLink(pcPolarPattern->Axis, getRefStr(pcPolarPattern->Axis.getValue(),pcPolarPattern->Axis.getSubValues())); + // failed to set current, because the link isn't in the list yet + axesLinks.addLink( + pcPolarPattern->Axis, + getRefStr(pcPolarPattern->Axis.getValue(), pcPolarPattern->Axis.getSubValues())); axesLinks.setCurrentLink(pcPolarPattern->Axis); } @@ -204,12 +227,15 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& else { std::vector axes; App::DocumentObject* selObj; - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + PartDesign::PolarPattern* pcPolarPattern = + static_cast(getObject()); getReferencedSelection(pcPolarPattern, msg, selObj, axes); - if(!selObj) - return; + if (!selObj) { + return; + } - if (selectionMode == SelectionMode::Reference || selObj->isDerivedFrom ( App::Line::getClassTypeId () ) ) { + if (selectionMode == SelectionMode::Reference + || selObj->isDerivedFrom(App::Line::getClassTypeId())) { setupTransaction(); pcPolarPattern->Axis.setValue(selObj, axes); recomputeFeature(); @@ -220,9 +246,11 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& } } -void TaskPolarPatternParameters::onCheckReverse(const bool on) { - if (blockUpdate) +void TaskPolarPatternParameters::onCheckReverse(const bool on) +{ + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); pcPolarPattern->Reversed.setValue(on); @@ -230,9 +258,11 @@ void TaskPolarPatternParameters::onCheckReverse(const bool on) { kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onModeChanged(const int mode) { - if (blockUpdate) +void TaskPolarPatternParameters::onModeChanged(const int mode) +{ + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); pcPolarPattern->Mode.setValue(mode); @@ -242,9 +272,11 @@ void TaskPolarPatternParameters::onModeChanged(const int mode) { kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onAngle(const double a) { - if (blockUpdate) +void TaskPolarPatternParameters::onAngle(const double a) +{ + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); pcPolarPattern->Angle.setValue(a); @@ -252,9 +284,11 @@ void TaskPolarPatternParameters::onAngle(const double a) { kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onOffset(const double a) { - if (blockUpdate) +void TaskPolarPatternParameters::onOffset(const double a) +{ + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); pcPolarPattern->Offset.setValue(a); @@ -262,9 +296,11 @@ void TaskPolarPatternParameters::onOffset(const double a) { kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onOccurrences(const uint n) { - if (blockUpdate) +void TaskPolarPatternParameters::onOccurrences(const uint n) +{ + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); pcPolarPattern->Occurrences.setValue(n); @@ -274,11 +310,12 @@ void TaskPolarPatternParameters::onOccurrences(const uint n) { void TaskPolarPatternParameters::onAxisChanged(int /*num*/) { - if (blockUpdate) + if (blockUpdate) { return; + } PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); - try{ + try { if (!axesLinks.getCurrentLink().getValue()) { // enter reference selection mode hideObject(); @@ -286,12 +323,14 @@ void TaskPolarPatternParameters::onAxisChanged(int /*num*/) selectionMode = SelectionMode::Reference; Gui::Selection().clearSelection(); addReferenceSelectionGate(AllowSelection::EDGE | AllowSelection::CIRCLE); - } else { + } + else { exitSelectionMode(); pcPolarPattern->Axis.Paste(axesLinks.getCurrentLink()); } - } catch (Base::Exception &e) { - QMessageBox::warning(nullptr,tr("Error"),QApplication::translate("Exception", e.what())); + } + catch (Base::Exception& e) { + QMessageBox::warning(nullptr, tr("Error"), QApplication::translate("Exception", e.what())); } kickUpdateViewTimer(); @@ -302,13 +341,14 @@ void TaskPolarPatternParameters::onUpdateView(bool on) blockUpdate = !on; if (on) { // Do the same like in TaskDlgPolarPatternParameters::accept() but without doCommand - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + PartDesign::PolarPattern* pcPolarPattern = + static_cast(getObject()); std::vector axes; App::DocumentObject* obj; setupTransaction(); getAxis(obj, axes); - pcPolarPattern->Axis.setValue(obj,axes); + pcPolarPattern->Axis.setValue(obj, axes); pcPolarPattern->Reversed.setValue(getReverse()); pcPolarPattern->Angle.setValue(getAngle()); pcPolarPattern->Occurrences.setValue(getOccurrences()); @@ -317,9 +357,10 @@ void TaskPolarPatternParameters::onUpdateView(bool on) } } -void TaskPolarPatternParameters::getAxis(App::DocumentObject*& obj, std::vector& sub) const +void TaskPolarPatternParameters::getAxis(App::DocumentObject*& obj, + std::vector& sub) const { - const App::PropertyLinkSub &lnk = axesLinks.getCurrentLink(); + const App::PropertyLinkSub& lnk = axesLinks.getCurrentLink(); obj = lnk.getValue(); sub = lnk.getSubValues(); } @@ -347,17 +388,19 @@ unsigned TaskPolarPatternParameters::getOccurrences() const TaskPolarPatternParameters::~TaskPolarPatternParameters() { - //hide the parts coordinate system axis for selection + // hide the parts coordinate system axis for selection try { - PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() ); - if ( body ) { - App::Origin *origin = body->getOrigin(); + PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); + if (body) { + App::Origin* origin = body->getOrigin(); ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast(Gui::Application::Instance->getViewProvider(origin)); - vpOrigin->resetTemporaryVisibility (); + vpOrigin = static_cast( + Gui::Application::Instance->getViewProvider(origin)); + vpOrigin->resetTemporaryVisibility(); } - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what () ); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } @@ -369,9 +412,9 @@ void TaskPolarPatternParameters::doApply() std::string axis = buildLinkSingleSubPythonStr(obj, axes); auto tobj = getObject(); - FCMD_OBJ_CMD(tobj,"Axis = " << axis.c_str()); - FCMD_OBJ_CMD(tobj,"Reversed = " << getReverse()); - FCMD_OBJ_CMD(tobj,"Mode = " << getMode()); + FCMD_OBJ_CMD(tobj, "Axis = " << axis.c_str()); + FCMD_OBJ_CMD(tobj, "Reversed = " << getReverse()); + FCMD_OBJ_CMD(tobj, "Mode = " << getMode()); ui->polarAngle->apply(); ui->angleOffset->apply(); ui->spinOccurrences->apply(); @@ -382,7 +425,8 @@ void TaskPolarPatternParameters::doApply() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgPolarPatternParameters::TaskDlgPolarPatternParameters(ViewProviderPolarPattern *PolarPatternView) +TaskDlgPolarPatternParameters::TaskDlgPolarPatternParameters( + ViewProviderPolarPattern* PolarPatternView) : TaskDlgTransformedParameters(PolarPatternView) { parameter = new TaskPolarPatternParameters(PolarPatternView); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index f0fcfc8f53..c33cc7b0fc 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -30,27 +30,31 @@ class QTimer; class Ui_TaskPolarPatternParameters; -namespace App { +namespace App +{ class Property; } -namespace Gui { +namespace Gui +{ class ViewProvider; } -namespace PartDesignGui { +namespace PartDesignGui +{ class TaskMultiTransformParameters; -class TaskPolarPatternParameters : public TaskTransformedParameters +class TaskPolarPatternParameters: public TaskTransformedParameters { Q_OBJECT public: /// Constructor for task with ViewProvider - explicit TaskPolarPatternParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); + explicit TaskPolarPatternParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskPolarPatternParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); + TaskPolarPatternParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); ~TaskPolarPatternParameters() override; protected: @@ -93,14 +97,14 @@ private: /// simulation dialog for the TaskView -class TaskDlgPolarPatternParameters : public TaskDlgTransformedParameters +class TaskDlgPolarPatternParameters: public TaskDlgTransformedParameters { Q_OBJECT public: - explicit TaskDlgPolarPatternParameters(ViewProviderPolarPattern *PolarPatternView); + explicit TaskDlgPolarPatternParameters(ViewProviderPolarPattern* PolarPatternView); }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index 76fd21239e..54873b3e4d 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -44,28 +44,35 @@ using namespace Gui; /* TRANSLATOR PartDesignGui::TaskScaledParameters */ -TaskScaledParameters::TaskScaledParameters(ViewProviderTransformed *TransformedView,QWidget *parent) +TaskScaledParameters::TaskScaledParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskTransformedParameters(TransformedView, parent) , ui(new Ui_TaskScaledParameters) { setupUI(); } -TaskScaledParameters::TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget) - : TaskTransformedParameters(parentTask), ui(new Ui_TaskScaledParameters) +TaskScaledParameters::TaskScaledParameters(TaskMultiTransformParameters* parentTask, + QWidget* parameterWidget) + : TaskTransformedParameters(parentTask) + , ui(new Ui_TaskScaledParameters) { setupParameterUI(parameterWidget); } -void TaskScaledParameters::setupParameterUI(QWidget *widget) +void TaskScaledParameters::setupParameterUI(QWidget* widget) { ui->setupUi(widget); QMetaObject::connectSlotsByName(this); - connect(ui->spinFactor, qOverload(&Gui::QuantitySpinBox::valueChanged), - this, &TaskScaledParameters::onFactor); - connect(ui->spinOccurrences, &Gui::UIntSpinBox::unsignedChanged, - this, &TaskScaledParameters::onOccurrences); + connect(ui->spinFactor, + qOverload(&Gui::QuantitySpinBox::valueChanged), + this, + &TaskScaledParameters::onFactor); + connect(ui->spinOccurrences, + &Gui::UIntSpinBox::unsignedChanged, + this, + &TaskScaledParameters::onOccurrences); // Get the feature data PartDesign::Scaled* pcScaled = static_cast(getObject()); @@ -75,7 +82,7 @@ void TaskScaledParameters::setupParameterUI(QWidget *widget) ui->spinOccurrences->bind(pcScaled->Occurrences); ui->spinFactor->setEnabled(true); ui->spinOccurrences->setEnabled(true); - //ui->spinFactor->setDecimals(Base::UnitsApi::getDecimals()); + // ui->spinFactor->setDecimals(Base::UnitsApi::getDecimals()); updateUI(); } @@ -87,8 +94,9 @@ void TaskScaledParameters::retranslateParameterUI(QWidget* widget) void TaskScaledParameters::updateUI() { - if (blockUpdate) + if (blockUpdate) { return; + } blockUpdate = true; PartDesign::Scaled* pcScaled = static_cast(getObject()); @@ -104,8 +112,9 @@ void TaskScaledParameters::updateUI() void TaskScaledParameters::onFactor(const double f) { - if (blockUpdate) + if (blockUpdate) { return; + } PartDesign::Scaled* pcScaled = static_cast(getObject()); pcScaled->Factor.setValue(f); recomputeFeature(); @@ -113,8 +122,9 @@ void TaskScaledParameters::onFactor(const double f) void TaskScaledParameters::onOccurrences(const uint n) { - if (blockUpdate) + if (blockUpdate) { return; + } PartDesign::Scaled* pcScaled = static_cast(getObject()); pcScaled->Occurrences.setValue(n); recomputeFeature(); @@ -144,7 +154,7 @@ unsigned TaskScaledParameters::getOccurrences() const void TaskScaledParameters::doApply() { - FCMD_OBJ_CMD(getObject(),"Factor = " << getFactor()); + FCMD_OBJ_CMD(getObject(), "Factor = " << getFactor()); ui->spinOccurrences->apply(); } @@ -153,7 +163,7 @@ void TaskScaledParameters::doApply() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgScaledParameters::TaskDlgScaledParameters(ViewProviderScaled *ScaledView) +TaskDlgScaledParameters::TaskDlgScaledParameters(ViewProviderScaled* ScaledView) : TaskDlgTransformedParameters(ScaledView) { parameter = new TaskScaledParameters(ScaledView); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index 1ab7c6ff6f..60a1a6d829 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -29,27 +29,31 @@ class Ui_TaskScaledParameters; -namespace App { +namespace App +{ class Property; } -namespace Gui { +namespace Gui +{ class ViewProvider; } -namespace PartDesignGui { +namespace PartDesignGui +{ class TaskMultiTransformParameters; -class TaskScaledParameters : public TaskTransformedParameters +class TaskScaledParameters: public TaskTransformedParameters { Q_OBJECT public: /// Constructor for task with ViewProvider - explicit TaskScaledParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); + explicit TaskScaledParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - TaskScaledParameters(TaskMultiTransformParameters *parentTask, QWidget* parameterWidget); + TaskScaledParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); private Q_SLOTS: void onFactor(const double f); @@ -71,14 +75,14 @@ private: /// simulation dialog for the TaskView -class TaskDlgScaledParameters : public TaskDlgTransformedParameters +class TaskDlgScaledParameters: public TaskDlgTransformedParameters { Q_OBJECT public: - explicit TaskDlgScaledParameters(ViewProviderScaled *ScaledView); + explicit TaskDlgScaledParameters(ViewProviderScaled* ScaledView); }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index c296a1d4a2..25fd674181 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -23,8 +23,8 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include -# include +#include +#include #endif #include @@ -47,16 +47,19 @@ #include "ReferenceSelection.h" -FC_LOG_LEVEL_INIT("PartDesign",true,true) +FC_LOG_LEVEL_INIT("PartDesign", true, true) using namespace PartDesignGui; using namespace Gui; /* TRANSLATOR PartDesignGui::TaskTransformedParameters */ -TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *TransformedView, QWidget *parent) +TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed* TransformedView, + QWidget* parent) : TaskBox(Gui::BitmapFactory().pixmap(TransformedView->featureIcon().c_str()), - TransformedView->menuName, true, parent) + TransformedView->menuName, + true, + parent) , TransformedView(TransformedView) , ui(new Ui_TaskTransformedParameters) { @@ -67,20 +70,20 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr App::GetApplication().getActiveTransaction(&transactionID); } -TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask) - : TaskBox(QPixmap(), tr(""), true, parentTask), - parentTask(parentTask), - insideMultiTransform(true) -{ -} +TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters* parentTask) + : TaskBox(QPixmap(), tr(""), true, parentTask) + , parentTask(parentTask) + , insideMultiTransform(true) +{} TaskTransformedParameters::~TaskTransformedParameters() { // make sure to remove selection gate in all cases Gui::Selection().rmvSelectionGate(); - if (proxy) + if (proxy) { delete proxy; + } } void TaskTransformedParameters::setupUI() @@ -90,8 +93,14 @@ void TaskTransformedParameters::setupUI() ui->setupUi(proxy); QMetaObject::connectSlotsByName(this); - connect(ui->buttonAddFeature, &QToolButton::toggled, this, &TaskTransformedParameters::onButtonAddFeature); - connect(ui->buttonRemoveFeature, &QToolButton::toggled, this, &TaskTransformedParameters::onButtonRemoveFeature); + connect(ui->buttonAddFeature, + &QToolButton::toggled, + this, + &TaskTransformedParameters::onButtonAddFeature); + connect(ui->buttonRemoveFeature, + &QToolButton::toggled, + this, + &TaskTransformedParameters::onButtonRemoveFeature); // Create context menu QAction* action = new QAction(tr("Remove"), this); @@ -103,11 +112,15 @@ void TaskTransformedParameters::setupUI() ui->listWidgetFeatures->addAction(action); connect(action, &QAction::triggered, this, &TaskTransformedParameters::onFeatureDeleted); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); - connect(ui->listWidgetFeatures->model(), &QAbstractListModel::rowsMoved, - this, &TaskTransformedParameters::indexesMoved); + connect(ui->listWidgetFeatures->model(), + &QAbstractListModel::rowsMoved, + this, + &TaskTransformedParameters::indexesMoved); - connect(ui->checkBoxUpdateView, &QCheckBox::toggled, - this, &TaskTransformedParameters::onUpdateView); + connect(ui->checkBoxUpdateView, + &QCheckBox::toggled, + this, + &TaskTransformedParameters::onUpdateView); // Get the feature data PartDesign::Transformed* pcTransformed = static_cast(getObject()); @@ -123,17 +136,18 @@ void TaskTransformedParameters::setupUI() } } - setupParameterUI(ui->featureUI); // create parameter UI widgets + setupParameterUI(ui->featureUI); // create parameter UI widgets this->groupLayout()->addWidget(proxy); } void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) { - if (TransformedView == &Obj) + if (TransformedView == &Obj) { TransformedView = nullptr; + } } -void TaskTransformedParameters::changeEvent(QEvent *e) +void TaskTransformedParameters::changeEvent(QEvent* e) { TaskBox::changeEvent(e); if (e->type() == QEvent::LanguageChange && proxy) { @@ -153,7 +167,8 @@ void TaskTransformedParameters::clearButtons() { if (insideMultiTransform) { parentTask->clearButtons(); - } else { + } + else { ui->buttonAddFeature->setChecked(false); ui->buttonRemoveFeature->setChecked(false); } @@ -183,28 +198,33 @@ void TaskTransformedParameters::removeObject(App::DocumentObject* obj) bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& msg) { - if (msg.Type == Gui::SelectionChanges::AddSelection && ( - (selectionMode == SelectionMode::AddFeature) || (selectionMode == SelectionMode::RemoveFeature))) { + if (msg.Type == Gui::SelectionChanges::AddSelection + && ((selectionMode == SelectionMode::AddFeature) + || (selectionMode == SelectionMode::RemoveFeature))) { - if (strcmp(msg.pDocName, getObject()->getDocument()->getName()) != 0) + if (strcmp(msg.pDocName, getObject()->getDocument()->getName()) != 0) { return false; + } PartDesign::Transformed* pcTransformed = getObject(); - App::DocumentObject* selectedObject = pcTransformed->getDocument()->getObject(msg.pObjectName); + App::DocumentObject* selectedObject = + pcTransformed->getDocument()->getObject(msg.pObjectName); if (selectedObject->isDerivedFrom(PartDesign::FeatureAddSub::getClassTypeId())) { // Do the same like in TaskDlgTransformedParameters::accept() but without doCommand std::vector originals = pcTransformed->Originals.getValues(); - std::vector::iterator o = std::find(originals.begin(), originals.end(), selectedObject); + std::vector::iterator o = + std::find(originals.begin(), originals.end(), selectedObject); if (selectionMode == SelectionMode::AddFeature) { if (o == originals.end()) { originals.push_back(selectedObject); addObject(selectedObject); } else { - return false; // duplicate selection + return false; // duplicate selection } - } else { + } + else { if (o != originals.end()) { originals.erase(o); removeObject(selectedObject); @@ -226,17 +246,20 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms void TaskTransformedParameters::setupTransaction() { - if (!isEnabledTransaction()) + if (!isEnabledTransaction()) { return; + } auto obj = getObject(); - if (!obj) + if (!obj) { return; + } int tid = 0; App::GetApplication().getActiveTransaction(&tid); - if (tid && tid == transactionID) + if (tid && tid == transactionID) { return; + } // open a transaction if none is active std::string n("Edit "); @@ -261,7 +284,8 @@ void TaskTransformedParameters::onButtonAddFeature(bool checked) showBase(); selectionMode = SelectionMode::AddFeature; Gui::Selection().clearSelection(); - } else { + } + else { exitSelectionMode(); } @@ -269,19 +293,22 @@ void TaskTransformedParameters::onButtonAddFeature(bool checked) } // Make sure only some feature before the given one is visible -void TaskTransformedParameters::checkVisibility() { +void TaskTransformedParameters::checkVisibility() +{ auto feat = getObject(); auto body = feat->getFeatureBody(); - if(!body) + if (!body) { return; + } auto inset = feat->getInListEx(true); inset.emplace(feat); - for(auto o : body->Group.getValues()) { - if(!o->Visibility.getValue() - || !o->isDerivedFrom(PartDesign::Feature::getClassTypeId())) + for (auto o : body->Group.getValues()) { + if (!o->Visibility.getValue() || !o->isDerivedFrom(PartDesign::Feature::getClassTypeId())) { continue; - if(inset.count(o)) + } + if (inset.count(o)) { break; + } return; } FCMD_OBJ_SHOW(getBaseObject()); @@ -293,7 +320,8 @@ void TaskTransformedParameters::onButtonRemoveFeature(bool checked) checkVisibility(); selectionMode = SelectionMode::RemoveFeature; Gui::Selection().clearSelection(); - } else { + } + else { exitSelectionMode(); } @@ -307,7 +335,7 @@ void TaskTransformedParameters::onFeatureDeleted() int currentRow = ui->listWidgetFeatures->currentRow(); if (currentRow < 0) { Base::Console().Error("PartDesign Pattern: No feature selected for removing.\n"); - return; //no current row selected + return; // no current row selected } originals.erase(originals.begin() + currentRow); setupTransaction(); @@ -316,7 +344,8 @@ void TaskTransformedParameters::onFeatureDeleted() recomputeFeature(); } -void TaskTransformedParameters::removeItemFromListWidget(QListWidget* widget, const QString& itemstr) +void TaskTransformedParameters::removeItemFromListWidget(QListWidget* widget, + const QString& itemstr) { QList items = widget->findItems(itemstr, Qt::MatchExactly); if (!items.empty()) { @@ -327,129 +356,142 @@ void TaskTransformedParameters::removeItemFromListWidget(QListWidget* widget, co } } -void TaskTransformedParameters::fillAxisCombo(ComboLinks &combolinks, - Part::Part2DObject* sketch) +void TaskTransformedParameters::fillAxisCombo(ComboLinks& combolinks, Part::Part2DObject* sketch) { combolinks.clear(); - //add sketch axes - if (sketch){ - combolinks.addLink(sketch, "N_Axis",tr("Normal sketch axis")); - combolinks.addLink(sketch,"V_Axis",tr("Vertical sketch axis")); - combolinks.addLink(sketch,"H_Axis",tr("Horizontal sketch axis")); - for (int i=0; i < sketch->getAxisCount(); i++) { - QString itemText = tr("Construction line %1").arg(i+1); + // add sketch axes + if (sketch) { + combolinks.addLink(sketch, "N_Axis", tr("Normal sketch axis")); + combolinks.addLink(sketch, "V_Axis", tr("Vertical sketch axis")); + combolinks.addLink(sketch, "H_Axis", tr("Horizontal sketch axis")); + for (int i = 0; i < sketch->getAxisCount(); i++) { + QString itemText = tr("Construction line %1").arg(i + 1); std::stringstream sub; sub << "Axis" << i; - combolinks.addLink(sketch,sub.str(),itemText); + combolinks.addLink(sketch, sub.str(), itemText); } } - //add part axes + // add part axes App::DocumentObject* obj = getObject(); - PartDesign::Body * body = PartDesign::Body::findBodyOf ( obj ); + PartDesign::Body* body = PartDesign::Body::findBodyOf(obj); if (body) { try { App::Origin* orig = body->getOrigin(); - combolinks.addLink(orig->getX(),"",tr("Base X axis")); - combolinks.addLink(orig->getY(),"",tr("Base Y axis")); - combolinks.addLink(orig->getZ(),"",tr("Base Z axis")); - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what() ); + combolinks.addLink(orig->getX(), "", tr("Base X axis")); + combolinks.addLink(orig->getY(), "", tr("Base Y axis")); + combolinks.addLink(orig->getZ(), "", tr("Base Z axis")); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } - //add "Select reference" - combolinks.addLink(nullptr,std::string(),tr("Select reference...")); + // add "Select reference" + combolinks.addLink(nullptr, std::string(), tr("Select reference...")); } -void TaskTransformedParameters::fillPlanesCombo(ComboLinks &combolinks, - Part::Part2DObject* sketch) +void TaskTransformedParameters::fillPlanesCombo(ComboLinks& combolinks, Part::Part2DObject* sketch) { combolinks.clear(); - //add sketch axes - if (sketch){ - combolinks.addLink(sketch,"V_Axis",QObject::tr("Vertical sketch axis")); - combolinks.addLink(sketch,"H_Axis",QObject::tr("Horizontal sketch axis")); - for (int i=0; i < sketch->getAxisCount(); i++) { - QString itemText = tr("Construction line %1").arg(i+1); + // add sketch axes + if (sketch) { + combolinks.addLink(sketch, "V_Axis", QObject::tr("Vertical sketch axis")); + combolinks.addLink(sketch, "H_Axis", QObject::tr("Horizontal sketch axis")); + for (int i = 0; i < sketch->getAxisCount(); i++) { + QString itemText = tr("Construction line %1").arg(i + 1); std::stringstream sub; sub << "Axis" << i; - combolinks.addLink(sketch,sub.str(),itemText); + combolinks.addLink(sketch, sub.str(), itemText); } } - //add part baseplanes + // add part baseplanes App::DocumentObject* obj = getObject(); - PartDesign::Body * body = PartDesign::Body::findBodyOf ( obj ); + PartDesign::Body* body = PartDesign::Body::findBodyOf(obj); if (body) { try { App::Origin* orig = body->getOrigin(); - combolinks.addLink(orig->getXY(),"",tr("Base XY plane")); - combolinks.addLink(orig->getYZ(),"",tr("Base YZ plane")); - combolinks.addLink(orig->getXZ(),"",tr("Base XZ plane")); - } catch (const Base::Exception &ex) { - Base::Console().Error ("%s\n", ex.what() ); + combolinks.addLink(orig->getXY(), "", tr("Base XY plane")); + combolinks.addLink(orig->getYZ(), "", tr("Base YZ plane")); + combolinks.addLink(orig->getXZ(), "", tr("Base XZ plane")); + } + catch (const Base::Exception& ex) { + Base::Console().Error("%s\n", ex.what()); } } - //add "Select reference" - combolinks.addLink(nullptr,std::string(),tr("Select reference...")); + // add "Select reference" + combolinks.addLink(nullptr, std::string(), tr("Select reference...")); } -void TaskTransformedParameters::recomputeFeature() { +void TaskTransformedParameters::recomputeFeature() +{ getTopTransformedView()->recomputeFeature(); } -PartDesignGui::ViewProviderTransformed *TaskTransformedParameters::getTopTransformedView() const { - PartDesignGui::ViewProviderTransformed *rv; +PartDesignGui::ViewProviderTransformed* TaskTransformedParameters::getTopTransformedView() const +{ + PartDesignGui::ViewProviderTransformed* rv; if (insideMultiTransform) { rv = parentTask->TransformedView; - } else { + } + else { rv = TransformedView; } return rv; } -PartDesign::Transformed *TaskTransformedParameters::getTopTransformedObject() const { +PartDesign::Transformed* TaskTransformedParameters::getTopTransformedObject() const +{ ViewProviderTransformed* vp = getTopTransformedView(); - if (!vp) + if (!vp) { return nullptr; + } - App::DocumentObject *transform = vp->getObject(); - assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId())); + App::DocumentObject* transform = vp->getObject(); + assert(transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId())); return static_cast(transform); } -PartDesign::Transformed *TaskTransformedParameters::getObject() const { - if (insideMultiTransform) +PartDesign::Transformed* TaskTransformedParameters::getObject() const +{ + if (insideMultiTransform) { return parentTask->getSubFeature(); - else if (TransformedView) + } + else if (TransformedView) { return static_cast(TransformedView->getObject()); - else + } + else { return nullptr; + } } -App::DocumentObject *TaskTransformedParameters::getBaseObject() const { - PartDesign::Feature* feature = getTopTransformedObject (); - if (!feature) +App::DocumentObject* TaskTransformedParameters::getBaseObject() const +{ + PartDesign::Feature* feature = getTopTransformedObject(); + if (!feature) { return nullptr; + } // NOTE: getBaseObject() throws if there is no base; shouldn't happen here. - App::DocumentObject *base = feature->getBaseObject(true); - if(!base) { + App::DocumentObject* base = feature->getBaseObject(true); + if (!base) { auto body = feature->getFeatureBody(); - if(body) + if (body) { base = body->getPrevSolidFeature(feature); + } } return base; } -App::DocumentObject* TaskTransformedParameters::getSketchObject() const { +App::DocumentObject* TaskTransformedParameters::getSketchObject() const +{ PartDesign::Transformed* feature = getTopTransformedObject(); return feature ? feature->getSketchObject() : nullptr; } @@ -501,23 +543,27 @@ void TaskTransformedParameters::exitSelectionMode() selectionMode = SelectionMode::None; Gui::Selection().rmvSelectionGate(); showObject(); - } catch(Base::Exception &e) { + } + catch (Base::Exception& e) { e.ReportException(); } } void TaskTransformedParameters::addReferenceSelectionGate(AllowSelectionFlags allow) { - std::unique_ptr gateRefPtr(new ReferenceSelection(getBaseObject(), allow)); - std::unique_ptr gateDepPtr(new NoDependentsSelection(getTopTransformedObject())); + std::unique_ptr gateRefPtr( + new ReferenceSelection(getBaseObject(), allow)); + std::unique_ptr gateDepPtr( + new NoDependentsSelection(getTopTransformedObject())); Gui::Selection().addSelectionGate(new CombineSelectionFilterGates(gateRefPtr, gateDepPtr)); } void TaskTransformedParameters::indexesMoved() { QAbstractItemModel* model = qobject_cast(sender()); - if (!model) + if (!model) { return; + } PartDesign::Transformed* pcTransformed = getObject(); std::vector originals = pcTransformed->Originals.getValues(); @@ -540,7 +586,8 @@ void TaskTransformedParameters::indexesMoved() // TaskDialog //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -TaskDlgTransformedParameters::TaskDlgTransformedParameters(ViewProviderTransformed *TransformedView_) +TaskDlgTransformedParameters::TaskDlgTransformedParameters( + ViewProviderTransformed* TransformedView_) : TaskDlgFeatureParameters(TransformedView_) { assert(vp); @@ -556,7 +603,7 @@ bool TaskDlgTransformedParameters::accept() parameter->exitSelectionMode(); parameter->apply(); - return TaskDlgFeatureParameters::accept (); + return TaskDlgFeatureParameters::accept(); } bool TaskDlgTransformedParameters::reject() @@ -564,74 +611,81 @@ bool TaskDlgTransformedParameters::reject() // ensure that we are not in selection mode parameter->exitSelectionMode(); - return TaskDlgFeatureParameters::reject (); + return TaskDlgFeatureParameters::reject(); } #include "moc_TaskTransformedParameters.cpp" -ComboLinks::ComboLinks(QComboBox &combo) +ComboLinks::ComboLinks(QComboBox& combo) : _combo(&combo) { _combo->clear(); } -int ComboLinks::addLink(const App::PropertyLinkSub &lnk, QString itemText) +int ComboLinks::addLink(const App::PropertyLinkSub& lnk, QString itemText) { - if(!_combo) + if (!_combo) { return 0; + } _combo->addItem(itemText); this->linksInList.push_back(new App::PropertyLinkSub()); - App::PropertyLinkSub &newitem = *(linksInList[linksInList.size()-1]); + App::PropertyLinkSub& newitem = *(linksInList[linksInList.size() - 1]); newitem.Paste(lnk); - if (newitem.getValue() && !this->doc) + if (newitem.getValue() && !this->doc) { this->doc = newitem.getValue()->getDocument(); - return linksInList.size()-1; + } + return linksInList.size() - 1; } -int ComboLinks::addLink(App::DocumentObject *linkObj, std::string linkSubname, QString itemText) +int ComboLinks::addLink(App::DocumentObject* linkObj, std::string linkSubname, QString itemText) { - if(!_combo) + if (!_combo) { return 0; + } _combo->addItem(itemText); this->linksInList.push_back(new App::PropertyLinkSub()); - App::PropertyLinkSub &newitem = *(linksInList[linksInList.size()-1]); - newitem.setValue(linkObj,std::vector(1,linkSubname)); - if (newitem.getValue() && !this->doc) + App::PropertyLinkSub& newitem = *(linksInList[linksInList.size() - 1]); + newitem.setValue(linkObj, std::vector(1, linkSubname)); + if (newitem.getValue() && !this->doc) { this->doc = newitem.getValue()->getDocument(); - return linksInList.size()-1; + } + return linksInList.size() - 1; } void ComboLinks::clear() { - for(size_t i = 0 ; i < this->linksInList.size() ; i++){ + for (size_t i = 0; i < this->linksInList.size(); i++) { delete linksInList[i]; } - if(this->_combo) + if (this->_combo) { _combo->clear(); + } } -App::PropertyLinkSub &ComboLinks::getLink(int index) const +App::PropertyLinkSub& ComboLinks::getLink(int index) const { - if (index < 0 || index > static_cast(linksInList.size())-1) + if (index < 0 || index > static_cast(linksInList.size()) - 1) { throw Base::IndexError("ComboLinks::getLink:Index out of range"); - if (linksInList[index]->getValue() && doc && !(doc->isIn(linksInList[index]->getValue()))) + } + if (linksInList[index]->getValue() && doc && !(doc->isIn(linksInList[index]->getValue()))) { throw Base::ValueError("Linked object is not in the document; it may have been deleted"); + } return *(linksInList[index]); } -App::PropertyLinkSub &ComboLinks::getCurrentLink() const +App::PropertyLinkSub& ComboLinks::getCurrentLink() const { assert(_combo); return getLink(_combo->currentIndex()); } -int ComboLinks::setCurrentLink(const App::PropertyLinkSub &lnk) +int ComboLinks::setCurrentLink(const App::PropertyLinkSub& lnk) { - for(size_t i = 0 ; i < linksInList.size() ; i++) { - App::PropertyLinkSub &it = *(linksInList[i]); - if(lnk.getValue() == it.getValue() && lnk.getSubValues() == it.getSubValues()){ + for (size_t i = 0; i < linksInList.size(); i++) { + App::PropertyLinkSub& it = *(linksInList[i]); + if (lnk.getValue() == it.getValue() && lnk.getSubValues() == it.getSubValues()) { bool wasBlocked = _combo->signalsBlocked(); _combo->blockSignals(true); _combo->setCurrentIndex(i); diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 4ddc5dd79f..ddb58779f9 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -40,15 +40,18 @@ class QListWidget; class Ui_TaskTransformedParameters; -namespace Part { +namespace Part +{ class Feature; } -namespace PartDesign { +namespace PartDesign +{ class Transformed; } -namespace PartDesignGui { +namespace PartDesignGui +{ class TaskMultiTransformParameters; @@ -66,10 +69,15 @@ public: * remove items from the combo directly, otherwise internal tracking list * will go out of sync, and crashes may result. */ - explicit ComboLinks(QComboBox &combo); + explicit ComboLinks(QComboBox& combo); ComboLinks() = default; - void setCombo(QComboBox &combo) {assert(!_combo); this->_combo = &combo; _combo->clear();} + void setCombo(QComboBox& combo) + { + assert(!_combo); + this->_combo = &combo; + _combo->clear(); + } /** * @brief addLink adds an item to the combo. Doesn't check for duplicates. @@ -77,7 +85,7 @@ public: * @param itemText * @return */ - int addLink(const App::PropertyLinkSub &lnk, QString itemText); + int addLink(const App::PropertyLinkSub& lnk, QString itemText); int addLink(App::DocumentObject* linkObj, std::string linkSubname, QString itemText); void clear(); App::PropertyLinkSub& getLink(int index) const; @@ -99,11 +107,20 @@ public: * @param lnk * @return the index of an item that was selected, -1 if link is not in the list yet. */ - int setCurrentLink(const App::PropertyLinkSub &lnk); + int setCurrentLink(const App::PropertyLinkSub& lnk); - QComboBox& combo() const {assert(_combo); return *_combo;} + QComboBox& combo() const + { + assert(_combo); + return *_combo; + } + + ~ComboLinks() + { + _combo = nullptr; + clear(); + } - ~ComboLinks() {_combo = nullptr; clear();} private: QComboBox* _combo = nullptr; App::Document* doc = nullptr; @@ -118,17 +135,18 @@ private: Because in the second case there is no ViewProvider, some special methods are required to access the underlying FeatureTransformed object in two different ways. **/ -class TaskTransformedParameters : public Gui::TaskView::TaskBox, - public Gui::SelectionObserver, - public Gui::DocumentObserver +class TaskTransformedParameters: public Gui::TaskView::TaskBox, + public Gui::SelectionObserver, + public Gui::DocumentObserver { Q_OBJECT public: /// Constructor for task with ViewProvider - explicit TaskTransformedParameters(ViewProviderTransformed *TransformedView, QWidget *parent = nullptr); + explicit TaskTransformedParameters(ViewProviderTransformed* TransformedView, + QWidget* parent = nullptr); /// Constructor for task with parent task (MultiTransform mode) - explicit TaskTransformedParameters(TaskMultiTransformParameters *parentTask); + explicit TaskTransformedParameters(TaskMultiTransformParameters* parentTask); ~TaskTransformedParameters() override; /// Apply changes for python console @@ -150,8 +168,8 @@ public: protected: /** Setup the standalone UI. - * Call this in the derived destructor with ViewProvider. - */ + * Call this in the derived destructor with ViewProvider. + */ void setupUI(); /** @@ -159,14 +177,15 @@ protected: * For stand alone features it will be object associated with the view provider * For features inside MultiTransform it will be the parent MultiTransform's sub feature object */ - PartDesign::Transformed *getObject() const; + PartDesign::Transformed* getObject() const; - /// Get the sketch object of the first original either of the object associated with this feature or with the parent feature (MultiTransform mode) + /// Get the sketch object of the first original either of the object associated with this + /// feature or with the parent feature (MultiTransform mode) App::DocumentObject* getSketchObject() const; /** Handle adding/removing of selected features - * Returns true if a selected feature was added/removed. - */ + * Returns true if a selected feature was added/removed. + */ bool originalSelected(const Gui::SelectionChanges& msg); /// Recompute either this feature or the parent MultiTransform feature @@ -191,9 +210,9 @@ protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; /// Fill combobox with the axis from the sketch and the own bodys origin axis - void fillAxisCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); + void fillAxisCombo(ComboLinks& combolinks, Part::Part2DObject* sketch); /// Fill combobox with the planes from the sketch and the own bodys origin planes - void fillPlanesCombo(ComboLinks &combolinks, Part::Part2DObject *sketch); + void fillPlanesCombo(ComboLinks& combolinks, Part::Part2DObject* sketch); bool isEnabledTransaction() const; void setupTransaction(); @@ -208,9 +227,9 @@ private Q_SLOTS: private: /** Setup the parameter UI. - * This is called to create the parameter UI in the specified widget. - * Call this in the derived constructor with MultiTransform parent. - */ + * This is called to create the parameter UI in the specified widget. + * Call this in the derived constructor with MultiTransform parent. + */ virtual void setupParameterUI(QWidget* widget) = 0; /// Change translation of the parameter UI @@ -226,35 +245,36 @@ private: /// Return the base object of the base transformed object (see getTopTransformedObject()) // Either through the ViewProvider or the currently active subFeature of the parentTask - App::DocumentObject *getBaseObject() const; + App::DocumentObject* getBaseObject() const; /** * Returns the base transformation view provider * For stand alone features it will be view provider associated with this object * For features inside multitransform it will be the view provider of the multitransform object */ - PartDesignGui::ViewProviderTransformed *getTopTransformedView () const; + PartDesignGui::ViewProviderTransformed* getTopTransformedView() const; /** * Returns the base transformed object * For stand alone features it will be objects associated with this object * For features inside multitransform it will be the base multitransform object */ - PartDesign::Transformed *getTopTransformedObject () const; + PartDesign::Transformed* getTopTransformedObject() const; - void changeEvent(QEvent *e) override; + void changeEvent(QEvent* e) override; static void removeItemFromListWidget(QListWidget* widget, const QString& itemstr); protected: - enum class SelectionMode { + enum class SelectionMode + { None, AddFeature, RemoveFeature, Reference }; - ViewProviderTransformed *TransformedView = nullptr; + ViewProviderTransformed* TransformedView = nullptr; SelectionMode selectionMode = SelectionMode::None; /// Lock updateUI(), applying changes to the underlying feature and calling recomputeFeature() @@ -273,15 +293,17 @@ private: }; /// simulation dialog for the TaskView -class TaskDlgTransformedParameters : public PartDesignGui::TaskDlgFeatureParameters +class TaskDlgTransformedParameters: public PartDesignGui::TaskDlgFeatureParameters { Q_OBJECT public: - explicit TaskDlgTransformedParameters(ViewProviderTransformed *TransformedView); + explicit TaskDlgTransformedParameters(ViewProviderTransformed* TransformedView); ViewProviderTransformed* getTransformedView() const - { return static_cast(vp); } + { + return static_cast(vp); + } /// is called by the framework if the dialog is accepted (Ok) bool accept() override; @@ -289,10 +311,10 @@ public: bool reject() override; protected: - TaskTransformedParameters *parameter = nullptr; - TaskTransformedMessages *message = nullptr; + TaskTransformedParameters* parameter = nullptr; + TaskTransformedMessages* message = nullptr; }; -} //namespace PartDesignGui +} // namespace PartDesignGui -#endif // GUI_TASKVIEW_TASKAPPERANCE_H +#endif // GUI_TASKVIEW_TASKAPPERANCE_H From 7bbca2f00d198d941125b7aa2b597fd597f3ed5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Wed, 21 Feb 2024 14:56:23 +0100 Subject: [PATCH 09/14] Fix crash when canceling the MultiTransform panel while a newly cretated subfeature is edited Before calling the closeSubTask() function from the dialog reject() function, the slotDeletedObject() is called from the transaction being aborted. This causes the subFeature pointer to be nullptr and subsequent apply() functions from the SpinBox widgets to crash. Before calling apply check if the subFeature is still there. --- src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 65fde209b3..1380e498d3 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -165,7 +165,11 @@ void TaskMultiTransformParameters::closeSubTask() if (subTask) { ui->buttonOK->hide(); exitSelectionMode(); - subTask->apply(); + // The subfeature can already be deleted (e.g. cancel) so we have to check before + // calling apply + if (subFeature) { + subTask->apply(); + } // Remove all parameter ui widgets and layout ui->subFeatureWidget->setUpdatesEnabled(false); @@ -177,6 +181,7 @@ void TaskMultiTransformParameters::closeSubTask() delete subTask; subTask = nullptr; + subFeature = nullptr; } } From b3018168896b138c9902a5b760b0690d11bfb4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Wed, 21 Feb 2024 15:04:38 +0100 Subject: [PATCH 10/14] Refactor the apply function to be virtual public --- src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskMirroredParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskScaledParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskTransformedParameters.h | 8 +------- 11 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index a35b5ff75d..44bde1e15c 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -421,7 +421,7 @@ TaskLinearPatternParameters::~TaskLinearPatternParameters() } } -void TaskLinearPatternParameters::doApply() +void TaskLinearPatternParameters::apply() { std::vector directions; App::DocumentObject* obj; diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 3a2645dc13..1d87527f2a 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -57,6 +57,8 @@ public: TaskLinearPatternParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); ~TaskLinearPatternParameters() override; + void apply() override; + protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -73,7 +75,6 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; - void doApply() override; void connectSignals(); void updateUI(); diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 6cbd6eba04..fc8e397383 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -209,7 +209,7 @@ void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, sub = lnk.getSubValues(); } -void TaskMirroredParameters::doApply() +void TaskMirroredParameters::apply() { std::vector mirrorPlanes; App::DocumentObject* obj; diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index 9da2d05671..fd8025f272 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -57,6 +57,8 @@ public: ~TaskMirroredParameters() override; + void apply() override; + protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -67,7 +69,6 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; - void doApply() override; void updateUI(); void getMirrorPlane(App::DocumentObject*& obj, std::vector& sub) const; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 1380e498d3..c22f524a85 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -530,7 +530,7 @@ void TaskMultiTransformParameters::onUpdateView(bool on) } } -void TaskMultiTransformParameters::doApply() +void TaskMultiTransformParameters::apply() { PartDesign::MultiTransform* pcMultiTransform = static_cast(getObject()); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 30a84f4bea..1f68dc1b04 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -58,6 +58,8 @@ public: QWidget* parent = nullptr); ~TaskMultiTransformParameters() override; + void apply() override; + /// Return the currently active subFeature PartDesign::Transformed* getSubFeature() { @@ -83,7 +85,6 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; - void doApply() override; /** Notifies when the object is about to be removed. */ void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) override; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 0afe933dd9..a8d8d59d0b 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -404,7 +404,7 @@ TaskPolarPatternParameters::~TaskPolarPatternParameters() } } -void TaskPolarPatternParameters::doApply() +void TaskPolarPatternParameters::apply() { std::vector axes; App::DocumentObject* obj; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index c33cc7b0fc..6bf8a836af 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -57,6 +57,8 @@ public: TaskPolarPatternParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); ~TaskPolarPatternParameters() override; + void apply() override; + protected: void onSelectionChanged(const Gui::SelectionChanges& msg) override; @@ -73,7 +75,6 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; - void doApply() override; void connectSignals(); void updateUI(); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index 54873b3e4d..4d7bc7ef6b 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -152,7 +152,7 @@ unsigned TaskScaledParameters::getOccurrences() const return ui->spinOccurrences->value(); } -void TaskScaledParameters::doApply() +void TaskScaledParameters::apply() { FCMD_OBJ_CMD(getObject(), "Factor = " << getFactor()); ui->spinOccurrences->apply(); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index 60a1a6d829..a60ca00d19 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -55,6 +55,8 @@ public: /// Constructor for task with parent task (MultiTransform mode) TaskScaledParameters(TaskMultiTransformParameters* parentTask, QWidget* parameterWidget); + void apply() override; + private Q_SLOTS: void onFactor(const double f); void onOccurrences(const uint n); @@ -63,7 +65,6 @@ private Q_SLOTS: private: void setupParameterUI(QWidget* widget) override; void retranslateParameterUI(QWidget* widget) override; - void doApply() override; void updateUI(); double getFactor() const; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index ddb58779f9..f2df569e52 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -150,10 +150,7 @@ public: ~TaskTransformedParameters() override; /// Apply changes for python console - void apply() - { - doApply(); - } + virtual void apply() = 0; /*! * \brief setEnabledTransaction @@ -235,9 +232,6 @@ private: /// Change translation of the parameter UI virtual void retranslateParameterUI(QWidget* widget) = 0; - /// Implementation for apply() - virtual void doApply() = 0; - void addObject(App::DocumentObject*); void removeObject(App::DocumentObject*); void clearButtons(); From b1f9e9f8051e210afeb5f10b1d114d2be8dfd1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Wed, 28 Feb 2024 15:40:28 +0100 Subject: [PATCH 11/14] Fix linter hints --- .../Gui/TaskLinearPatternParameters.cpp | 57 ++++++-------- .../Gui/TaskLinearPatternParameters.h | 12 +-- .../PartDesign/Gui/TaskMirroredParameters.cpp | 20 +++-- .../PartDesign/Gui/TaskMirroredParameters.h | 2 +- .../Gui/TaskMultiTransformParameters.cpp | 29 +++----- .../Gui/TaskMultiTransformParameters.h | 4 +- .../Gui/TaskPolarPatternParameters.cpp | 47 ++++++------ .../Gui/TaskPolarPatternParameters.h | 12 +-- .../PartDesign/Gui/TaskScaledParameters.cpp | 18 ++--- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 6 +- .../Gui/TaskTransformedParameters.cpp | 74 ++++++++----------- .../Gui/TaskTransformedParameters.h | 14 ++-- 12 files changed, 127 insertions(+), 168 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 44bde1e15c..8912cdd976 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -74,8 +74,7 @@ void TaskLinearPatternParameters::setupParameterUI(QWidget* widget) QMetaObject::connectSlotsByName(this); // Get the feature data - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); ui->spinLength->bind(pcLinearPattern->Length); ui->spinOffset->bind(pcLinearPattern->Offset); @@ -110,8 +109,7 @@ void TaskLinearPatternParameters::setupParameterUI(QWidget* widget) if (body) { try { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(true, false); } @@ -168,10 +166,8 @@ void TaskLinearPatternParameters::updateUI() } blockUpdate = true; - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); - PartDesign::LinearPatternMode mode = - static_cast(pcLinearPattern->Mode.getValue()); + auto pcLinearPattern = static_cast(getObject()); + auto mode = static_cast(pcLinearPattern->Mode.getValue()); bool reverse = pcLinearPattern->Reversed.getValue(); double length = pcLinearPattern->Length.getValue(); @@ -189,7 +185,7 @@ void TaskLinearPatternParameters::updateUI() // Note: This block of code would trigger change signal handlers (e.g. onOccurrences()) // and another updateUI() if we didn't check for blockUpdate ui->checkReverse->setChecked(reverse); - ui->comboMode->setCurrentIndex((long)mode); + ui->comboMode->setCurrentIndex(static_cast(mode)); ui->spinLength->setValue(length); ui->spinOffset->setValue(offset); ui->spinOccurrences->setValue(occurrences); @@ -230,8 +226,7 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges exitSelectionMode(); std::vector directions; App::DocumentObject* selObj = nullptr; - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); if (pcLinearPattern) { getReferencedSelection(pcLinearPattern, msg, selObj, directions); @@ -257,8 +252,7 @@ void TaskLinearPatternParameters::onCheckReverse(const bool on) if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); pcLinearPattern->Reversed.setValue(on); exitSelectionMode(); @@ -270,8 +264,7 @@ void TaskLinearPatternParameters::onModeChanged(const int mode) if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); pcLinearPattern->Mode.setValue(mode); adaptVisibilityToMode(); @@ -280,40 +273,37 @@ void TaskLinearPatternParameters::onModeChanged(const int mode) kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onLength(const double l) +void TaskLinearPatternParameters::onLength(const double length) { if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); - pcLinearPattern->Length.setValue(l); + auto pcLinearPattern = static_cast(getObject()); + pcLinearPattern->Length.setValue(length); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onOffset(const double o) +void TaskLinearPatternParameters::onOffset(const double offset) { if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); - pcLinearPattern->Offset.setValue(o); + auto pcLinearPattern = static_cast(getObject()); + pcLinearPattern->Offset.setValue(offset); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskLinearPatternParameters::onOccurrences(const uint n) +void TaskLinearPatternParameters::onOccurrences(const uint number) { if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); - pcLinearPattern->Occurrences.setValue(n); + auto pcLinearPattern = static_cast(getObject()); + pcLinearPattern->Occurrences.setValue(number); exitSelectionMode(); kickUpdateViewTimer(); @@ -324,8 +314,7 @@ void TaskLinearPatternParameters::onDirectionChanged(int /*num*/) if (blockUpdate) { return; } - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); try { if (!dirLinks.getCurrentLink().getValue()) { // enter reference selection mode @@ -353,10 +342,9 @@ void TaskLinearPatternParameters::onUpdateView(bool on) blockUpdate = !on; if (on) { // Do the same like in TaskDlgLinearPatternParameters::accept() but without doCommand - PartDesign::LinearPattern* pcLinearPattern = - static_cast(getObject()); + auto pcLinearPattern = static_cast(getObject()); std::vector directions; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; setupTransaction(); getDirection(obj, directions); @@ -410,8 +398,7 @@ TaskLinearPatternParameters::~TaskLinearPatternParameters() PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); if (body) { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->resetTemporaryVisibility(); } @@ -424,7 +411,7 @@ TaskLinearPatternParameters::~TaskLinearPatternParameters() void TaskLinearPatternParameters::apply() { std::vector directions; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; getDirection(obj, directions); std::string direction = buildLinkSingleSubPythonStr(obj, directions); diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index 1d87527f2a..f3baa55ca2 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -65,12 +65,12 @@ protected: private Q_SLOTS: void onUpdateViewTimer(); void onDirectionChanged(int num); - void onCheckReverse(const bool on); - void onModeChanged(const int mode); - void onLength(const double l); - void onOffset(const double o); - void onOccurrences(const uint n); - void onUpdateView(bool) override; + void onCheckReverse(bool on); + void onModeChanged(int mode); + void onLength(double length); + void onOffset(double offset); + void onOccurrences(uint number); + void onUpdateView(bool /*unsused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index fc8e397383..2cb22c42d8 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -90,8 +90,7 @@ void TaskMirroredParameters::setupParameterUI(QWidget* widget) if (body) { try { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(false, true); } @@ -115,7 +114,7 @@ void TaskMirroredParameters::updateUI() } blockUpdate = true; - PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + auto pcMirrored = static_cast(getObject()); if (planeLinks.setCurrentLink(pcMirrored->MirrorPlane) == -1) { // failed to set current, because the link isn't in the list yet @@ -137,8 +136,8 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg } else { std::vector mirrorPlanes; - App::DocumentObject* selObj; - PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + App::DocumentObject* selObj = nullptr; + auto pcMirrored = static_cast(getObject()); getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); if (!selObj) { return; @@ -162,7 +161,7 @@ void TaskMirroredParameters::onPlaneChanged(int /*num*/) return; } setupTransaction(); - PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + auto pcMirrored = static_cast(getObject()); try { if (!planeLinks.getCurrentLink().getValue()) { // enter reference selection mode @@ -190,9 +189,9 @@ void TaskMirroredParameters::onUpdateView(bool on) if (on) { setupTransaction(); // Do the same like in TaskDlgMirroredParameters::accept() but without doCommand - PartDesign::Mirrored* pcMirrored = static_cast(getObject()); + auto pcMirrored = static_cast(getObject()); std::vector mirrorPlanes; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; getMirrorPlane(obj, mirrorPlanes); pcMirrored->MirrorPlane.setValue(obj, mirrorPlanes); @@ -212,7 +211,7 @@ void TaskMirroredParameters::getMirrorPlane(App::DocumentObject*& obj, void TaskMirroredParameters::apply() { std::vector mirrorPlanes; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; getMirrorPlane(obj, mirrorPlanes); std::string mirrorPlane = buildLinkSingleSubPythonStr(obj, mirrorPlanes); @@ -226,8 +225,7 @@ TaskMirroredParameters::~TaskMirroredParameters() PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); if (body) { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->resetTemporaryVisibility(); } diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h index fd8025f272..bb393833cf 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.h @@ -64,7 +64,7 @@ protected: private Q_SLOTS: void onPlaneChanged(int num); - void onUpdateView(bool) override; + void onUpdateView(bool /*unused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index c22f524a85..ba5433a029 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -68,7 +68,7 @@ void TaskMultiTransformParameters::setupParameterUI(QWidget* widget) QMetaObject::connectSlotsByName(this); // Create a context menu for the listview of transformation features - QAction* action = new QAction(tr("Edit"), ui->listTransformFeatures); + auto action = new QAction(tr("Edit"), ui->listTransformFeatures); action->connect(action, &QAction::triggered, this, @@ -124,8 +124,7 @@ void TaskMultiTransformParameters::setupParameterUI(QWidget* widget) ui->buttonOK->hide(); // Get the transformFeatures data - PartDesign::MultiTransform* pcMultiTransform = - static_cast(TransformedView->getObject()); + auto pcMultiTransform = static_cast(TransformedView->getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); @@ -191,8 +190,7 @@ void TaskMultiTransformParameters::onTransformDelete() return; // Can't delete the hint... } int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = - static_cast(TransformedView->getObject()); + auto pcMultiTransform = static_cast(TransformedView->getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); @@ -224,8 +222,7 @@ void TaskMultiTransformParameters::onTransformEdit() // without OK'ing first ui->listTransformFeatures->currentItem()->setSelected(true); int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = - static_cast(TransformedView->getObject()); + auto pcMultiTransform = static_cast(TransformedView->getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); @@ -323,8 +320,7 @@ void TaskMultiTransformParameters::onTransformAddLinearPattern() else { // set Direction value before filling up the combo box to avoid creating an empty item // inside updateUI() - PartDesign::Body* body = - static_cast(Part::BodyBase::findBodyOf(getObject())); + auto body = static_cast(Part::BodyBase::findBodyOf(getObject())); if (body) { FCMD_OBJ_CMD(Feat, "Direction = (" << Gui::Command::getObjectCmd(body->getOrigin()->getX()) @@ -419,8 +415,7 @@ void TaskMultiTransformParameters::finishAdd(std::string& newFeatName) // getOriginals().front()->getNameInDocument().c_str()); setupTransaction(); - PartDesign::MultiTransform* pcMultiTransform = - static_cast(TransformedView->getObject()); + auto pcMultiTransform = static_cast(TransformedView->getObject()); if (editHint) { // Remove hint, first feature is being added ui->listTransformFeatures->model()->removeRow(0); @@ -469,8 +464,7 @@ void TaskMultiTransformParameters::moveTransformFeature(const int increment) { setupTransaction(); int row = ui->listTransformFeatures->currentIndex().row(); - PartDesign::MultiTransform* pcMultiTransform = - static_cast(TransformedView->getObject()); + auto pcMultiTransform = static_cast(TransformedView->getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); @@ -480,7 +474,7 @@ void TaskMultiTransformParameters::moveTransformFeature(const int increment) App::DocumentObject* feature = transformFeatures[row]; transformFeatures.erase(transformFeatures.begin() + row); - QListWidgetItem* item = new QListWidgetItem(*(ui->listTransformFeatures->item(row))); + auto item = new QListWidgetItem(*(ui->listTransformFeatures->item(row))); ui->listTransformFeatures->model()->removeRow(row); // After this operation, if we were to insert at index row again, things will remain unchanged @@ -532,8 +526,7 @@ void TaskMultiTransformParameters::onUpdateView(bool on) void TaskMultiTransformParameters::apply() { - PartDesign::MultiTransform* pcMultiTransform = - static_cast(getObject()); + auto pcMultiTransform = static_cast(getObject()); std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); std::stringstream str; @@ -553,8 +546,8 @@ TaskMultiTransformParameters::~TaskMultiTransformParameters() closeSubTask(); } catch (const Py::Exception&) { - Base::PyException e; // extract the Python error text - e.ReportException(); + Base::PyException exc; // extract the Python error text + exc.ReportException(); } } diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 1f68dc1b04..7f7eea688d 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -80,7 +80,7 @@ private Q_SLOTS: void onMoveDown(); // Note: There is no Cancel button because I couldn't work out how to save the state of // a subFeature so as to revert the changes of an edit operation - void onUpdateView(bool) override; + void onUpdateView(bool /*unsused*/) override; private: void setupParameterUI(QWidget* widget) override; @@ -91,7 +91,7 @@ private: void updateUI(); void closeSubTask(); - void moveTransformFeature(const int increment); + void moveTransformFeature(int increment); void finishAdd(std::string& newFeatName); private: diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index a8d8d59d0b..2f772db673 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -81,7 +81,7 @@ void TaskPolarPatternParameters::setupParameterUI(QWidget* widget) QMetaObject::connectSlotsByName(this); // Get the feature data - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); ui->polarAngle->bind(pcPolarPattern->Angle); ui->angleOffset->bind(pcPolarPattern->Offset); @@ -111,8 +111,7 @@ void TaskPolarPatternParameters::setupParameterUI(QWidget* widget) if (body) { try { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->setTemporaryVisibility(true, false); } @@ -169,10 +168,9 @@ void TaskPolarPatternParameters::updateUI() } blockUpdate = true; - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); - PartDesign::PolarPatternMode mode = - static_cast(pcPolarPattern->Mode.getValue()); + auto mode = static_cast(pcPolarPattern->Mode.getValue()); bool reverse = pcPolarPattern->Reversed.getValue(); double angle = pcPolarPattern->Angle.getValue(); double offset = pcPolarPattern->Offset.getValue(); @@ -189,7 +187,7 @@ void TaskPolarPatternParameters::updateUI() // Note: This block of code would trigger change signal handlers (e.g. onOccurrences()) // and another updateUI() if we didn't check for blockUpdate ui->checkReverse->setChecked(reverse); - ui->comboMode->setCurrentIndex((long)mode); + ui->comboMode->setCurrentIndex(static_cast(mode)); ui->polarAngle->setValue(angle); ui->angleOffset->setValue(offset); ui->spinOccurrences->setValue(occurrences); @@ -226,9 +224,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& } else { std::vector axes; - App::DocumentObject* selObj; - PartDesign::PolarPattern* pcPolarPattern = - static_cast(getObject()); + App::DocumentObject* selObj = nullptr; + auto pcPolarPattern = static_cast(getObject()); getReferencedSelection(pcPolarPattern, msg, selObj, axes); if (!selObj) { return; @@ -251,7 +248,7 @@ void TaskPolarPatternParameters::onCheckReverse(const bool on) if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); pcPolarPattern->Reversed.setValue(on); exitSelectionMode(); @@ -263,7 +260,7 @@ void TaskPolarPatternParameters::onModeChanged(const int mode) if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); pcPolarPattern->Mode.setValue(mode); adaptVisibilityToMode(); @@ -272,25 +269,25 @@ void TaskPolarPatternParameters::onModeChanged(const int mode) kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onAngle(const double a) +void TaskPolarPatternParameters::onAngle(const double angle) { if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); - pcPolarPattern->Angle.setValue(a); + auto pcPolarPattern = static_cast(getObject()); + pcPolarPattern->Angle.setValue(angle); exitSelectionMode(); kickUpdateViewTimer(); } -void TaskPolarPatternParameters::onOffset(const double a) +void TaskPolarPatternParameters::onOffset(const double offset) { if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); - pcPolarPattern->Offset.setValue(a); + auto pcPolarPattern = static_cast(getObject()); + pcPolarPattern->Offset.setValue(offset); exitSelectionMode(); kickUpdateViewTimer(); @@ -301,7 +298,7 @@ void TaskPolarPatternParameters::onOccurrences(const uint n) if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); pcPolarPattern->Occurrences.setValue(n); exitSelectionMode(); @@ -313,7 +310,7 @@ void TaskPolarPatternParameters::onAxisChanged(int /*num*/) if (blockUpdate) { return; } - PartDesign::PolarPattern* pcPolarPattern = static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); try { if (!axesLinks.getCurrentLink().getValue()) { @@ -341,10 +338,9 @@ void TaskPolarPatternParameters::onUpdateView(bool on) blockUpdate = !on; if (on) { // Do the same like in TaskDlgPolarPatternParameters::accept() but without doCommand - PartDesign::PolarPattern* pcPolarPattern = - static_cast(getObject()); + auto pcPolarPattern = static_cast(getObject()); std::vector axes; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; setupTransaction(); getAxis(obj, axes); @@ -393,8 +389,7 @@ TaskPolarPatternParameters::~TaskPolarPatternParameters() PartDesign::Body* body = PartDesign::Body::findBodyOf(getObject()); if (body) { App::Origin* origin = body->getOrigin(); - ViewProviderOrigin* vpOrigin; - vpOrigin = static_cast( + auto vpOrigin = static_cast( Gui::Application::Instance->getViewProvider(origin)); vpOrigin->resetTemporaryVisibility(); } @@ -407,7 +402,7 @@ TaskPolarPatternParameters::~TaskPolarPatternParameters() void TaskPolarPatternParameters::apply() { std::vector axes; - App::DocumentObject* obj; + App::DocumentObject* obj = nullptr; getAxis(obj, axes); std::string axis = buildLinkSingleSubPythonStr(obj, axes); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index 6bf8a836af..db96f2c84e 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -65,12 +65,12 @@ protected: private Q_SLOTS: void onUpdateViewTimer(); void onAxisChanged(int num); - void onModeChanged(const int mode); - void onCheckReverse(const bool on); - void onAngle(const double a); - void onOffset(const double a); - void onOccurrences(const uint n); - void onUpdateView(bool) override; + void onModeChanged(int mode); + void onCheckReverse(bool on); + void onAngle(double angle); + void onOffset(double offset); + void onOccurrences(uint number); + void onUpdateView(bool /*unsused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp index 4d7bc7ef6b..54890804da 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.cpp @@ -75,7 +75,7 @@ void TaskScaledParameters::setupParameterUI(QWidget* widget) &TaskScaledParameters::onOccurrences); // Get the feature data - PartDesign::Scaled* pcScaled = static_cast(getObject()); + auto pcScaled = static_cast(getObject()); ui->spinFactor->bind(pcScaled->Factor); ui->spinOccurrences->setMaximum(INT_MAX); @@ -99,7 +99,7 @@ void TaskScaledParameters::updateUI() } blockUpdate = true; - PartDesign::Scaled* pcScaled = static_cast(getObject()); + auto pcScaled = static_cast(getObject()); double factor = pcScaled->Factor.getValue(); unsigned occurrences = pcScaled->Occurrences.getValue(); @@ -110,23 +110,23 @@ void TaskScaledParameters::updateUI() blockUpdate = false; } -void TaskScaledParameters::onFactor(const double f) +void TaskScaledParameters::onFactor(const double factor) { if (blockUpdate) { return; } - PartDesign::Scaled* pcScaled = static_cast(getObject()); - pcScaled->Factor.setValue(f); + auto pcScaled = static_cast(getObject()); + pcScaled->Factor.setValue(factor); recomputeFeature(); } -void TaskScaledParameters::onOccurrences(const uint n) +void TaskScaledParameters::onOccurrences(const uint number) { if (blockUpdate) { return; } - PartDesign::Scaled* pcScaled = static_cast(getObject()); - pcScaled->Occurrences.setValue(n); + auto pcScaled = static_cast(getObject()); + pcScaled->Occurrences.setValue(number); recomputeFeature(); } @@ -135,7 +135,7 @@ void TaskScaledParameters::onUpdateView(bool on) blockUpdate = !on; if (on) { // Do the same like in TaskDlgScaledParameters::accept() but without doCommand - PartDesign::Scaled* pcScaled = static_cast(getObject()); + auto pcScaled = static_cast(getObject()); pcScaled->Factor.setValue(getFactor()); pcScaled->Occurrences.setValue(getOccurrences()); recomputeFeature(); diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index a60ca00d19..a4fcfced0f 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -58,9 +58,9 @@ public: void apply() override; private Q_SLOTS: - void onFactor(const double f); - void onOccurrences(const uint n); - void onUpdateView(bool) override; + void onFactor(double factor); + void onOccurrences(uint number); + void onUpdateView(bool /*unsused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 25fd674181..15c6027a75 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -81,9 +81,7 @@ TaskTransformedParameters::~TaskTransformedParameters() // make sure to remove selection gate in all cases Gui::Selection().rmvSelectionGate(); - if (proxy) { - delete proxy; - } + delete proxy; } void TaskTransformedParameters::setupUI() @@ -103,12 +101,10 @@ void TaskTransformedParameters::setupUI() &TaskTransformedParameters::onButtonRemoveFeature); // Create context menu - QAction* action = new QAction(tr("Remove"), this); + auto action = new QAction(tr("Remove"), this); action->setShortcut(QKeySequence::Delete); -#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) // display shortcut behind the context menu entry action->setShortcutVisibleInContextMenu(true); -#endif ui->listWidgetFeatures->addAction(action); connect(action, &QAction::triggered, this, &TaskTransformedParameters::onFeatureDeleted); ui->listWidgetFeatures->setContextMenuPolicy(Qt::ActionsContextMenu); @@ -123,13 +119,13 @@ void TaskTransformedParameters::setupUI() &TaskTransformedParameters::onUpdateView); // Get the feature data - PartDesign::Transformed* pcTransformed = static_cast(getObject()); + auto pcTransformed = static_cast(getObject()); std::vector originals = pcTransformed->Originals.getValues(); // Fill data into dialog elements for (auto obj : originals) { if (obj) { - QListWidgetItem* item = new QListWidgetItem(); + auto item = new QListWidgetItem(); item->setText(QString::fromUtf8(obj->Label.getValue())); item->setData(Qt::UserRole, QString::fromLatin1(obj->getNameInDocument())); ui->listWidgetFeatures->addItem(item); @@ -147,10 +143,10 @@ void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumen } } -void TaskTransformedParameters::changeEvent(QEvent* e) +void TaskTransformedParameters::changeEvent(QEvent* event) { - TaskBox::changeEvent(e); - if (e->type() == QEvent::LanguageChange && proxy) { + TaskBox::changeEvent(event); + if (event->type() == QEvent::LanguageChange && proxy) { ui->retranslateUi(proxy); retranslateParameterUI(ui->featureUI); } @@ -184,7 +180,7 @@ void TaskTransformedParameters::addObject(App::DocumentObject* obj) QString label = QString::fromUtf8(obj->Label.getValue()); QString objectName = QString::fromLatin1(obj->getNameInDocument()); - QListWidgetItem* item = new QListWidgetItem(); + auto item = new QListWidgetItem(); item->setText(label); item->setData(Qt::UserRole, objectName); ui->listWidgetFeatures->addItem(item); @@ -213,10 +209,9 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms // Do the same like in TaskDlgTransformedParameters::accept() but without doCommand std::vector originals = pcTransformed->Originals.getValues(); - std::vector::iterator o = - std::find(originals.begin(), originals.end(), selectedObject); + auto or_iter = std::find(originals.begin(), originals.end(), selectedObject); if (selectionMode == SelectionMode::AddFeature) { - if (o == originals.end()) { + if (or_iter == originals.end()) { originals.push_back(selectedObject); addObject(selectedObject); } @@ -225,8 +220,8 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms } } else { - if (o != originals.end()) { - originals.erase(o); + if (or_iter != originals.end()) { + originals.erase(or_iter); removeObject(selectedObject); } else { @@ -257,14 +252,14 @@ void TaskTransformedParameters::setupTransaction() int tid = 0; App::GetApplication().getActiveTransaction(&tid); - if (tid && tid == transactionID) { + if (tid != 0 && tid == transactionID) { return; } // open a transaction if none is active - std::string n("Edit "); - n += obj->Label.getValue(); - transactionID = App::GetApplication().setActiveTransaction(n.c_str()); + std::string name("Edit "); + name += obj->Label.getValue(); + transactionID = App::GetApplication().setActiveTransaction(name.c_str()); } void TaskTransformedParameters::setEnabledTransaction(bool on) @@ -302,11 +297,11 @@ void TaskTransformedParameters::checkVisibility() } auto inset = feat->getInListEx(true); inset.emplace(feat); - for (auto o : body->Group.getValues()) { - if (!o->Visibility.getValue() || !o->isDerivedFrom(PartDesign::Feature::getClassTypeId())) { + for (auto obj : body->Group.getValues()) { + if (!obj->Visibility.getValue() || !obj->isDerivedFrom(PartDesign::Feature::getClassTypeId())) { continue; } - if (inset.count(o)) { + if (inset.count(obj) > 0) { break; } return; @@ -350,8 +345,7 @@ void TaskTransformedParameters::removeItemFromListWidget(QListWidget* widget, QList items = widget->findItems(itemstr, Qt::MatchExactly); if (!items.empty()) { for (auto item : items) { - QListWidgetItem* it = widget->takeItem(widget->row(item)); - delete it; + delete widget->takeItem(widget->row(item)); } } } @@ -436,15 +430,7 @@ void TaskTransformedParameters::recomputeFeature() PartDesignGui::ViewProviderTransformed* TaskTransformedParameters::getTopTransformedView() const { - PartDesignGui::ViewProviderTransformed* rv; - - if (insideMultiTransform) { - rv = parentTask->TransformedView; - } - else { - rv = TransformedView; - } - return rv; + return insideMultiTransform ? parentTask->TransformedView : TransformedView; } PartDesign::Transformed* TaskTransformedParameters::getTopTransformedObject() const @@ -464,12 +450,10 @@ PartDesign::Transformed* TaskTransformedParameters::getObject() const if (insideMultiTransform) { return parentTask->getSubFeature(); } - else if (TransformedView) { + if (TransformedView) { return static_cast(TransformedView->getObject()); } - else { - return nullptr; - } + return nullptr; } App::DocumentObject* TaskTransformedParameters::getBaseObject() const @@ -544,8 +528,8 @@ void TaskTransformedParameters::exitSelectionMode() Gui::Selection().rmvSelectionGate(); showObject(); } - catch (Base::Exception& e) { - e.ReportException(); + catch (Base::Exception& exc) { + exc.ReportException(); } } @@ -560,7 +544,7 @@ void TaskTransformedParameters::addReferenceSelectionGate(AllowSelectionFlags al void TaskTransformedParameters::indexesMoved() { - QAbstractItemModel* model = qobject_cast(sender()); + auto model = qobject_cast(sender()); if (!model) { return; } @@ -624,7 +608,7 @@ ComboLinks::ComboLinks(QComboBox& combo) _combo->clear(); } -int ComboLinks::addLink(const App::PropertyLinkSub& lnk, QString itemText) +int ComboLinks::addLink(const App::PropertyLinkSub& lnk, QString const& itemText) { if (!_combo) { return 0; @@ -639,7 +623,9 @@ int ComboLinks::addLink(const App::PropertyLinkSub& lnk, QString itemText) return linksInList.size() - 1; } -int ComboLinks::addLink(App::DocumentObject* linkObj, std::string linkSubname, QString itemText) +int ComboLinks::addLink(App::DocumentObject* linkObj, + std::string const& linkSubname, + QString const& itemText) { if (!_combo) { return 0; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index f2df569e52..821995fee7 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -85,8 +85,8 @@ public: * @param itemText * @return */ - int addLink(const App::PropertyLinkSub& lnk, QString itemText); - int addLink(App::DocumentObject* linkObj, std::string linkSubname, QString itemText); + int addLink(const App::PropertyLinkSub& lnk, QString const& itemText); + int addLink(App::DocumentObject* linkObj, std::string const& linkSubname, QString const& itemText); void clear(); App::PropertyLinkSub& getLink(int index) const; @@ -158,7 +158,7 @@ public: * instance that does it already, e.g. TaskDlgMultiTransformParameters. * By default, transactions are enabled. */ - void setEnabledTransaction(bool); + void setEnabledTransaction(bool /*unsused*/); /// Exit the selection mode of the associated task panel void exitSelectionMode(); @@ -215,10 +215,10 @@ protected: void setupTransaction(); private Q_SLOTS: - virtual void onUpdateView(bool) = 0; + virtual void onUpdateView(bool /*unsused*/) = 0; - void onButtonAddFeature(const bool checked); - void onButtonRemoveFeature(const bool checked); + void onButtonAddFeature(bool checked); + void onButtonRemoveFeature(bool checked); void onFeatureDeleted(); void indexesMoved(); @@ -255,7 +255,7 @@ private: */ PartDesign::Transformed* getTopTransformedObject() const; - void changeEvent(QEvent* e) override; + void changeEvent(QEvent* event) override; static void removeItemFromListWidget(QListWidget* widget, const QString& itemstr); From 0bdd72e7e7456f45221fca1ea482eaa443702a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Wed, 28 Feb 2024 16:39:31 +0100 Subject: [PATCH 12/14] Use the isDerived<>() Template function --- src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp | 2 +- src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 8912cdd976..2b954d5cf8 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -97,7 +97,7 @@ void TaskLinearPatternParameters::setupParameterUI(QWidget* widget) dirLinks.setCombo(*(ui->comboDirection)); App::DocumentObject* sketch = getSketchObject(); - if (sketch && sketch->isDerivedFrom(Part::Part2DObject::getClassTypeId())) { + if (sketch && sketch->isDerivedFrom()) { this->fillAxisCombo(dirLinks, static_cast(sketch)); } else { diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 2cb22c42d8..eb1dc448e9 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -78,7 +78,7 @@ void TaskMirroredParameters::setupParameterUI(QWidget* widget) ui->comboPlane->setEnabled(true); App::DocumentObject* sketch = getSketchObject(); - if (sketch && sketch->isDerivedFrom(Part::Part2DObject::getClassTypeId())) { + if (sketch && sketch->isDerivedFrom()) { this->fillPlanesCombo(planeLinks, static_cast(sketch)); } else { diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index 2f772db673..e437ab90ef 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -98,7 +98,7 @@ void TaskPolarPatternParameters::setupParameterUI(QWidget* widget) this->axesLinks.setCombo(*(ui->comboAxis)); App::DocumentObject* sketch = getSketchObject(); - if (sketch && sketch->isDerivedFrom(Part::Part2DObject::getClassTypeId())) { + if (sketch && sketch->isDerivedFrom()) { this->fillAxisCombo(axesLinks, static_cast(sketch)); } else { diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 15c6027a75..d2045b6b57 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -205,7 +205,7 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms PartDesign::Transformed* pcTransformed = getObject(); App::DocumentObject* selectedObject = pcTransformed->getDocument()->getObject(msg.pObjectName); - if (selectedObject->isDerivedFrom(PartDesign::FeatureAddSub::getClassTypeId())) { + if (selectedObject->isDerivedFrom()) { // Do the same like in TaskDlgTransformedParameters::accept() but without doCommand std::vector originals = pcTransformed->Originals.getValues(); @@ -298,7 +298,7 @@ void TaskTransformedParameters::checkVisibility() auto inset = feat->getInListEx(true); inset.emplace(feat); for (auto obj : body->Group.getValues()) { - if (!obj->Visibility.getValue() || !obj->isDerivedFrom(PartDesign::Feature::getClassTypeId())) { + if (!obj->Visibility.getValue() || !obj->isDerivedFrom()) { continue; } if (inset.count(obj) > 0) { @@ -441,7 +441,7 @@ PartDesign::Transformed* TaskTransformedParameters::getTopTransformedObject() co } App::DocumentObject* transform = vp->getObject(); - assert(transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId())); + assert(transform->isDerivedFrom()); return static_cast(transform); } From a76aead05e9acaf838d44e6ec9cb94b254c75bac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Althaus?= Date: Wed, 28 Feb 2024 16:42:59 +0100 Subject: [PATCH 13/14] Fix reference selection code PolarPattern was missing some classes. The code is now more consistent between the patterns. --- .../Gui/TaskLinearPatternParameters.cpp | 34 +++++++++---------- .../PartDesign/Gui/TaskMirroredParameters.cpp | 8 ++--- .../Gui/TaskPolarPatternParameters.cpp | 10 +++--- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 2b954d5cf8..6819398580 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -222,27 +222,25 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges exitSelectionMode(); } else if (selectionMode == SelectionMode::Reference) { - // TODO check if this works correctly (2015-09-01, Fat-Zer) - exitSelectionMode(); + auto pcLinearPattern = static_cast(getObject()); + std::vector directions; App::DocumentObject* selObj = nullptr; - auto pcLinearPattern = static_cast(getObject()); - if (pcLinearPattern) { - getReferencedSelection(pcLinearPattern, msg, selObj, directions); - - // Note: ReferenceSelection has already checked the selection for validity - if (selObj - && (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Line::getClassTypeId()) - || selObj->isDerivedFrom(Part::Feature::getClassTypeId()) - || selObj->isDerivedFrom(PartDesign::Line::getClassTypeId()) - || selObj->isDerivedFrom(PartDesign::Plane::getClassTypeId()))) { - setupTransaction(); - pcLinearPattern->Direction.setValue(selObj, directions); - recomputeFeature(); - updateUI(); - } + getReferencedSelection(pcLinearPattern, msg, selObj, directions); + if (!selObj) { + return; } + + // Note: ReferenceSelection has already checked the selection for validity + if (selObj->isDerivedFrom() || selObj->isDerivedFrom() + || selObj->isDerivedFrom() + || selObj->isDerivedFrom()) { + setupTransaction(); + pcLinearPattern->Direction.setValue(selObj, directions); + recomputeFeature(); + updateUI(); + } + exitSelectionMode(); } } } diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index eb1dc448e9..a1823d22ac 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -134,17 +134,17 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg if (originalSelected(msg)) { exitSelectionMode(); } - else { + else if (selectionMode == SelectionMode::Reference) { + auto pcMirrored = static_cast(getObject()); + std::vector mirrorPlanes; App::DocumentObject* selObj = nullptr; - auto pcMirrored = static_cast(getObject()); getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); if (!selObj) { return; } - if (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Plane::getClassTypeId())) { + if (selObj->isDerivedFrom()) { setupTransaction(); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); recomputeFeature(); diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp index e437ab90ef..a49879b30b 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.cpp @@ -218,21 +218,21 @@ void TaskPolarPatternParameters::adaptVisibilityToMode() void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { - if (originalSelected(msg)) { exitSelectionMode(); } - else { + else if (selectionMode == SelectionMode::Reference) { + auto pcPolarPattern = static_cast(getObject()); + std::vector axes; App::DocumentObject* selObj = nullptr; - auto pcPolarPattern = static_cast(getObject()); getReferencedSelection(pcPolarPattern, msg, selObj, axes); if (!selObj) { return; } - if (selectionMode == SelectionMode::Reference - || selObj->isDerivedFrom(App::Line::getClassTypeId())) { + if (selObj->isDerivedFrom() || selObj->isDerivedFrom() + || selObj->isDerivedFrom()) { setupTransaction(); pcPolarPattern->Axis.setValue(selObj, axes); recomputeFeature(); From dac2fb4d3dd795ac418a7ec5d3e361c659160499 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 28 Feb 2024 13:56:16 -0600 Subject: [PATCH 14/14] PD: Correct typo in pattern parameters --- src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h | 2 +- src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h | 2 +- src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h | 2 +- src/Mod/PartDesign/Gui/TaskScaledParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskTransformedParameters.h | 4 ++-- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index f3baa55ca2..33f3a7b22f 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -70,7 +70,7 @@ private Q_SLOTS: void onLength(double length); void onOffset(double offset); void onOccurrences(uint number); - void onUpdateView(bool /*unsused*/) override; + void onUpdateView(bool /*unused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 7f7eea688d..794d731a0f 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -80,7 +80,7 @@ private Q_SLOTS: void onMoveDown(); // Note: There is no Cancel button because I couldn't work out how to save the state of // a subFeature so as to revert the changes of an edit operation - void onUpdateView(bool /*unsused*/) override; + void onUpdateView(bool /*unused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h index db96f2c84e..f91a1a717e 100644 --- a/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPolarPatternParameters.h @@ -70,7 +70,7 @@ private Q_SLOTS: void onAngle(double angle); void onOffset(double offset); void onOccurrences(uint number); - void onUpdateView(bool /*unsused*/) override; + void onUpdateView(bool /*unused*/) override; private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskScaledParameters.h b/src/Mod/PartDesign/Gui/TaskScaledParameters.h index a4fcfced0f..5e64b497c2 100644 --- a/src/Mod/PartDesign/Gui/TaskScaledParameters.h +++ b/src/Mod/PartDesign/Gui/TaskScaledParameters.h @@ -60,7 +60,8 @@ public: private Q_SLOTS: void onFactor(double factor); void onOccurrences(uint number); - void onUpdateView(bool /*unsused*/) override; + void onUpdateView(bool /*unused*/) override; + private: void setupParameterUI(QWidget* widget) override; diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 821995fee7..c55a6519ed 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -158,7 +158,7 @@ public: * instance that does it already, e.g. TaskDlgMultiTransformParameters. * By default, transactions are enabled. */ - void setEnabledTransaction(bool /*unsused*/); + void setEnabledTransaction(bool /*unused*/); /// Exit the selection mode of the associated task panel void exitSelectionMode(); @@ -215,7 +215,7 @@ protected: void setupTransaction(); private Q_SLOTS: - virtual void onUpdateView(bool /*unsused*/) = 0; + virtual void onUpdateView(bool /*unused*/) = 0; void onButtonAddFeature(bool checked); void onButtonRemoveFeature(bool checked);