diff --git a/src/Mod/Part/Gui/PatternParametersWidget.cpp b/src/Mod/Part/Gui/PatternParametersWidget.cpp index 7b4a277f0c..be6eaf29e5 100644 --- a/src/Mod/Part/Gui/PatternParametersWidget.cpp +++ b/src/Mod/Part/Gui/PatternParametersWidget.cpp @@ -75,6 +75,8 @@ void PatternParametersWidget::setupUiElements() ParameterGrp::handle hPart = App::GetApplication().GetParameterGroupByPath( "User parameter:BaseApp/Preferences/Mod/Part"); ui->addSpacingButton->setVisible(hPart->GetBool("ExperimentalFeatures", false)); + + ui->enableCheckbox->setVisible(false); } void PatternParametersWidget::connectSignals() @@ -97,6 +99,11 @@ void PatternParametersWidget::connectSignals() connect(ui->addSpacingButton, &QToolButton::clicked, this, &PatternParametersWidget::onAddSpacingButtonClicked); + connect(ui->groupBox, &QGroupBox::toggled, this, &PatternParametersWidget::onGroupBoxToggled); + connect(ui->enableCheckbox, + &QCheckBox::toggled, + this, + &PatternParametersWidget::onEnableCheckBoxToggled); // Note: Connections for dynamic rows are done in addSpacingRow() } @@ -137,6 +144,10 @@ void PatternParametersWidget::bindProperties(App::PropertyLinkSub* directionProp ui->spinOccurrences->setMinimum(m_occurrencesProp->getMinimum()); ui->spinOccurrences->blockSignals(false); + if (ui->groupBox->isCheckable()) { + setChecked(m_occurrencesProp->getValue() > 1); + } + // Initial UI update from properties updateUI(); } @@ -177,6 +188,39 @@ void PatternParametersWidget::updateUI() adaptVisibilityToMode(); } +void PatternParametersWidget::onGroupBoxToggled(bool checked) +{ + if (blockUpdate || !m_occurrencesProp) { + return; + } + + if (!checked) { + // When unchecked, the pattern in this direction is disabled. + // Set occurrences to 1, which effectively removes the pattern effect. + if (m_occurrencesProp->getValue() != 1) { + ui->spinOccurrences->setValue(1); + } + + ui->groupBox->setVisible(false); + ui->enableCheckbox->setVisible(true); + ui->enableCheckbox->setChecked(false); + } +} + +void PatternParametersWidget::onEnableCheckBoxToggled(bool checked) +{ + if (blockUpdate || !m_occurrencesProp) { + return; + } + + if (checked) { + // When unchecked, the pattern in this direction is disabled. + // Set occurrences to 1, which effectively removes the pattern effect. + ui->groupBox->setChecked(true); + ui->groupBox->setVisible(true); + ui->enableCheckbox->setVisible(false); + } +} void PatternParametersWidget::adaptVisibilityToMode() { @@ -216,6 +260,7 @@ void PatternParametersWidget::setCheckable(bool on) void PatternParametersWidget::setChecked(bool on) { ui->groupBox->setChecked(on); + ui->enableCheckbox->setChecked(on); } // --- Slots --- @@ -488,3 +533,4 @@ void PatternParametersWidget::applyQuantitySpinboxes() const } //#include "moc_PatternParametersWidget.cpp" + diff --git a/src/Mod/Part/Gui/PatternParametersWidget.h b/src/Mod/Part/Gui/PatternParametersWidget.h index d9ef3d8fd3..e22ce4edca 100644 --- a/src/Mod/Part/Gui/PatternParametersWidget.h +++ b/src/Mod/Part/Gui/PatternParametersWidget.h @@ -168,6 +168,9 @@ namespace PartGui { void onOffsetChanged(double value); void onOccurrencesChanged(unsigned int value); + void onGroupBoxToggled(bool checked); + void onEnableCheckBoxToggled(bool checked); + // Slots for dynamic spacing void onAddSpacingButtonClicked(); void onDynamicSpacingChanged(); // Simplified slot @@ -210,4 +213,5 @@ namespace PartGui { } // namespace PartGui -#endif // PARTGUI_PATTERNPARAMETERSWIDGET_H \ No newline at end of file + +#endif // PARTGUI_PATTERNPARAMETERSWIDGET_H diff --git a/src/Mod/Part/Gui/PatternParametersWidget.ui b/src/Mod/Part/Gui/PatternParametersWidget.ui index 3059a2ae8c..654f69b89d 100644 --- a/src/Mod/Part/Gui/PatternParametersWidget.ui +++ b/src/Mod/Part/Gui/PatternParametersWidget.ui @@ -23,6 +23,13 @@ 0 + + + + Direction 2 + + + @@ -191,3 +198,4 @@ + diff --git a/src/Mod/PartDesign/Gui/TaskPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskPatternParameters.cpp index f713955d27..7e24ab8cfa 100644 --- a/src/Mod/PartDesign/Gui/TaskPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskPatternParameters.cpp @@ -110,6 +110,7 @@ void TaskPatternParameters::setupParameterUI(QWidget* widget) connect(parametersWidget2, &PartGui::PatternParametersWidget::parametersChanged, this, &TaskPatternParameters::onParameterWidgetParametersChanged); parametersWidget2->setTitle(tr("Direction 2")); + parametersWidget2->setCheckable(true); } bindProperties();