]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Redefinition of SetSelected method in Displayer
authorvsv <vitaly.smetannikov@opencascade.com>
Wed, 3 Dec 2014 09:33:51 +0000 (12:33 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Wed, 3 Dec 2014 09:33:51 +0000 (12:33 +0300)
src/PartSet/PartSet_Module.cpp
src/XGUI/XGUI_Displayer.cpp

index ca49036a681acb908ee57bfb1882608634bbc0c9..38e9671ddf41432dc9403728289afddd9547d628 100644 (file)
@@ -351,6 +351,7 @@ void PartSet_Module::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseEvent*
       return;
     }
 
+    QObjectPtrList aSelObjects = getSumList(aHighlighted, aSelected);
     if ((aHighlighted.size() == 1) && (aSelected.size() == 0)) {
       // Move by selected shape (vertex). Can be used only for single selection
       foreach(ModuleBase_ViewerPrs aPrs, aHighlighted) {
@@ -370,8 +371,7 @@ void PartSet_Module::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseEvent*
       }
     } else {
       // Provide multi-selection. Can be used only for features
-      QList<ObjectPtr> aObjects = getSumList(aHighlighted, aSelected);
-      foreach (ObjectPtr aObj, aObjects) {
+      foreach (ObjectPtr aObj, aSelObjects) {
         FeaturePtr aFeature = ModelAPI_Feature::feature(aObj);
         if (aFeature && (!myEditingFeatures.contains(aFeature)))
           myEditingFeatures.append(aFeature);
@@ -387,7 +387,6 @@ void PartSet_Module::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseEvent*
       get2dPoint(theWnd, theEvent, myCurX, myCurY);
       myDragDone = false;
       myWorkshop->viewer()->enableSelection(false);
-
       launchEditing();
 
     } else if (isSketchOpe && isEditing) {
index 3a46b77b13db6ef825687f7513b37b5e2634fb5c..6cd90a2fdb235af03ce64c9a50584460358c1bbc 100644 (file)
@@ -242,20 +242,29 @@ void XGUI_Displayer::stopSelection(const QObjectPtrList& theResults, const bool
 void XGUI_Displayer::setSelected(const QObjectPtrList& theResults, const bool isUpdateViewer)
 {
   Handle(AIS_InteractiveContext) aContext = AISContext();
-  // we need to unhighligth objects manually in the current local context
-  // in couple with the selection clear (TODO)
-  Handle(AIS_LocalContext) aLocalContext = aContext->LocalContext();
-  if (!aLocalContext.IsNull())
-    aLocalContext->UnhilightLastDetected(myWorkshop->viewer()->activeView());
-
-  aContext->ClearSelected();
-  foreach(ObjectPtr aResult, theResults)
-  {
-    if (isVisible(aResult)) {
-      AISObjectPtr anObj = myResult2AISObjectMap[aResult];
-      Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
-      if (!anAIS.IsNull())
-        aContext->SetSelected(anAIS, false);
+  if (aContext.IsNull())
+    return;
+  if (aContext->HasOpenedContext()) {
+    aContext->UnhilightSelected();
+    aContext->ClearSelected();
+    foreach(ObjectPtr aResult, theResults) {
+      if (isVisible(aResult)) {
+        AISObjectPtr anObj = myResult2AISObjectMap[aResult];
+        Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
+        if (!anAIS.IsNull())
+          aContext->SetSelected(anAIS, false);
+      }
+    }
+  } else {
+    aContext->UnhilightCurrents();
+    aContext->ClearCurrents();
+    foreach(ObjectPtr aResult, theResults) {
+      if (isVisible(aResult)) {
+        AISObjectPtr anObj = myResult2AISObjectMap[aResult];
+        Handle(AIS_InteractiveObject) anAIS = anObj->impl<Handle(AIS_InteractiveObject)>();
+        if (!anAIS.IsNull())
+          aContext->SetCurrentObject(anAIS, false);
+      }
     }
   }
   if (isUpdateViewer)
@@ -348,10 +357,9 @@ void XGUI_Displayer::openLocalContext()
       aContext->AddFilter(aIt.Value());
     }
     // Restore selection
-    //AIS_ListIteratorOfListOfInteractive aIt(aAisList);
-    //for(; aIt.More(); aIt.Next()) {
-    //  if (aContext->IsDisplayed(aIt.Value()))
-    //    aContext->SetSelected(aIt.Value(), false);
+    //AIS_ListIteratorOfListOfInteractive aIt2(aAisList);
+    //for(; aIt2.More(); aIt2.Next()) {
+    //  aContext->SetSelected(aIt2.Value(), false);
     //}
   }
 }
@@ -396,10 +404,10 @@ void XGUI_Displayer::closeLocalContexts(const bool isUpdateViewer)
     myActiveSelectionModes.clear();
 
     // Restore selection
-    //AIS_ListIteratorOfListOfInteractive aIt(aAisList);
-    //for(; aIt.More(); aIt.Next()) {
-    //  if (aContext->IsDisplayed(aIt.Value()))
-    //    aContext->SetCurrentObject(aIt.Value(), false);
+    //AIS_ListIteratorOfListOfInteractive aIt2(aAisList);
+    //for(; aIt2.More(); aIt2.Next()) {
+    //  if (aContext->IsDisplayed(aIt2.Value()))
+    //    aContext->SetCurrentObject(aIt2.Value(), false);
     //}
   }
 }