diff --git a/src/Gui/Dialogs/DlgAddPropertyVarSet.cpp b/src/Gui/Dialogs/DlgAddPropertyVarSet.cpp index 78f67435fb..d62b3c18dd 100644 --- a/src/Gui/Dialogs/DlgAddPropertyVarSet.cpp +++ b/src/Gui/Dialogs/DlgAddPropertyVarSet.cpp @@ -129,11 +129,26 @@ const std::string DlgAddPropertyVarSet::GroupBase = "Base"; * situation. */ +DlgAddPropertyVarSet::DlgAddPropertyVarSet(QWidget* parent, + App::PropertyContainer* container) + : DlgAddPropertyVarSet(parent, container, nullptr) +{ +} + DlgAddPropertyVarSet::DlgAddPropertyVarSet(QWidget* parent, ViewProviderVarSet* viewProvider) + : DlgAddPropertyVarSet(parent, + viewProvider ? viewProvider->getObject() : nullptr, + viewProvider) +{ +} + +DlgAddPropertyVarSet::DlgAddPropertyVarSet(QWidget* parent, + App::PropertyContainer* container, + ViewProviderVarSet* viewProvider) : QDialog(parent), - varSet(viewProvider->getObject()), + container(container), ui(new Ui_DlgAddPropertyVarSet), comboBoxGroup(this), completerType(this), @@ -194,14 +209,14 @@ void DlgAddPropertyVarSet::setWidgetForLabel(const char* labelName, QWidget* wid } void DlgAddPropertyVarSet::populateGroup(EditFinishedComboBox& comboBox, - const App::DocumentObject* varSet) + const App::PropertyContainer* container) { std::vector properties; - varSet->getPropertyList(properties); + container->getPropertyList(properties); std::unordered_set groupNames; for (const auto* prop : properties) { - const char* groupName = varSet->getPropertyGroup(prop); + const char* groupName = container->getPropertyGroup(prop); groupNames.insert(groupName ? groupName : GroupBase); } @@ -231,7 +246,7 @@ void DlgAddPropertyVarSet::initializeGroup() comboBoxGroup.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setWidgetForLabel("labelGroup", &comboBoxGroup, layout()); - populateGroup(comboBoxGroup, varSet); + populateGroup(comboBoxGroup, container); connComboBoxGroup = connect(&comboBoxGroup, &EditFinishedComboBox::editFinished, this, &DlgAddPropertyVarSet::onGroupFinished); @@ -416,7 +431,7 @@ void DlgAddPropertyVarSet::createEditorForType(const Base::Type& type) std::unique_ptr prop( static_cast(propInstance), [](App::Property* p) { delete p; }); - prop->setContainer(varSet); + prop->setContainer(container); propertyItem.reset(createPropertyItem(prop.get())); @@ -462,8 +477,10 @@ void DlgAddPropertyVarSet::initializeWidgets(ViewProviderVarSet* viewProvider) initializeTypes(); initializeValue(); - connect(this, &QDialog::finished, - this, [viewProvider](int result) { viewProvider->onFinished(result); }); + if (viewProvider) { + connect(this, &QDialog::finished, + this, [viewProvider](int result) { viewProvider->onFinished(result); }); + } connLineEditNameTextChanged = connect(ui->lineEditName, &QLineEdit::textChanged, this, &DlgAddPropertyVarSet::onNameChanged); @@ -478,9 +495,9 @@ void DlgAddPropertyVarSet::initializeWidgets(ViewProviderVarSet* viewProvider) bool DlgAddPropertyVarSet::propertyExists(const std::string& name) { - App::Property* prop = varSet->getPropertyByName(name.c_str()); - return prop && prop->getContainer() == varSet && - !(propertyItem && propertyItem->getFirstProperty() == prop); + App::Property* prop = container->getPropertyByName(name.c_str()); + return prop && prop->getContainer() == container && + !(propertyItem && propertyItem->getFirstProperty() == prop); } bool DlgAddPropertyVarSet::isNameValid() @@ -658,7 +675,7 @@ bool DlgAddPropertyVarSet::clearBoundProperty() if (App::Property* prop = propertyItem->getFirstProperty()) { propertyItem->unbind(); propertyItem->removeProperty(prop); - varSet->removeDynamicProperty(prop->getName()); + container->removeDynamicProperty(prop->getName()); closeTransaction(TransactionOption::Abort); } return valueNeedsReset; @@ -705,7 +722,7 @@ void DlgAddPropertyVarSet::onGroupFinished() std::string doc = ui->lineEditToolTip->text().toStdString(); if (App::Property* prop = propertyItem->getFirstProperty(); prop && prop->getGroup() != group) { - varSet->changeDynamicProperty(prop, group.c_str(), doc.c_str()); + container->changeDynamicProperty(prop, group.c_str(), doc.c_str()); } } @@ -790,14 +807,14 @@ App::Property* DlgAddPropertyVarSet::createProperty() std::string doc = ui->lineEditToolTip->text().toStdString(); try { - return varSet->addDynamicProperty(type.c_str(), name.c_str(), + return container->addDynamicProperty(type.c_str(), name.c_str(), group.c_str(), doc.c_str()); } catch (Base::Exception& e) { e.reportException(); critical(QObject::tr("Add property"), QObject::tr("Failed to add property to '%1': %2").arg( - QString::fromLatin1(varSet->getFullName().c_str()), + QString::fromLatin1(container->getFullName().c_str()), QString::fromUtf8(e.what()))); return nullptr; } @@ -844,13 +861,16 @@ void DlgAddPropertyVarSet::addDocumentation() { return; } - varSet->changeDynamicProperty(prop, group.c_str(), doc.c_str()); + container->changeDynamicProperty(prop, group.c_str(), doc.c_str()); } void DlgAddPropertyVarSet::accept() { addDocumentation(); - varSet->ExpressionEngine.execute(); + auto* object = freecad_cast(container); + if (object) { + object->ExpressionEngine.execute(); + } closeTransaction(TransactionOption::Commit); std::string group = comboBoxGroup.currentText().toStdString(); std::string type = ui->comboBoxType->currentText().toStdString(); diff --git a/src/Gui/Dialogs/DlgAddPropertyVarSet.h b/src/Gui/Dialogs/DlgAddPropertyVarSet.h index 7978f5da77..60b1177af8 100644 --- a/src/Gui/Dialogs/DlgAddPropertyVarSet.h +++ b/src/Gui/Dialogs/DlgAddPropertyVarSet.h @@ -32,7 +32,7 @@ #include -#include +#include #include "propertyeditor/PropertyItem.h" @@ -75,6 +75,7 @@ public: public: DlgAddPropertyVarSet(QWidget* parent, ViewProviderVarSet* viewProvider); + DlgAddPropertyVarSet(QWidget* parent, App::PropertyContainer* container); DlgAddPropertyVarSet(const DlgAddPropertyVarSet&) = delete; DlgAddPropertyVarSet(DlgAddPropertyVarSet&&) = delete; @@ -86,7 +87,8 @@ public: void changeEvent(QEvent* e) override; void accept() override; void reject() override; - static void populateGroup(EditFinishedComboBox& comboBox, const App::DocumentObject* varSet); + static void populateGroup(EditFinishedComboBox& comboBox, + const App::PropertyContainer* container); static void setWidgetForLabel(const char* labelName, QWidget* widget, QLayout* layout); public Q_SLOTS: @@ -104,6 +106,9 @@ private: Type }; + DlgAddPropertyVarSet(QWidget* parent, App::PropertyContainer* container, + ViewProviderVarSet* viewProvider); + void initializeGroup(); std::vector getSupportedTypes(); @@ -156,7 +161,7 @@ private: static int findLabelRow(const char* labelName, QFormLayout* layout); private: - App::VarSet* varSet; + App::PropertyContainer* container; std::unique_ptr ui; EditFinishedComboBox comboBoxGroup;