Salome HOME
Issue #6 Extended processing of nested actions.
[modules/shaper.git] / src / XGUI / XGUI_Viewer.cpp
index e6dd6e2b728597c75ae92e6fe7e4429a9b06c0f6..23560ca86031d369571e2dcf5d864eb5a43d675e 100644 (file)
@@ -190,45 +190,9 @@ QMdiSubWindow* XGUI_Viewer::createView(V3d_TypeOfView theType)
   return aWnd;
 }
 
-void XGUI_Viewer::setLocalSelection(const AIS_ListOfInteractive& theAISObjects, const int theMode,
-                                    const bool isUpdateViewer)
+XGUI_ViewWindow* XGUI_Viewer::activeViewWindow() const
 {
-  Handle(AIS_InteractiveContext) ic = AISContext();
-
-  // Open local context if there is no one
-  bool allObjects = false; // calculate by AIS shape
-  if (!ic->HasOpenedContext()) {
-    ic->ClearCurrents(false);
-    ic->OpenLocalContext(allObjects, true, true);
-  }
-
-  // Activate selection of objects from prs
-  AIS_ListIteratorOfListOfInteractive aIter(theAISObjects);
-  for (; aIter.More(); aIter.Next()) {
-    Handle(AIS_InteractiveObject) anAIS = aIter.Value();
-    if (!anAIS.IsNull()) {
-      if (anAIS->IsKind(STANDARD_TYPE(AIS_Shape))) {
-        ic->Load(anAIS, -1, false);
-        ic->Activate(anAIS, AIS_Shape::SelectionMode((TopAbs_ShapeEnum)theMode));
-      }
-      else if (anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron)) {
-        ic->Load(anAIS, -1, false);
-        ic->Activate(anAIS, theMode);
-      }
-    }
-  }
-  if (isUpdateViewer)
-    ic->UpdateCurrentViewer();
-}
-
-void XGUI_Viewer::setGlobalSelection(const bool isUpdateViewer)
-{
-  Handle(AIS_InteractiveContext) ic = AISContext();
-  if (!ic.IsNull()) {
-    ic->CloseAllContexts(false);
-    if (isUpdateViewer)
-      ic->UpdateCurrentViewer();
-  }
+  return dynamic_cast<XGUI_ViewWindow*>(myActiveView->widget());
 }
 
 void XGUI_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList)
@@ -238,6 +202,17 @@ void XGUI_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList)
     theList.Append(myAISContext->SelectedInteractive());
 }
 
+void XGUI_Viewer::getSelectedShapes(NCollection_List<TopoDS_Shape>& theList)
+{
+  Handle(AIS_InteractiveContext) ic = AISContext();
+
+  for (ic->InitSelected(); ic->MoreSelected(); ic->NextSelected()) {
+    TopoDS_Shape aShape = ic->SelectedShape();
+    if (!aShape.IsNull())
+      theList.Append(aShape);
+  }
+}
+
 void XGUI_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList)
 {
   AIS_ListIteratorOfListOfInteractive aIt;
@@ -272,6 +247,17 @@ void XGUI_Viewer::getHotButton(XGUI::InteractionStyle theInteractionStyle,
   theButton = myButtonMap[theInteractionStyle][theOper];
 }
 
+void XGUI_Viewer::setViewProjection(double theX, double theY, double theZ)
+{
+  XGUI_ViewWindow* aWindow = dynamic_cast<XGUI_ViewWindow*>(myActiveView->widget());
+  if (aWindow) {
+    Handle(V3d_View) aView3d = aWindow->viewPort()->getView();
+    if ( !aView3d.IsNull() ) 
+      aView3d->SetProj(theX, theY, theZ);
+    aWindow->viewPort()->fitAll();
+  }
+}
+
 /*!
  Changes visibility of trihedron to opposite
  */
@@ -520,8 +506,10 @@ void XGUI_Viewer::onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent)
   XGUI_ViewPort* aViewPort = theWindow->viewPort();
   Handle(V3d_View) aView3d = aViewPort->getView();
 
-  if ( !aView3d.IsNull() )
+  if ( !aView3d.IsNull() ) {
     myAISContext->MoveTo(theEvent->x(), theEvent->y(), aView3d);
+    mouseMoved(theEvent->pos());
+  }
 }
 
 /*!
@@ -531,5 +519,5 @@ void XGUI_Viewer::onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEv
 {
   myAISContext->Select();
 
-  emit selectionChanged();
+  emit mouseReleased(theEvent->pos());
 }