Salome HOME
Fix for crash on multi-selection of group-vertices on imported body with Shift-key...
[modules/shaper.git] / src / ModuleBase / ModuleBase_Operation.cpp
index 4b8c7d34bec1db0259ad11036dc3dffed806e207..68dd1322176bd6a73e83687402f769d7f0e99946 100644 (file)
@@ -135,8 +135,17 @@ void ModuleBase_Operation::start()
   }
   ModelAPI_Session::get()->startOperation(anId.toStdString());
 
-  if (!myIsEditing)
-    createFeature();
+  if (!myIsEditing) {
+    FeaturePtr aFeature = createFeature();
+    // if the feature is not created, there is no sense to start the operation
+    if (aFeature.get() == NULL) {
+      // it is necessary to abor the operation in the session and emit the aborted signal
+      // in order to update commands status in the workshop, to be exact the feature action
+      // to be unchecked
+      abort();
+      return;
+    }
+  }
 
   startOperation();
   emit started();
@@ -211,6 +220,7 @@ void ModuleBase_Operation::activateByPreselection()
   QList<ModuleBase_ModelWidget*>::const_iterator aWIt;
   QList<ModuleBase_ViewerPrs>::const_iterator aPIt;
   bool isSet = false;
+  // 1. apply the selection to controls
   for (aWIt = aWidgets.constBegin(), aPIt = myPreSelection.constBegin();
        (aWIt != aWidgets.constEnd()) && (aPIt != myPreSelection.constEnd());
        ++aWIt) {
@@ -228,7 +238,15 @@ void ModuleBase_Operation::activateByPreselection()
       aFilledWgt = aWgt;
     }
   }
+  // 2. ignore not obligatory widgets
+  /*for (; aWIt != aWidgets.constEnd(); ++aWIt) {
+    aWgt = (*aWIt);
+    if (aWgt && aWgt->isObligatory())
+      continue;
+    aFilledWgt = aWgt;
+  }*/
 
+  // 3. activate the next obligatory widget
   myPropertyPanel->activateNextWidget(aFilledWgt);
   if (aFilledWgt)
     emit activatedByPreselection();