diff --git a/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp b/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp index 754326ceab..3db5735f4b 100644 --- a/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp @@ -68,6 +68,9 @@ TaskDressUpParameters::TaskDressUpParameters(ViewProviderDressUp *DressUpView, b , allowFaces(selectFaces) , allowEdges(selectEdges) { + // remember initial transaction ID + App::GetApplication().getActiveTransaction(&transactionID); + selectionMode = none; showObject(); } @@ -79,10 +82,16 @@ TaskDressUpParameters::~TaskDressUpParameters() } void TaskDressUpParameters::setupTransaction() { + if(!DressUpView) + return; + int tid = 0; const char *name = App::GetApplication().getActiveTransaction(&tid); + if(tid && tid == transactionID) + return; + std::string n("Edit "); - n += DressUpView->getObject()->Label.getValue(); + n += DressUpView->getObject()->getNameInDocument(); if(!name || n != name) App::GetApplication().setActiveTransaction(n.c_str()); } @@ -352,6 +361,11 @@ bool TaskDlgDressUpParameters::accept() bool TaskDlgDressUpParameters::reject() { getDressUpView()->highlightReferences(false); + + auto editDoc = Gui::Application::Instance->editDocument(); + if(editDoc && parameter->getTransactionID()) + editDoc->getDocument()->undo(parameter->getTransactionID()); + return TaskDlgFeatureParameters::reject(); } diff --git a/src/Mod/PartDesign/Gui/TaskDressUpParameters.h b/src/Mod/PartDesign/Gui/TaskDressUpParameters.h index a5d0d48150..dbc8977b6f 100644 --- a/src/Mod/PartDesign/Gui/TaskDressUpParameters.h +++ b/src/Mod/PartDesign/Gui/TaskDressUpParameters.h @@ -59,6 +59,10 @@ public: /// Apply the changes made to the object to it virtual void apply() {}; + int getTransactionID() const { + return transactionID; + } + protected Q_SLOTS: void onButtonRefAdd(const bool checked); void onButtonRefRemove(const bool checked); diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index a5e413ae51..45763ecec3 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -80,6 +80,9 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr Gui::Document* doc = TransformedView->getDocument(); this->attachDocument(doc); } + + // remember initial transaction ID + App::GetApplication().getActiveTransaction(&transactionID); } TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask) @@ -168,10 +171,17 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms } void TaskTransformedParameters::setupTransaction() { + auto obj = getObject(); + if(!obj) + return; + int tid = 0; const char *name = App::GetApplication().getActiveTransaction(&tid); + if(tid && tid == transactionID) + return; + std::string n("Edit "); - n += getObject()->Label.getValue(); + n += obj->getNameInDocument(); if(!name || n != name) App::GetApplication().setActiveTransaction(n.c_str()); } @@ -418,6 +428,10 @@ bool TaskDlgTransformedParameters::reject() // ensure that we are not in selection mode parameter->exitSelectionMode(); + auto editDoc = Gui::Application::Instance->editDocument(); + if(editDoc && parameter->getTransactionID()) + editDoc->getDocument()->undo(parameter->getTransactionID()); + return TaskDlgFeatureParameters::reject (); } diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index c93fa05034..5416605bf9 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -143,6 +143,11 @@ public: virtual void apply() = 0; void setupTransaction(); + + int getTransactionID() const { + return transactionID; + } + protected Q_SLOTS: /** * Returns the base transformation view provider @@ -205,6 +210,7 @@ protected: protected: QWidget* proxy; ViewProviderTransformed *TransformedView; + int transactionID = 0; enum selectionModes { none, addFeature, removeFeature, reference }; selectionModes selectionMode;