[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
This commit is contained in:
Uwe
2022-07-17 15:47:09 +02:00
parent 35f75064a0
commit e4dfc42f33
5 changed files with 44 additions and 15 deletions

View File

@@ -220,7 +220,7 @@ void TaskExtrudeParameters::connectSlots()
this, &TaskExtrudeParameters::onReversedChanged);
connect(ui->changeMode, qOverload<int>(&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"