From 0e81e98a9dda754c516e57ad9bdf8d435c3a4c01 Mon Sep 17 00:00:00 2001 From: vsv Date: Thu, 6 Jun 2019 12:47:22 +0300 Subject: [PATCH] Provide reopening of transaction on resuming of Group operation --- src/ModuleBase/ModuleBase_OperationFeature.cpp | 11 ++++++++++- src/ModuleBase/ModuleBase_OperationFeature.h | 10 ++++++++++ src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/ModuleBase/ModuleBase_OperationFeature.cpp b/src/ModuleBase/ModuleBase_OperationFeature.cpp index 47344a7a3..aa2d464fc 100644 --- a/src/ModuleBase/ModuleBase_OperationFeature.cpp +++ b/src/ModuleBase/ModuleBase_OperationFeature.cpp @@ -59,7 +59,8 @@ #endif ModuleBase_OperationFeature::ModuleBase_OperationFeature(const QString& theId, QObject* theParent) -: ModuleBase_Operation(theId, theParent), myIsEditing(false), myNeedToBeAborted(false) +: ModuleBase_Operation(theId, theParent), myIsEditing(false), myNeedToBeAborted(false), +myRestartTransactionOnResume(false) { } @@ -523,3 +524,11 @@ void ModuleBase_OperationFeature::setPropertyPanel(ModuleBase_IPropertyPanel* th theProp->setFocusOnOkButton(); } } + +void ModuleBase_OperationFeature::resumeOperation() +{ + if (myRestartTransactionOnResume) { + ModelAPI_Session::get()->startOperation(this->id().toStdString(), true); + myRestartTransactionOnResume = false; + } +} diff --git a/src/ModuleBase/ModuleBase_OperationFeature.h b/src/ModuleBase/ModuleBase_OperationFeature.h index 4eaceb42f..14ce24a86 100644 --- a/src/ModuleBase/ModuleBase_OperationFeature.h +++ b/src/ModuleBase/ModuleBase_OperationFeature.h @@ -147,6 +147,11 @@ Q_OBJECT /// \return custom validity state (it is almost always true) bool isNeedToBeAborted() const { return myNeedToBeAborted; } + /// Call this function on launch of a nested operation + /// when transaction has to be reopened on resume of main operation + /// By default transaction is not reopened on resuming + void openTransactionOnResume() { myRestartTransactionOnResume = true; } + public slots: /// Starts operation /// Public slot. Verifies whether operation can be started and starts operation. @@ -174,6 +179,9 @@ Q_OBJECT /// Hide feature/results if they were hided on start virtual void stopOperation(); + /// Virtual method called after operation resume (see resume() method for more description) + virtual void resumeOperation(); + /// Creates an operation new feature /// \param theFlushMessage the flag whether the create message should be flushed /// \returns the created feature @@ -207,6 +215,8 @@ Q_OBJECT /// Last current feature before editing operation. It is cashed when Edit operation is started /// in order to restore the document current feature on commit/abort this operation. FeaturePtr myPreviousCurrentFeature; + + bool myRestartTransactionOnResume; }; #endif diff --git a/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp b/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp index a8b818e26..9f6136b7d 100644 --- a/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp +++ b/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp @@ -107,6 +107,12 @@ ModuleBase_FilterStarter::ModuleBase_FilterStarter(const std::string& theFeature void ModuleBase_FilterStarter::onFiltersLaunch() { + ModuleBase_Operation* aParentOp = myWorkshop->currentOperation(); + ModuleBase_OperationFeature* aFeatureOp = dynamic_cast(aParentOp); + if (aFeatureOp) + // Open transaction on filters operation finish + aFeatureOp->openTransactionOnResume(); + QWidget* aParent = parentWidget(); ModuleBase_WidgetMultiSelector* aSelector = dynamic_cast(aParent); -- 2.39.2