From 8113f1233768cb6c8e51910fbc5cacdd70676876 Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Tue, 26 Jul 2022 14:09:59 +0530 Subject: [PATCH] [PD] Set revolution taskview items based on method --- .../Gui/TaskRevolutionParameters.cpp | 68 ++++++++++++++++++- .../PartDesign/Gui/TaskRevolutionParameters.h | 3 + .../Gui/TaskRevolutionParameters.ui | 2 +- 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp index 0a1e806952..6db855f57f 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.cpp @@ -230,6 +230,71 @@ void TaskRevolutionParameters::addAxisToCombo(App::DocumentObject* linkObj, lnk.setValue(linkObj,std::vector(1,linkSubname)); } +void TaskRevolutionParameters::setCheckboxes(PartDesign::Revolution::RevolMethod mode) +{ + // disable/hide everything unless we are sure we don't need it + // exception: the direction parameters are in any case visible + bool isRevolveAngleVisible = false; + bool isRevolveAngle2Visible = false; + bool isMidplaneEnabled = false; + bool isMidplaneVisible = false; + bool isReversedEnabled = false; + bool isFaceEditEnabled = false; + + if (mode == PartDesign::Revolution::RevolMethod::Dimension) { + isRevolveAngleVisible = true; + ui->revolveAngle->selectNumber(); + QMetaObject::invokeMethod(ui->revolveAngle, "setFocus", Qt::QueuedConnection); + isMidplaneVisible = true; + isMidplaneEnabled = true; + // Reverse only makes sense if Midplane is not true + isReversedEnabled = !ui->checkBoxMidplane->isChecked(); + } + else if (mode == PartDesign::Revolution::RevolMethod::ThroughAll && isGroove) { + isMidplaneEnabled = true; + isMidplaneVisible = true; + isReversedEnabled = !ui->checkBoxMidplane->isChecked(); + } + else if (mode == PartDesign::Revolution::RevolMethod::ToLast && !isGroove) { + isReversedEnabled = true; + } + else if (mode == PartDesign::Revolution::RevolMethod::ToFirst) { + isReversedEnabled = true; + } + else if (mode == PartDesign::Revolution::RevolMethod::ToFace) { + 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()) + ui->buttonFace->setChecked(true); + } + else if (mode == PartDesign::Revolution::RevolMethod::TwoDimensions) { + isRevolveAngleVisible = true; + isRevolveAngle2Visible = true; + isReversedEnabled = true; + } + + ui->revolveAngle->setVisible(isRevolveAngleVisible); + ui->revolveAngle->setEnabled(isRevolveAngleVisible); + ui->labelAngle->setVisible(isRevolveAngleVisible); + + ui->revolveAngle2->setVisible(isRevolveAngle2Visible); + ui->revolveAngle2->setEnabled(isRevolveAngle2Visible); + ui->labelAngle2->setVisible(isRevolveAngle2Visible); + + ui->checkBoxMidplane->setEnabled(isMidplaneEnabled); + ui->checkBoxMidplane->setVisible(isMidplaneVisible); + + ui->checkBoxReversed->setEnabled(isReversedEnabled); + + ui->buttonFace->setEnabled(isFaceEditEnabled); + ui->lineFaceName->setEnabled(isFaceEditEnabled); + if (!isFaceEditEnabled) { + ui->buttonFace->setChecked(false); + } +} + void TaskRevolutionParameters::connectSignals() { connect(ui->revolveAngle, qOverload(&Gui::QuantitySpinBox::valueChanged), @@ -252,12 +317,13 @@ void TaskRevolutionParameters::connectSignals() this, &TaskRevolutionParameters::onFaceName); } -void TaskRevolutionParameters::updateUI(int /*index*/) +void TaskRevolutionParameters::updateUI(int index) { if (blockUpdate) return; Base::StateLocker lock(blockUpdate, true); fillAxisCombo(); + setCheckboxes(static_cast(index)); } void TaskRevolutionParameters::onSelectionChanged(const Gui::SelectionChanges& msg) diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h index fbb0dde990..c00d7819b2 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.h @@ -23,6 +23,8 @@ #ifndef GUI_TASKVIEW_TaskRevolutionParameters_H #define GUI_TASKVIEW_TaskRevolutionParameters_H +#include +#include #include "TaskSketchBasedParameters.h" #include "ViewProviderRevolution.h" @@ -77,6 +79,7 @@ protected: bool getReversed() const; QString getFaceName() const; void setupDialog(void); + void setCheckboxes(PartDesign::Revolution::RevolMethod mode); //mirrors of revolution's or groove's properties //should have been done by inheriting revolution and groove from common class... diff --git a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui index 595a24e6c2..d9c57167aa 100644 --- a/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskRevolutionParameters.ui @@ -82,7 +82,7 @@ - + Angle: