PD: hole change the task panel threaded and model thread checkboxes into a combo/dropdown (#21664)

* PD: hole change threaded and modeled to combo in taskpanel

* Gui: Property editor apply review suggestions
This commit is contained in:
Alfredo Monclus
2025-06-03 13:14:52 -06:00
committed by GitHub
parent 9fabeae75c
commit 69f3dae845
3 changed files with 118 additions and 126 deletions

View File

@@ -76,11 +76,12 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
auto pcHole = getObject<PartDesign::Hole>();
bool isNone = std::string(pcHole->ThreadType.getValueAsString()) == "None";
ui->Threaded->setHidden(isNone);
ui->labelHoleType->setHidden(isNone);
ui->HoleType->setHidden(isNone);
ui->ThreadSize->setHidden(isNone);
ui->labelSize->setHidden(isNone);
ui->Threaded->setChecked(pcHole->Threaded.getValue());
updateHoleTypeCombo();
ui->ThreadType->setCurrentIndex(pcHole->ThreadType.getValue());
ui->ThreadSize->clear();
@@ -158,17 +159,15 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
ui->TaperedAngle->setValue(pcHole->TaperedAngle.getValue());
ui->Reversed->setChecked(pcHole->Reversed.getValue());
bool isThreaded = ui->Threaded->isChecked();
bool isThreaded = pcHole->Threaded.getValue();
bool isModeled = pcHole->ModelThread.getValue();
ui->ThreadGroupBox->setVisible(isThreaded);
ui->ClearanceWidget->setHidden(isNone || isThreaded);
ui->ModelThread->setChecked(isModeled);
ui->UseCustomThreadClearance->setChecked(pcHole->UseCustomThreadClearance.getValue());
ui->CustomThreadClearance->setValue(pcHole->CustomThreadClearance.getValue());
ui->ThreadDepthType->setCurrentIndex(pcHole->ThreadDepthType.getValue());
ui->ThreadDepth->setValue(pcHole->ThreadDepth.getValue());
ui->ModelThread->setEnabled(ui->Threaded->isChecked() && ui->ThreadType->currentIndex() != 0);
ui->CustomClearanceWidget->setVisible(isThreaded && isModeled);
ui->CustomThreadClearance->setEnabled(ui->UseCustomThreadClearance->isChecked());
ui->UpdateView->setChecked(false);
@@ -186,8 +185,8 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
setCutDiagram();
// clang-format off
connect(ui->Threaded, &QCheckBox::clicked,
this, &TaskHoleParameters::threadedChanged);
connect(ui->HoleType, qOverload<int>(&QComboBox::currentIndexChanged),
this, &TaskHoleParameters::holeTypeChanged);
connect(ui->ThreadType, qOverload<int>(&QComboBox::currentIndexChanged),
this, &TaskHoleParameters::threadTypeChanged);
connect(ui->ThreadSize, qOverload<int>(&QComboBox::currentIndexChanged),
@@ -228,8 +227,6 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
this, &TaskHoleParameters::reversedChanged);
connect(ui->TaperedAngle, qOverload<double>(&Gui::QuantitySpinBox::valueChanged),
this, &TaskHoleParameters::taperedAngleChanged);
connect(ui->ModelThread, &QCheckBox::clicked,
this, &TaskHoleParameters::modelThreadChanged);
connect(ui->UpdateView, &QCheckBox::toggled,
this, &TaskHoleParameters::updateViewChanged);
connect(ui->UseCustomThreadClearance, &QCheckBox::toggled,
@@ -266,31 +263,23 @@ TaskHoleParameters::TaskHoleParameters(ViewProviderHole* HoleView, QWidget* pare
TaskHoleParameters::~TaskHoleParameters() = default;
void TaskHoleParameters::threadedChanged()
void TaskHoleParameters::holeTypeChanged(int index)
{
auto pcHole = getObject<PartDesign::Hole>();
bool isChecked = ui->Threaded->isChecked();
pcHole->Threaded.setValue(isChecked);
ui->ThreadGroupBox->setVisible(isChecked);
ui->ClearanceWidget->setHidden(isChecked);
// run modelThreadChanged
// it will handle the visibility of the model options
modelThreadChanged();
recomputeFeature();
}
void TaskHoleParameters::modelThreadChanged()
{
auto pcHole = getObject<PartDesign::Hole>();
bool isThreaded = pcHole->Threaded.getValue();
bool isModeled = isThreaded && ui->ModelThread->isChecked();
if (!isThreaded) {
ui->ModelThread->setChecked(false);
if (index < 0) {
return;
}
auto pcHole = getObject<PartDesign::Hole>();
if (!pcHole) {
return;
}
bool isThreaded = getThreaded();
bool isModeled = getModelThread();
pcHole->Threaded.setValue(isThreaded);
pcHole->ModelThread.setValue(isModeled);
ui->ThreadGroupBox->setVisible(isThreaded);
ui->ClearanceWidget->setHidden(isThreaded);
// update view not active if modeling threads
// this will also ensure that the feature is recomputed.
ui->UpdateView->setVisible(isModeled);
@@ -298,7 +287,7 @@ void TaskHoleParameters::modelThreadChanged()
// conditional enabling of thread modeling options
ui->CustomClearanceWidget->setVisible(isModeled);
ui->CustomThreadClearance->setEnabled(ui->UseCustomThreadClearance->isChecked());
ui->CustomThreadClearance->setEnabled(pcHole->UseCustomThreadClearance.getValue());
ui->ThreadDepthWidget->setVisible(isThreaded && isModeled);
ui->ThreadDepthDimensionWidget->setVisible(
@@ -651,10 +640,11 @@ void TaskHoleParameters::threadTypeChanged(int index)
// Threaded checkbox is meaningless if no thread profile is selected.
bool isNone = std::string(hole->ThreadType.getValueAsString()) == "None";
bool isThreaded = hole->Threaded.getValue();
ui->Threaded->setHidden(isNone);
ui->ThreadGroupBox->setHidden(isNone || !isThreaded);
ui->ThreadSize->setHidden(isNone);
ui->labelSize->setHidden(isNone);
ui->labelHoleType->setHidden(isNone);
ui->HoleType->setHidden(isNone);
ui->ClearanceWidget->setHidden(isNone || isThreaded);
if (TypeClass == QByteArray("None")) {
@@ -799,9 +789,8 @@ void TaskHoleParameters::changedObject(const App::Document&, const App::Property
widget->setDisabled(ro);
};
if (&Prop == &hole->Threaded) {
ui->Threaded->setEnabled(true);
updateCheckable(ui->Threaded, hole->Threaded.getValue());
if (&Prop == &hole->Threaded || &Prop == &hole->ModelThread) {
updateHoleTypeCombo();
}
else if (&Prop == &hole->ThreadType) {
ui->ThreadType->setEnabled(true);
@@ -890,10 +879,6 @@ void TaskHoleParameters::changedObject(const App::Document&, const App::Property
ui->TaperedAngle->setEnabled(true);
updateSpinBox(ui->TaperedAngle, hole->TaperedAngle.getValue());
}
else if (&Prop == &hole->ModelThread) {
ui->ModelThread->setEnabled(true);
updateCheckable(ui->ModelThread, hole->ModelThread.getValue());
}
else if (&Prop == &hole->UseCustomThreadClearance) {
ui->UseCustomThreadClearance->setEnabled(true);
updateCheckable(ui->UseCustomThreadClearance, hole->UseCustomThreadClearance.getValue());
@@ -915,6 +900,24 @@ void TaskHoleParameters::changedObject(const App::Document&, const App::Property
}
}
void TaskHoleParameters::updateHoleTypeCombo()
{
auto hole = getObject<PartDesign::Hole>();
if (!hole) {
return;
}
[[maybe_unused]] QSignalBlocker blocker(ui->HoleType);
if (hole->Threaded.getValue()) {
if (hole->ModelThread.getValue()) {
ui->HoleType->setCurrentIndex(ModeledThread);
} else {
ui->HoleType->setCurrentIndex(TapDrill);
}
} else {
ui->HoleType->setCurrentIndex(Clearance);
}
}
void TaskHoleParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
Q_UNUSED(msg)
@@ -922,7 +925,12 @@ void TaskHoleParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
bool TaskHoleParameters::getThreaded() const
{
return ui->Threaded->isChecked();
return ui->HoleType->currentIndex() != Clearance;
}
bool TaskHoleParameters::getModelThread() const
{
return ui->HoleType->currentIndex() == ModeledThread;
}
long TaskHoleParameters::getThreadType() const
@@ -1047,11 +1055,6 @@ double TaskHoleParameters::getCustomThreadClearance() const
return ui->CustomThreadClearance->value().getValue();
}
bool TaskHoleParameters::getModelThread() const
{
return ui->ModelThread->isChecked();
}
long TaskHoleParameters::getThreadDepthType() const
{
return ui->ThreadDepthType->currentIndex();