X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Viewer.h;h=d85a160cf9edbf96c33e98cdce185eb2e4aec4be;hb=a398103d11950df8cb50eeea49942237eb16edcf;hp=78cfe55a55774c691e18f1e8ea1dcace83dd4df7;hpb=580494d5bfe1c80d9195ebbf7a18826f67595a91;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Viewer.h b/src/XGUI/XGUI_Viewer.h index 78cfe55a5..d85a160cf 100644 --- a/src/XGUI/XGUI_Viewer.h +++ b/src/XGUI/XGUI_Viewer.h @@ -1,82 +1,208 @@ - #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; - -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 +Q_OBJECT public: - static QString backgroundData( QStringList&, QIntList&, QIntList& ); - - XGUI_Viewer(XGUI_MainWindow* theParent, bool DisplayTrihedron = true); - ~XGUI_Viewer(); + static QString backgroundData(QStringList&, QIntList&, QIntList&); + + 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); + + /// 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); - QMdiSubWindow* createView(V3d_TypeOfView theType = V3d_ORTHOGRAPHIC); + /// Select the object in 3D viewer. + /// \param theIO - list objects to be selected + void setSelected(const Handle(AIS_InteractiveObject)& theIO) { myAISContext->SetSelected(theIO); } - XGUI_MainWindow* mainWindow() const { return myMainWindow; } + //! Trihedron 3d object shown in the viewer + Handle(AIS_Trihedron) trihedron() const + { + return myTrihedron; + } - Handle(V3d_Viewer) v3dViewer() const { return myV3dViewer; } + //! On/Off visibility of the trihedron object + void toggleTrihedron(); - Handle(AIS_InteractiveContext) AISContext() const { return myAISContext; } + //! Returns true if trihedron is visible + bool isTrihedronVisible() const; - Handle(AIS_Trihedron) trihedron() const { return myTrihedron; } + //! Returns true if trihedron is visible + void setTrihedronShown(bool on); - void toggleTrihedron(); - bool isTrihedronVisible() const; - void setTrihedronShown( const bool on ); - double trihedronSize() const; - void setTrihedronSize( const double sz, bool isRelative ); - bool trihedronRelative() const { return myIsRelative; } - void updateTrihedron(); - bool computeTrihedronSize( double& theNewSize, double& theSize ); + //! 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(); - static void setHotButton( XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, - Qt::KeyboardModifiers theState, Qt::MouseButtons theButton ); - static void getHotButton( XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, - Qt::KeyboardModifiers& theState, Qt::MouseButtons& theButton ); + //! Compute trihedron size dependent on 3d scene size + bool computeTrihedronSize(double& theNewSize, double& theSize); - typedef QMap StatesMap; - typedef QMap ButtonsMap; + //! Add action to the viewer + void addAction(QAction* theAction) { myActions.append(theAction); } - typedef QMap InteractionStyle2StatesMap; - typedef QMap InteractionStyle2ButtonsMap; - static InteractionStyle2StatesMap myStateMap; - static InteractionStyle2ButtonsMap myButtonMap; + static void setHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, + Qt::KeyboardModifiers theState, Qt::MouseButtons theButton); + static void getHotButton(XGUI::InteractionStyle theInteractionStyle, XGUI::HotOperation theOper, + Qt::KeyboardModifiers& theState, Qt::MouseButtons& theButton); + + typedef QMap StatesMap; + typedef QMap ButtonsMap; + + typedef QMap InteractionStyle2StatesMap; + typedef QMap InteractionStyle2ButtonsMap; + + 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(); + +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); + void onMousePressed(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent); + void onContextMenuRequested(QContextMenuEvent* theEvent); private: - XGUI_MainWindow* myMainWindow; + void addView(QMdiSubWindow* theView); + + /*! Removes the View from internal Views list.*/ + void removeView(QMdiSubWindow* theView); - Handle(V3d_Viewer) myV3dViewer; - Handle(AIS_Trihedron) myTrihedron; - Handle(AIS_InteractiveContext) myAISContext; - - XGUI::InteractionStyle myInteractionStyle; + void updateViewsDrawMode() const; + +private: + XGUI_MainWindow* myMainWindow; + + Handle(V3d_Viewer) myV3dViewer; + Handle(AIS_Trihedron) myTrihedron; + Handle(AIS_InteractiveContext) myAISContext; + + XGUI::InteractionStyle myInteractionStyle; + + bool myPreselectionEnabled; + bool mySelectionEnabled; + bool myMultiSelectionEnabled; + bool myIsRelative; + + double myTrihedronSize; - bool myPreselectionEnabled; - bool mySelectionEnabled; - bool myMultiSelectionEnabled; - bool myIsRelative; + QList myViews; + + QMdiSubWindow* myActiveView; + + /// Points used for selection management + QPoint myStartPnt, myEndPnt, myCurPnt; + + /// A counter of created windows + int myWndIdCount; - double myTrihedronSize; + /// List of Viewer actions + QList myActions; }; -#endif \ No newline at end of file +#endif