X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Viewer.h;h=23d66656a92bf3badab36e66d613ce5dd5630665;hb=d86c77d1c6210bbe04fbc3e5b00f9e212e1ec930;hp=a5b43311f473d097d9fa7d552fa1d14c0cae6e24;hpb=2a0dd5ede9110d423fbd6b038c0445cb819163a9;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Viewer.h b/src/XGUI/XGUI_Viewer.h index a5b43311f..23d66656a 100644 --- a/src/XGUI/XGUI_Viewer.h +++ b/src/XGUI/XGUI_Viewer.h @@ -1,19 +1,35 @@ #ifndef XGUI_Viewer_H #define XGUI_Viewer_H +#include "XGUI.h" #include "XGUI_Constants.h" #include #include +#include #include #include #include +#include +#include + +#include class XGUI_MainWindow; class QMdiSubWindow; - -class XGUI_Viewer: public QObject +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_EXPORT XGUI_Viewer: public QObject { Q_OBJECT public: @@ -22,38 +38,75 @@ public: XGUI_Viewer(XGUI_MainWindow* theParent, bool DisplayTrihedron = true); ~XGUI_Viewer(); + //! Creates a new view window QMdiSubWindow* createView(V3d_TypeOfView theType = V3d_ORTHOGRAPHIC); + //! Return pointer on a main window - parent of the Viewer XGUI_MainWindow* mainWindow() const { return myMainWindow; } + //! Returns OCCT object which manages 3d scene Handle(V3d_Viewer) v3dViewer() const { return myV3dViewer; } + //! Returns OCCT object which manages displaying and selection in 3d scene Handle(AIS_InteractiveContext) AISContext() const { 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); + + /// 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 { return myTrihedron; } + //! On/Off visibility of the trihedron object void toggleTrihedron(); + + //! Returns true if trihedron is visible bool isTrihedronVisible() const; - void setTrihedronShown(const bool on); + + //! Returns true if trihedron is visible + void setTrihedronShown(bool on); + + //! Returns trihedron size double trihedronSize() const; + + //! Sets trihedron size void setTrihedronSize(const double sz, bool isRelative); + bool trihedronRelative() const { return myIsRelative; } + //! Update trihedron void updateTrihedron(); + + //! Compute trihedron size dependent on 3d scene size bool computeTrihedronSize(double& theNewSize, double& theSize); static void setHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, @@ -61,6 +114,12 @@ public: static void getHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, Qt::KeyboardModifiers& theState, Qt::MouseButtons& theButton); + //! Sets the view projection + /// \param theX the X projection value + /// \param theY the Y projection value + /// \param theZ the Z projection value + void setViewProjection(double theX, double theY, double theZ); + typedef QMap StatesMap; typedef QMap ButtonsMap; @@ -70,14 +129,43 @@ public: static InteractionStyle2StatesMap myStateMap; static InteractionStyle2ButtonsMap myButtonMap; +signals: + void lastViewClosed(); + void tryCloseView(XGUI_ViewWindow* theWindow); + void deleteView(XGUI_ViewWindow* theWindow); + void viewCreated(XGUI_ViewWindow* theWindow); + void mousePress(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void mouseRelease(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void mouseDoubleClick(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void mouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void keyPress(XGUI_ViewWindow* theWindow, QKeyEvent* theEvent); + void keyRelease(XGUI_ViewWindow* theWindow, QKeyEvent* theEvent); + void activated(XGUI_ViewWindow* theWindow); + void selectionChanged(); + void mouseReleased(QPoint thePoint); + void mouseMoved(QPoint thePoint); + +public slots: + void onWindowMinimized(QMdiSubWindow*); + void onWindowActivated(QMdiSubWindow*); + private slots: - void onViewClosed(); - void onViewMapped(); + void onViewClosed(QMdiSubWindow*); + void onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + +private: + void addView(QMdiSubWindow* theView); + + /*! Removes the View from internal Views list.*/ + void removeView(QMdiSubWindow* theView); 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; @@ -87,6 +175,10 @@ private: bool myIsRelative; double myTrihedronSize; + + QList myViews; + + QMdiSubWindow* myActiveView; }; #endif