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();