From ff71a81102e1d49eb92e1ea196d6de9385ad39d8 Mon Sep 17 00:00:00 2001 From: Pieter Hijma Date: Wed, 3 Sep 2025 11:08:55 +0200 Subject: [PATCH] Gui: Improve adding multiple properties This is based on a review of the DWG suggesting to remove the checkbox for adding multiple properties and change the Ok button to an Add button. To make the impact of an extra click to cancel adding properties, the Cancel button is the default right after adding a property (which already disabled the Ok/Add button). --- src/Gui/Dialogs/DlgAddProperty.cpp | 44 ++++++++++++++++++------------ src/Gui/Dialogs/DlgAddProperty.h | 2 +- src/Gui/Dialogs/DlgAddProperty.ui | 17 ++++-------- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/Gui/Dialogs/DlgAddProperty.cpp b/src/Gui/Dialogs/DlgAddProperty.cpp index 8f0ae2b1f6..fe7a827188 100644 --- a/src/Gui/Dialogs/DlgAddProperty.cpp +++ b/src/Gui/Dialogs/DlgAddProperty.cpp @@ -373,7 +373,7 @@ void DlgAddProperty::addEditor(PropertyItem* propertyItem) setWidgetForLabel("labelValue", editor.get(), layout()); QWidget::setTabOrder(ui->comboBoxType, editor.get()); - QWidget::setTabOrder(editor.get(), ui->checkBoxAdd); + QWidget::setTabOrder(editor.get(), ui->lineEditToolTip); removeSelectionEditor(); } @@ -477,10 +477,19 @@ void DlgAddProperty::setTitle() setWindowTitle(tr("Add Property")); } -void DlgAddProperty::setOkEnabled(bool enabled) +void DlgAddProperty::setAddEnabled(bool enabled) { - QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); - okButton->setEnabled(enabled); + QPushButton *addButton = ui->buttonBox->button(QDialogButtonBox::Ok); + QPushButton *cancelButton = ui->buttonBox->button(QDialogButtonBox::Cancel); + if (enabled) { + cancelButton->setDefault(false); + addButton->setDefault(true); + } + else { + cancelButton->setDefault(true); + addButton->setDefault(false); + } + addButton->setEnabled(enabled); } void DlgAddProperty::initializeWidgets(ViewProviderVarSet* viewProvider) @@ -497,7 +506,9 @@ void DlgAddProperty::initializeWidgets(ViewProviderVarSet* viewProvider) this, &DlgAddProperty::onNameChanged); setTitle(); - setOkEnabled(false); + QPushButton *addButton = ui->buttonBox->button(QDialogButtonBox::Ok); + addButton->setText(tr("Add")); + setAddEnabled(false); ui->lineEditName->setFocus(); @@ -593,7 +604,7 @@ void DlgAddProperty::removeEditor() placeholder->setMinimumHeight(comboBoxGroup.height()); setWidgetForLabel("labelValue", placeholder, layout()); - QWidget::setTabOrder(ui->comboBoxType, ui->checkBoxAdd); + QWidget::setTabOrder(ui->comboBoxType, ui->lineEditToolTip); editor = nullptr; } @@ -735,7 +746,7 @@ void DlgAddProperty::onNameChanged([[maybe_unused]]const QString& text) propertyItem = nullptr; } - setOkEnabled(areFieldsValid()); + setAddEnabled(areFieldsValid()); showStatusMessage(); } @@ -750,7 +761,7 @@ void DlgAddProperty::onGroupFinished() } } - setOkEnabled(areFieldsValid()); + setAddEnabled(areFieldsValid()); showStatusMessage(); } @@ -765,7 +776,7 @@ void DlgAddProperty::onTypeChanged([[maybe_unused]] const QString& text) } // nothing if both name and type are invalid - setOkEnabled(areFieldsValid()); + setAddEnabled(areFieldsValid()); showStatusMessage(); } @@ -862,7 +873,7 @@ void DlgAddProperty::clearFields() } ui->lineEditToolTip->clear(); initializeValue(); - setOkEnabled(false); + setAddEnabled(false); } void DlgAddProperty::addDocumentation() { @@ -903,14 +914,11 @@ void DlgAddProperty::accept() paramGroup->SetASCII("NewPropertyType", type.c_str()); paramGroup->SetASCII("NewPropertyGroup", group.c_str()); - if (ui->checkBoxAdd->isChecked()) { - clearFields(); - ui->lineEditName->setFocus(); - } - else { - // we are done, close the dialog - QDialog::accept(); - } + clearFields(); + ui->lineEditName->setFocus(); + + // Note that we don't call QDialog::accept() here to keep the dialog + // open for adding more properties. } void DlgAddProperty::reject() diff --git a/src/Gui/Dialogs/DlgAddProperty.h b/src/Gui/Dialogs/DlgAddProperty.h index 1ac0a598cc..c2e0de1b69 100644 --- a/src/Gui/Dialogs/DlgAddProperty.h +++ b/src/Gui/Dialogs/DlgAddProperty.h @@ -129,7 +129,7 @@ private: void initializeValue(); void setTitle(); - void setOkEnabled(bool enabled); + void setAddEnabled(bool enabled); void initializeWidgets(ViewProviderVarSet* viewProvider); bool isDocument() const; diff --git a/src/Gui/Dialogs/DlgAddProperty.ui b/src/Gui/Dialogs/DlgAddProperty.ui index 57e006e93a..a0c00a7d8e 100644 --- a/src/Gui/Dialogs/DlgAddProperty.ui +++ b/src/Gui/Dialogs/DlgAddProperty.ui @@ -7,7 +7,7 @@ 0 0 418 - 293 + 258 @@ -52,31 +52,24 @@ - - - - Add another - - - - + Tooltip - + - + - + Qt::Orientation::Horizontal