Salome HOME
Initial iteration for storage the back references and making concealment only on...
[modules/shaper.git] / src / XGUI / XGUI_Selection.cpp
index 5900aefea0c8c4143c3163403816db009f18c9fb..1b91cb3dccad3b2dc905d617c40f91ebf8b16474 100644 (file)
 
 #include <set>
 
-
 XGUI_Selection::XGUI_Selection(XGUI_Workshop* theWorkshop)
-: myWorkshop(theWorkshop)
+    : myWorkshop(theWorkshop)
 {
 }
 
 std::list<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(int theShapeTypeToSkip) const
 {
-  std::set<FeaturePtr> aPrsFeatures;
+  std::set<ObjectPtr> aPrsFeatures;
   std::list<ModuleBase_ViewerPrs> aPresentations;
+  XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
   for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) {
-    Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
-    TopoDS_Shape aShape = aContext->SelectedShape();
-
-    if (theShapeTypeToSkip >= 0 && !aShape.IsNull() && aShape.ShapeType() == theShapeTypeToSkip)
-      continue;
+    ModuleBase_ViewerPrs aPrs;
 
-    FeaturePtr aFeature = myWorkshop->displayer()->getFeature(anIO);
-    if (aPrsFeatures.find(aFeature) != aPrsFeatures.end())
-      continue;
+    Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
+    aPrs.setInteractive(anIO);
+
+    ObjectPtr aFeature = aDisplayer->getObject(anIO);
+    if (aPrsFeatures.find(aFeature) == aPrsFeatures.end()) {
+      aPrs.setFeature(aFeature);
+      aPrsFeatures.insert(aFeature);
+    }
+    if (aContext->HasOpenedContext()) {
+      TopoDS_Shape aShape = aContext->SelectedShape();
+      if (!aShape.IsNull() && (aShape.ShapeType() != theShapeTypeToSkip))
+        aPrs.setShape(aShape);
+    }
     Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner();
-    aPresentations.push_back(ModuleBase_ViewerPrs(aFeature, aShape, anOwner));
-    aPrsFeatures.insert(aFeature);
+    aPrs.setOwner(anOwner);
+    aPresentations.push_back(aPrs);
   }
   return aPresentations;
 }
 
 std::list<ModuleBase_ViewerPrs> XGUI_Selection::getHighlighted(int theShapeTypeToSkip) const
 {
-  std::set<FeaturePtr > aPrsFeatures;
+  std::set<ObjectPtr> aPrsFeatures;
   std::list<ModuleBase_ViewerPrs> aPresentations;
+  XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
   for (aContext->InitDetected(); aContext->MoreDetected(); aContext->NextDetected()) {
+    ModuleBase_ViewerPrs aPrs;
     Handle(AIS_InteractiveObject) anIO = aContext->DetectedInteractive();
-    TopoDS_Shape aShape = aContext->DetectedShape();
-    if (theShapeTypeToSkip >= 0 && !aShape.IsNull() && aShape.ShapeType() == theShapeTypeToSkip)
-      continue;
-
-    FeaturePtr aFeature = myWorkshop->displayer()->getFeature(anIO);
-    if (aPrsFeatures.find(aFeature) != aPrsFeatures.end())
-      continue;
-    aPresentations.push_back(ModuleBase_ViewerPrs(aFeature, aShape, NULL));
-    aPrsFeatures.insert(aFeature);
+    aPrs.setInteractive(anIO);
+
+    ObjectPtr aResult = aDisplayer->getObject(anIO);
+    if (aPrsFeatures.find(aResult) == aPrsFeatures.end()) {
+      aPrs.setFeature(aResult);
+      aPrsFeatures.insert(aResult);
+    }
+    if (aContext->HasOpenedContext()) {
+      TopoDS_Shape aShape = aContext->DetectedShape();
+      if (!aShape.IsNull() && aShape.ShapeType() != theShapeTypeToSkip)
+        aPrs.setShape(aShape);
+    }
+    aPresentations.push_back(aPrs);
   }
-
   return aPresentations;
 }
 
-QFeatureList XGUI_Selection::selectedFeatures() const
+QList<ObjectPtr> XGUI_Selection::selectedObjects() const
 {
-  return myWorkshop->objectBrowser()->selectedFeatures();
-  //QFeatureList aSelectedList;
-
-  //Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
-  //for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) {
-  //  Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
-  //  FeaturePtr aFeature = myWorkshop->displayer()->getFeature(anIO);
-  //  if (aFeature)
-  //    aSelectedList.append(aFeature);
-  //}
-  //return aSelectedList;
+  return myWorkshop->objectBrowser()->selectedObjects();
 }
 
+QList<ObjectPtr> XGUI_Selection::selectedPresentations() const
+{
+  QList<ObjectPtr> aSelectedList;
+
+  Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
+  for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) {
+    Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive();
+    ObjectPtr aResult = myWorkshop->displayer()->getObject(anIO);
+    if (aResult)
+      aSelectedList.append(aResult);
+  }
+  return aSelectedList;
+}
 
 //**************************************************************
-QModelIndexList XGUI_Selection::selectedIndexes() const 
-{ 
+QModelIndexList XGUI_Selection::selectedIndexes() const
+{
   return myWorkshop->objectBrowser()->selectedIndexes();
 }
 
@@ -97,13 +111,20 @@ void XGUI_Selection::selectedAISObjects(AIS_ListOfInteractive& theList) const
 }
 
 //**************************************************************
-void XGUI_Selection::selectedShapes(NCollection_List<TopoDS_Shape>& theList) const
+void XGUI_Selection::selectedShapes(NCollection_List<TopoDS_Shape>& theList, 
+                                    std::list<ObjectPtr>& theOwners) const
 {
   theList.Clear();
   Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
   for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) {
     TopoDS_Shape aShape = aContext->SelectedShape();
-    if (!aShape.IsNull())
+    if (!aShape.IsNull()) {
       theList.Append(aShape);
+      Handle(SelectMgr_EntityOwner) aEO = aContext->SelectedOwner();
+      Handle(AIS_InteractiveObject) anObj = 
+        Handle(AIS_InteractiveObject)::DownCast(aEO->Selectable());
+      ObjectPtr anObject = myWorkshop->displayer()->getObject(anObj);
+      theOwners.push_back(anObject);
+    }
   }
 }