Salome HOME
Integration of Pop-up management.
[modules/shaper.git] / src / XGUI / XGUI_Viewer.h
index b68f9accbbf1619f4c793dd57d4cd3f3865df304..d85a160cf9edbf96c33e98cdce185eb2e4aec4be 100644 (file)
@@ -7,10 +7,15 @@
 #include <QObject>
 #include <QMap>
 #include <QList>
+#include <QPoint>
+#include <QAction>
 
 #include <V3d_Viewer.hxx>
 #include <AIS_InteractiveContext.hxx>
 #include <AIS_Trihedron.hxx>
+#include <NCollection_List.hxx>
+#include <TopoDS_Shape.hxx>
+
 
 class XGUI_MainWindow;
 class QMdiSubWindow;
@@ -18,6 +23,8 @@ class XGUI_ViewWindow;
 class QMouseEvent;
 class QKeyEvent;
 
+class AIS_ListOfInteractive;
+
 /**\class XGUI_Viewer
  * \ingroup GUI
  * \brief Represents a 3d viewer. The viewer manages 3d scene and a set of view windows
@@ -53,6 +60,39 @@ public:
     return myAISContext;
   }
 
+  //! Returns an active view window or NULL
+  XGUI_ViewWindow* activeViewWindow() const;
+
+  /// Return objects selected in 3D viewer
+  /// \param theList - list to be filled with selected objects
+  void  getSelectedObjects(AIS_ListOfInteractive& theList);
+
+  /// Return shapes selected in 3D viewer
+  /// \param theList - list to be filled with selected shapes
+  void getSelectedShapes(NCollection_List<TopoDS_Shape>& theList);
+
+  /// Selects objects in 3D viewer. Other selected objects are left as selected
+  /// \param theList - list objects to be selected
+  void  setObjectsSelected(const AIS_ListOfInteractive& theList);
+
+  /// Returns true if selection in the viewer is enabled
+  bool isSelectionEnabled() const { return mySelectionEnabled; }
+
+  /// Enable or disable selectioon in the viewer
+  // \param toEnable - true or false (enable or disable selection)
+  void setSelectionEnabled(bool toEnable);
+
+  /// Returns true if multi-selection in the viewer is enabled
+  bool isMultiSelectionEnabled() const { return myMultiSelectionEnabled; }
+
+  /// Enable or disable selectioon in the viewer
+  // \param toEnable - true or false (enable or disable selection)
+  void setMultiSelectionEnabled(bool toEnable);
+
+  /// Select the object in 3D viewer.
+  /// \param theIO - list objects to be selected
+  void setSelected(const Handle(AIS_InteractiveObject)& theIO) { myAISContext->SetSelected(theIO); }
+
   //! Trihedron 3d object shown in the viewer
   Handle(AIS_Trihedron) trihedron() const
   {
@@ -84,6 +124,10 @@ public:
   //! Compute trihedron size dependent on 3d scene size
   bool computeTrihedronSize(double& theNewSize, double& theSize);
 
+  //! Add action to the viewer
+  void addAction(QAction* theAction) { myActions.append(theAction); }
+
+
   static void setHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper,
                            Qt::KeyboardModifiers theState, Qt::MouseButtons theButton);
   static void getHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper,
@@ -110,6 +154,7 @@ signals:
   void keyPress(XGUI_ViewWindow* theWindow, QKeyEvent* theEvent);
   void keyRelease(XGUI_ViewWindow* theWindow, QKeyEvent* theEvent);
   void activated(XGUI_ViewWindow* theWindow);
+  void selectionChanged();
 
 public slots:
   void onWindowMinimized(QMdiSubWindow*);
@@ -117,6 +162,10 @@ public slots:
 
 private slots:
   void onViewClosed(QMdiSubWindow*);
+  void onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent);
+  void onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent);
+  void onMousePressed(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent);
+  void onContextMenuRequested(QContextMenuEvent* theEvent);
 
 private:
   void addView(QMdiSubWindow* theView);
@@ -124,10 +173,14 @@ private:
   /*! Removes the View from internal Views list.*/
   void removeView(QMdiSubWindow* theView);
 
+  void updateViewsDrawMode() const;
+
 private:
   XGUI_MainWindow* myMainWindow;
 
-  Handle(V3d_Viewer) myV3dViewer;Handle(AIS_Trihedron) myTrihedron;Handle(AIS_InteractiveContext) myAISContext;
+  Handle(V3d_Viewer) myV3dViewer;
+  Handle(AIS_Trihedron) myTrihedron;
+  Handle(AIS_InteractiveContext) myAISContext;
 
   XGUI::InteractionStyle myInteractionStyle;
 
@@ -141,6 +194,15 @@ private:
   QList<QMdiSubWindow*> myViews;
 
   QMdiSubWindow* myActiveView;
+
+  /// Points used for selection management
+  QPoint myStartPnt, myEndPnt, myCurPnt;
+
+  /// A counter of created windows
+  int myWndIdCount;
+
+  /// List of Viewer actions
+  QList<QAction*> myActions;
 };
 
 #endif