X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Viewer.h;h=d85a160cf9edbf96c33e98cdce185eb2e4aec4be;hb=8da742ab694198bf02ffd7c4b876128774fd2c92;hp=6afdf36ec93065c94aee4c2434cc7ce554c86aff;hpb=1fc8dc0984e6bb92df544300fda9aa625ad5c05e;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Viewer.h b/src/XGUI/XGUI_Viewer.h index 6afdf36ec..d85a160cf 100644 --- a/src/XGUI/XGUI_Viewer.h +++ b/src/XGUI/XGUI_Viewer.h @@ -1,15 +1,21 @@ #ifndef XGUI_Viewer_H #define XGUI_Viewer_H +#include "XGUI.h" #include "XGUI_Constants.h" #include #include #include +#include +#include #include #include #include +#include +#include + class XGUI_MainWindow; class QMdiSubWindow; @@ -17,12 +23,14 @@ 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 * when each of view window is a one point of view on this scene. */ -class XGUI_Viewer: public QObject +class XGUI_EXPORT XGUI_Viewer: public QObject { Q_OBJECT public: @@ -52,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& 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 { @@ -83,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, @@ -109,11 +154,18 @@ 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*); + void onWindowActivated(QMdiSubWindow*); private slots: void onViewClosed(QMdiSubWindow*); - //void onViewMapped(); - void onWindowActivated(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); @@ -121,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; @@ -135,9 +191,18 @@ private: double myTrihedronSize; - QList myViews; + QList myViews; + + QMdiSubWindow* myActiveView; + + /// Points used for selection management + QPoint myStartPnt, myEndPnt, myCurPnt; + + /// A counter of created windows + int myWndIdCount; - QMdiSubWindow* myActiveView; + /// List of Viewer actions + QList myActions; }; #endif