#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)
{
}
theProp->setFocusOnOkButton();
}
}
+
+void ModuleBase_OperationFeature::resumeOperation()
+{
+ if (myRestartTransactionOnResume) {
+ ModelAPI_Session::get()->startOperation(this->id().toStdString(), true);
+ myRestartTransactionOnResume = false;
+ }
+}
/// \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.
/// 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
/// 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
void ModuleBase_FilterStarter::onFiltersLaunch()
{
+ ModuleBase_Operation* aParentOp = myWorkshop->currentOperation();
+ ModuleBase_OperationFeature* aFeatureOp = dynamic_cast<ModuleBase_OperationFeature*>(aParentOp);
+ if (aFeatureOp)
+ // Open transaction on filters operation finish
+ aFeatureOp->openTransactionOnResume();
+
QWidget* aParent = parentWidget();
ModuleBase_WidgetMultiSelector* aSelector =
dynamic_cast<ModuleBase_WidgetMultiSelector*>(aParent);