- if (deleteFeatures(anObjects, anIgnoredFeatures, desktop(), true)) {
- operationMgr()->commitOperation();
- }
- else {
- operationMgr()->abortOperation(operationMgr()->currentOperation());
+ std::set<FeaturePtr> aDirectRefFeatures, aIndirectRefFeatures;
+ findReferences(anObjects, aDirectRefFeatures, aIndirectRefFeatures);
+
+ bool doDeleteReferences = true;
+ if (isDeleteFeatureWithReferences(anObjects, aDirectRefFeatures, aIndirectRefFeatures,
+ desktop(), doDeleteReferences)) {
+ // start operation
+ QString aDescription = contextMenuMgr()->action("DELETE_CMD")->text();
+ aDescription += " " + aDescription.arg(XGUI_Tools::unionOfObjectNames(anObjects, ", "));
+ ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(aDescription, module());
+ operationMgr()->startOperation(anOpAction);
+
+ // It is necessary to clear selection in order to avoid selection changed event during
+ // deletion and negative consequences connected with processing of already deleted items
+ mySelector->clearSelection();
+
+ // delete and commit/abort operation in model
+ if (deleteFeaturesInternal(anObjects, aDirectRefFeatures, aIndirectRefFeatures,
+ anIgnoredFeatures, doDeleteReferences))
+ operationMgr()->commitOperation();
+ else
+ operationMgr()->abortOperation(operationMgr()->currentOperation());