From 66864bbe7bfeada1522fc8a0055aab1a40a3c24c Mon Sep 17 00:00:00 2001 From: Uwe Date: Sat, 8 Jan 2022 01:59:58 +0100 Subject: [PATCH] [PD] Pad/Pocket: sort out duplicated code the checkboxes are almost identical and it avoids work to have them in one location --- .../PartDesign/Gui/TaskExtrudeParameters.cpp | 80 ++++++++++++++++++- .../PartDesign/Gui/TaskExtrudeParameters.h | 14 ++++ src/Mod/PartDesign/Gui/TaskPadParameters.cpp | 66 +-------------- src/Mod/PartDesign/Gui/TaskPadParameters.h | 8 -- .../PartDesign/Gui/TaskPocketParameters.cpp | 76 +----------------- src/Mod/PartDesign/Gui/TaskPocketParameters.h | 8 -- 6 files changed, 96 insertions(+), 156 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp index ecfef5eccc..1a6e5b9421 100644 --- a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp @@ -25,10 +25,10 @@ #ifndef _PreComp_ # include -# include -# include # include +# include # include +# include #endif #include "ui_TaskPadPocketParameters.h" @@ -389,6 +389,82 @@ void TaskExtrudeParameters::addAxisToCombo(App::DocumentObject* linkObj, std::st lnk.setValue(linkObj, std::vector(1, linkSubname)); } +void TaskExtrudeParameters::setCheckboxes(Modes mode, Type type) +{ + // disable/hide everything unless we are sure we don't need it + // exception: the direction parameters are in any case visible + bool isLengthEditVisible = false; + bool isLengthEdit2Visible = false; + bool isOffsetEditVisible = false; + bool isOffsetEditEnabled = true; + bool isMidplaneEnabled = false; + bool isMidplaneVisible = false; + bool isReversedEnabled = false; + bool isFaceEditEnabled = false; + + if (mode == Modes::Dimension) { + isLengthEditVisible = true; + ui->lengthEdit->selectNumber(); + QMetaObject::invokeMethod(ui->lengthEdit, "setFocus", Qt::QueuedConnection); + isMidplaneVisible = true; + isMidplaneEnabled = true; + // Reverse only makes sense if Midplane is not true + isReversedEnabled = !ui->checkBoxMidplane->isChecked(); + } + else if (mode == Modes::ThroughAll && type = Type::Pocket) { + isOffsetEditVisible = true; + isOffsetEditEnabled = false; // offset may have some meaning for through all but it doesn't work + isMidplaneEnabled = true; + isReversedEnabled = !ui->checkBoxMidplane->isChecked(); + } + else if (mode == Modes::ToLast && type == Type::Pad) { + isOffsetEditVisible = true; + isReversedEnabled = true; + } + else if (mode == Modes::ToFirst) { + isOffsetEditVisible = true; + isReversedEnabled = true; + } + else if (mode == Modes::ToFace) { + isOffsetEditVisible = true; + isReversedEnabled = true; + isFaceEditEnabled = true; + QMetaObject::invokeMethod(ui->lineFaceName, "setFocus", Qt::QueuedConnection); + // Go into reference selection mode if no face has been selected yet + if (ui->lineFaceName->property("FeatureName").isNull()) + onButtonFace(true); + } + else if (mode == Modes::TwoDimensions) { + isLengthEditVisible = true; + isLengthEdit2Visible = true; + isReversedEnabled = true; + } + + ui->lengthEdit->setVisible(isLengthEditVisible); + ui->lengthEdit->setEnabled(isLengthEditVisible); + ui->labelLength->setVisible(isLengthEditVisible); + ui->checkBoxAlongDirection->setVisible(isLengthEditVisible); + + ui->lengthEdit2->setVisible(isLengthEdit2Visible); + ui->lengthEdit2->setEnabled(isLengthEdit2Visible); + ui->labelLength2->setVisible(isLengthEdit2Visible); + + ui->offsetEdit->setVisible(isOffsetEditVisible); + ui->offsetEdit->setEnabled(isOffsetEditVisible && isOffsetEditEnabled); + ui->labelOffset->setVisible(isOffsetEditVisible); + + ui->checkBoxMidplane->setEnabled(isMidplaneEnabled); + ui->checkBoxMidplane->setVisible(isMidplaneVisible); + + ui->checkBoxReversed->setEnabled(isReversedEnabled); + + ui->buttonFace->setEnabled(isFaceEditEnabled); + ui->lineFaceName->setEnabled(isFaceEditEnabled); + if (!isFaceEditEnabled) { + onButtonFace(false); + } +} + void TaskExtrudeParameters::onDirectionCBChanged(int num) { PartDesign::FeatureExtrude* extrude = static_cast(vp->getObject()); diff --git a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h index b53d1fd4bd..d5f6ce34c0 100644 --- a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h +++ b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h @@ -67,6 +67,19 @@ public: bool hasSketch = true); void applyParameters(QString facename); + enum class Type { + Pad, + Pocket + }; + enum class Modes { + Dimension, + ThroughAll, + ToLast = ThroughAll, + ToFirst, + ToFace, + TwoDimensions + }; + protected Q_SLOTS: void onLengthChanged(double); void onLength2Changed(double); @@ -84,6 +97,7 @@ protected Q_SLOTS: virtual void onModeChanged(int); protected: + void setCheckboxes(Modes mode, Type type); void setupDialog(); void readValuesFromHistory(); void changeEvent(QEvent *e) override; diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp index 94282a21cf..0965c845ea 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp @@ -80,70 +80,8 @@ void TaskPadParameters::updateUI(int index) { // update direction combobox fillDirectionCombo(); - - // disable/hide everything unless we are sure we don't need it - // exception: the direction parameters are in any case visible - bool isLengthEditVisible = false; - bool isLengthEdit2Visible = false; - bool isOffsetEditVisible = false; - bool isMidplaneEnabled = false; - bool isMidplaneVisible = false; - bool isReversedEnabled = false; - bool isFaceEditEnabled = false; - - Modes mode = static_cast(index); - - if (mode == Modes::Dimension) { - isLengthEditVisible = true; - ui->lengthEdit->selectNumber(); - QMetaObject::invokeMethod(ui->lengthEdit, "setFocus", Qt::QueuedConnection); - isMidplaneEnabled = !ui->checkBoxReversed->isChecked(); - isMidplaneVisible = true; - // Reverse only makes sense if Midplane is not true - isReversedEnabled = !ui->checkBoxMidplane->isChecked(); - } - else if (mode == Modes::ToLast || mode == Modes::ToFirst) { - isOffsetEditVisible = true; - isReversedEnabled = true; - } - else if (mode == Modes::ToFace) { - isOffsetEditVisible = true; - isFaceEditEnabled = true; - QMetaObject::invokeMethod(ui->lineFaceName, "setFocus", Qt::QueuedConnection); - // Go into reference selection mode if no face has been selected yet - if (ui->lineFaceName->property("FeatureName").isNull()) - onButtonFace(true); - isReversedEnabled = true; - } - else if (mode == Modes::TwoDimensions) { - isLengthEditVisible = true; - isLengthEdit2Visible = true; - isReversedEnabled = true; - } - - ui->lengthEdit->setVisible( isLengthEditVisible ); - ui->lengthEdit->setEnabled( isLengthEditVisible ); - ui->labelLength->setVisible( isLengthEditVisible ); - ui->checkBoxAlongDirection->setVisible( isLengthEditVisible ); - - ui->offsetEdit->setVisible( isOffsetEditVisible ); - ui->offsetEdit->setEnabled( isOffsetEditVisible ); - ui->labelOffset->setVisible( isOffsetEditVisible ); - - ui->checkBoxMidplane->setEnabled( isMidplaneEnabled ); - ui->checkBoxMidplane->setVisible( isMidplaneVisible ); - - ui->checkBoxReversed->setEnabled( isReversedEnabled ); - - ui->lengthEdit2->setVisible( isLengthEdit2Visible ); - ui->lengthEdit2->setEnabled( isLengthEdit2Visible ); - ui->labelLength2->setVisible( isLengthEdit2Visible ); - - ui->buttonFace->setEnabled( isFaceEditEnabled ); - ui->lineFaceName->setEnabled( isFaceEditEnabled ); - if (!isFaceEditEnabled) { - onButtonFace(false); - } + // set and enable checkboxes + setCheckboxes(static_cast(index), Type::Pad); } void TaskPadParameters::onModeChanged(int index) diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.h b/src/Mod/PartDesign/Gui/TaskPadParameters.h index b5acca2f3e..a3701e1588 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.h @@ -46,14 +46,6 @@ class TaskPadParameters : public TaskExtrudeParameters { Q_OBJECT - enum class Modes { - Dimension, - ToLast, - ToFirst, - ToFace, - TwoDimensions - }; - public: TaskPadParameters(ViewProviderPad *PadView, QWidget *parent = 0, bool newObj=false); ~TaskPadParameters(); diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp index d3bc82b5f2..bdb875db21 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp @@ -81,80 +81,8 @@ void TaskPocketParameters::updateUI(int index) { // update direction combobox fillDirectionCombo(); - - // disable/hide everything unless we are sure we don't need it - // exception: the direction parameters are in any case visible - bool isLengthEditVisible = false; - bool isLengthEdit2Visible = false; - bool isOffsetEditVisible = false; - bool isOffsetEditEnabled = true; - bool isMidplaneEnabled = false; - bool isMidplaneVisible = false; - bool isReversedEnabled = false; - bool isFaceEditEnabled = false; - - Modes mode = static_cast(index); - - if (mode == Modes::Dimension) { - isLengthEditVisible = true; - ui->lengthEdit->selectNumber(); - QMetaObject::invokeMethod(ui->lengthEdit, "setFocus", Qt::QueuedConnection); - isMidplaneVisible = true; - isMidplaneEnabled = true; - // Reverse only makes sense if Midplane is not true - isReversedEnabled = !ui->checkBoxMidplane->isChecked(); - } - else if (mode == Modes::ThroughAll) { - isOffsetEditVisible = true; - isOffsetEditEnabled = false; // offset may have some meaning for through all but it doesn't work - isMidplaneEnabled = true; - isReversedEnabled = !ui->checkBoxMidplane->isChecked(); - } - else if (mode == Modes::ToFirst) { - isOffsetEditVisible = true; - isReversedEnabled = true; // Will change the direction it seeks for its first face? - // It may work not quite as expected but useful if sketch oriented upside-down. - // (may happen in bodies) - // FIXME: Fix probably lies somewhere in IF block on line 125 of FeaturePocket.cpp - } - else if (mode == Modes::ToFace) { - isOffsetEditVisible = true; - isReversedEnabled = true; - isFaceEditEnabled = true; - QMetaObject::invokeMethod(ui->lineFaceName, "setFocus", Qt::QueuedConnection); - // Go into reference selection mode if no face has been selected yet - if (ui->lineFaceName->property("FeatureName").isNull()) - onButtonFace(true); - } - else if (mode == Modes::TwoDimensions) { - isLengthEditVisible = true; - isLengthEdit2Visible = true; - isReversedEnabled = true; - } - - ui->lengthEdit->setVisible( isLengthEditVisible ); - ui->lengthEdit->setEnabled( isLengthEditVisible ); - ui->labelLength->setVisible( isLengthEditVisible ); - ui->checkBoxAlongDirection->setVisible(isLengthEditVisible); - - ui->lengthEdit2->setVisible( isLengthEdit2Visible ); - ui->lengthEdit2->setEnabled( isLengthEdit2Visible ); - ui->labelLength2->setVisible( isLengthEdit2Visible ); - - ui->offsetEdit->setVisible( isOffsetEditVisible ); - ui->offsetEdit->setEnabled( isOffsetEditVisible && isOffsetEditEnabled ); - ui->labelOffset->setVisible( isOffsetEditVisible ); - - ui->checkBoxMidplane->setEnabled( isMidplaneEnabled ); - ui->checkBoxMidplane->setVisible(isMidplaneVisible); - - ui->checkBoxReversed->setEnabled( isReversedEnabled ); - - ui->buttonFace->setEnabled( isFaceEditEnabled ); - ui->lineFaceName->setEnabled( isFaceEditEnabled ); - if (!isFaceEditEnabled) { - onButtonFace(false); - } + // set and enable checkboxes + setCheckboxes(static_cast(index), Type::Pocket); } void TaskPocketParameters::onModeChanged(int index) diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.h b/src/Mod/PartDesign/Gui/TaskPocketParameters.h index 30c1414495..0621ac3056 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.h +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.h @@ -46,14 +46,6 @@ class TaskPocketParameters : public TaskExtrudeParameters { Q_OBJECT - enum class Modes { - Dimension, - ThroughAll, - ToFirst, - ToFace, - TwoDimensions - }; - public: TaskPocketParameters(ViewProviderPocket *PocketView, QWidget *parent = 0, bool newObj=false); ~TaskPocketParameters();