From e4dfc42f33af5742ccec03effaf7fa662525d694 Mon Sep 17 00:00:00 2001 From: Uwe Date: Sun, 17 Jul 2022 15:47:09 +0200 Subject: [PATCH] [PD] improve face selection for Pad/Pocket - this PR extends PR #7191 as described in this forum thread: https://forum.freecadweb.org/viewtopic.php?f=3&t=70327 --- .../PartDesign/Gui/TaskExtrudeParameters.cpp | 25 ++++++++++++------- .../PartDesign/Gui/TaskExtrudeParameters.h | 3 ++- src/Mod/PartDesign/Gui/TaskPadParameters.cpp | 4 +++ .../PartDesign/Gui/TaskPadPocketParameters.ui | 23 +++++++++++++---- .../PartDesign/Gui/TaskPocketParameters.cpp | 4 +++ 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp index 035d3f65d6..fdfb575470 100644 --- a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.cpp @@ -220,7 +220,7 @@ void TaskExtrudeParameters::connectSlots() this, &TaskExtrudeParameters::onReversedChanged); connect(ui->changeMode, qOverload(&QComboBox::currentIndexChanged), this, &TaskExtrudeParameters::onModeChanged); - connect(ui->buttonFace, &QPushButton::clicked, + connect(ui->buttonFace, &QPushButton::toggled, this, &TaskExtrudeParameters::onButtonFace); connect(ui->lineFaceName, &QLineEdit::textEdited, this, &TaskExtrudeParameters::onFaceName); @@ -255,7 +255,7 @@ void TaskExtrudeParameters::onSelectionChanged(const Gui::SelectionChanges& msg) ui->lineFaceName->setProperty("FeatureName", QByteArray(msg.pObjectName)); ui->lineFaceName->setProperty("FaceName", QByteArray(msg.pSubName)); // Turn off reference selection mode - onButtonFace(false); + ui->buttonFace->setChecked(false); } else { clearFaceName(); @@ -468,7 +468,7 @@ void TaskExtrudeParameters::setCheckboxes(Modes mode, Type type) 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); + ui->buttonFace->setChecked(true); } else if (mode == Modes::TwoDimensions) { isLengthEditVisible = true; @@ -507,7 +507,7 @@ void TaskExtrudeParameters::setCheckboxes(Modes mode, Type type) ui->buttonFace->setEnabled(isFaceEditEnabled); ui->lineFaceName->setEnabled(isFaceEditEnabled); if (!isFaceEditEnabled) { - onButtonFace(false); + ui->buttonFace->setChecked(false); } } @@ -681,16 +681,18 @@ void TaskExtrudeParameters::getReferenceAxis(App::DocumentObject*& obj, std::vec } } -void TaskExtrudeParameters::onButtonFace(const bool pressed) +void TaskExtrudeParameters::onButtonFace(const bool checked) { + if (!checked && ui->lineFaceName->text().isEmpty()) + ui->lineFaceName->setPlaceholderText(tr("No face selected")); + else if (checked && ui->lineFaceName->text().isEmpty()) + handleLineFaceName(); // sets placeholder text + // to distinguish that this is the direction selection selectionFace = true; // only faces are allowed - TaskSketchBasedParameters::onSelectReference(pressed ? AllowSelection::FACE : AllowSelection::NONE); - - // Update button if onButtonFace() is called explicitly - ui->buttonFace->setChecked(pressed); + TaskSketchBasedParameters::onSelectReference(checked ? AllowSelection::FACE : AllowSelection::NONE); } void TaskExtrudeParameters::onFaceName(const QString& text) @@ -890,4 +892,9 @@ void TaskExtrudeParameters::translateModeList(int) // implement in sub-class } +void TaskExtrudeParameters::handleLineFaceName(void) +{ + ui->lineFaceName->setPlaceholderText(tr("Click on a face in the model")); +} + #include "moc_TaskExtrudeParameters.cpp" diff --git a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h index d3ca39e3ef..658529301b 100644 --- a/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h +++ b/src/Mod/PartDesign/Gui/TaskExtrudeParameters.h @@ -90,7 +90,7 @@ protected Q_SLOTS: void onZDirectionEditChanged(double); void onMidplaneChanged(bool); void onReversedChanged(bool); - void onButtonFace(const bool pressed = true); + void onButtonFace(const bool checked = true); void onFaceName(const QString& text); virtual void onModeChanged(int); @@ -118,6 +118,7 @@ protected: virtual void updateUI(int index); void updateDirectionEdits(void); void setDirectionMode(int index); + void handleLineFaceName(void); private: void tryRecomputeFeature(); diff --git a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp index 4189144e15..7592f6398c 100644 --- a/src/Mod/PartDesign/Gui/TaskPadParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPadParameters.cpp @@ -104,6 +104,10 @@ void TaskPadParameters::onModeChanged(int index) break; case Modes::ToFace: pcPad->Type.setValue("UpToFace"); + if (ui->lineFaceName->text().isEmpty()) { + ui->buttonFace->setChecked(true); + handleLineFaceName(); // sets placeholder text + } break; case Modes::TwoDimensions: pcPad->Type.setValue("TwoLengths"); diff --git a/src/Mod/PartDesign/Gui/TaskPadPocketParameters.ui b/src/Mod/PartDesign/Gui/TaskPadPocketParameters.ui index c66becbecd..b3ebfc164e 100644 --- a/src/Mod/PartDesign/Gui/TaskPadPocketParameters.ui +++ b/src/Mod/PartDesign/Gui/TaskPadPocketParameters.ui @@ -141,7 +141,7 @@ the sketch plane's normal vector will be used - + x-component of direction vector @@ -224,7 +224,7 @@ the sketch plane's normal vector will be used - + @@ -336,14 +336,27 @@ measured along the specified direction - + + + + 0 + 22 + + - Face + Select face + + + true - + + + true + + diff --git a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp index 6cbe8cb40b..c787e385be 100644 --- a/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPocketParameters.cpp @@ -114,6 +114,10 @@ void TaskPocketParameters::onModeChanged(int index) pcPocket->Type.setValue("UpToFace"); pcPocket->Length.setValue(0.0); ui->lengthEdit->setValue(0.0); + if (ui->lineFaceName->text().isEmpty()) { + ui->buttonFace->setChecked(true); + handleLineFaceName(); // sets placeholder text + } break; case Modes::TwoDimensions: oldLength = pcPocket->Length.getValue();