X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ViewWindow.h;h=bd2aef20eacc7f510421e0608527ba68bb89d541;hb=ed165fd07e71c11885fdc5f475a8522a5914e00d;hp=aefbd3dc723c35b0be145a9c741531878c4a64dd;hpb=fd4ecf538c9c74a08ef5f467ee2436b2272f9fda;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ViewWindow.h b/src/XGUI/XGUI_ViewWindow.h index aefbd3dc7..bd2aef20e 100644 --- a/src/XGUI/XGUI_ViewWindow.h +++ b/src/XGUI/XGUI_ViewWindow.h @@ -1,52 +1,362 @@ #ifndef XGUI_ViewWindow_H #define XGUI_ViewWindow_H -#include +#include "XGUI.h" +#include "XGUI_Constants.h" + +#include + +#include #include +#include +#include +#include + +#include +#include -class QLabel; -class QToolBar; +class XGUI_ViewPort; +class XGUI_Viewer; +class ViewerToolbar; +class ViewerLabel; +class XGUI_RectRubberBand; +class QMdiSubWindow; -class XGUI_ViewWindow : public QWidget +/*! + \class XGUI_ViewWindow + \ingroup GUI + \brief Implements a one view window of 3d viewer object. + It contains a view port object (drawing area) and toolbars for view camera and window management. + Also it managements events in view port + */ +class XGUI_EXPORT XGUI_ViewWindow : public QFrame { - Q_OBJECT -public: - XGUI_ViewWindow(); - virtual ~XGUI_ViewWindow(); - -protected: - virtual void resizeEvent(QResizeEvent* theEvent); - - virtual void changeEvent(QEvent* theEvent); - - virtual void enterEvent(QEvent* theEvent); - virtual void leaveEvent(QEvent* theEvent); - - virtual bool eventFilter(QObject *theObj, QEvent *theEvent); - -private slots: - void onClose(); - void onMinimize(); - void onMaximize(); - -private: - - QLabel* myPicture; - QLabel* myViewPort; - QLabel* myGripWgt; - QToolBar* myViewBar; - QToolBar* myWindowBar; - QAction* myMinimizeBtn; - QAction* myMaximizeBtn; - - QPixmap ViewPortPxm; - QIcon MinimizeIco; - QIcon MaximizeIco; - QIcon CloseIco; - QIcon RestoreIco; - - bool myMoving; - QPoint myMousePnt; +Q_OBJECT + public: + //! Types of viewer operations + enum OperationType + { + NOTHING, + PANVIEW, + ZOOMVIEW, + ROTATE, + PANGLOBAL, + WINDOWFIT, + FITALLVIEW, + RESETVIEW, + FRONTVIEW, + BACKVIEW, + TOPVIEW, + BOTTOMVIEW, + LEFTVIEW, + RIGHTVIEW, + CLOCKWISEVIEW, + ANTICLOCKWISEVIEW + }; + + XGUI_ViewWindow(XGUI_Viewer* theViewer, V3d_TypeOfView theType); + + virtual ~XGUI_ViewWindow(); + + //! Returns view port object + XGUI_ViewPort* viewPort() const + { + return myViewPort; + } + + //! Retrurns current interaction style + XGUI::InteractionStyle interactionStyle() const + { + return myInteractionStyle; + } + + //! Disable or enable given operation type + void setTransformEnabled(const OperationType, const bool); + + //! Returns true if the given operation type is enabled + bool transformEnabled(const OperationType) const; + + //! Returns View background object + Qtx::BackgroundData background() const; + + //! Sets View background object + void setBackground(const Qtx::BackgroundData& theBackground); + + //! Returns true if the current view window can be closed + bool closable() const + { + return myClosable; + } + + //! Sets the current view window closable or not + void setClosable(const bool isClosable) + { + myClosable = isClosable; + } + + //! Enable/Disable drawing of ribbon line + void enableDrawMode(bool toEnable) + { + myEnableDrawMode = toEnable; + } + + //! Returns true if ribbon line drawing enabled + bool isDrawModeEnabled() const + { + return myEnableDrawMode; + } + + //! Updates drawing mode in the view window + void updateEnabledDrawMode(); + +signals: + //! Emited whien view transformation operation is started + void vpTransformationStarted(XGUI_ViewWindow::OperationType type); + + //! Emited whien view transformation operation is finished + void vpTransformationFinished(XGUI_ViewWindow::OperationType type); + + //void Show(QShowEvent *); + //void Hide(QHideEvent *); + //void maximized(XGUI_ViewWindow*, bool); + //void returnedTo3d(); + + //! Emited before the window closing + void tryClosing(XGUI_ViewWindow*); + + //! Emited when window is closing + void closed(QMdiSubWindow*); + + //! Emited on mouse press in view port + void mousePressed(XGUI_ViewWindow*, QMouseEvent*); + + //! Emited on mouse release in view port + void mouseReleased(XGUI_ViewWindow*, QMouseEvent*); + + //! Emited on mouse double click in view port + void mouseDoubleClicked(XGUI_ViewWindow*, QMouseEvent*); + + //! Emited on mouse moving in view port + void mouseMoving(XGUI_ViewWindow*, QMouseEvent*); + + //! Emited on key press in view port + void keyPressed(XGUI_ViewWindow*, QKeyEvent*); + + //! Emited on key release in view port + void keyReleased(XGUI_ViewWindow*, QKeyEvent*); + + //! Emited on context menu request in view port + void contextMenuRequested(QContextMenuEvent *e); + + //void viewModified(XGUI_ViewWindow*); + void viewCloned(QMdiSubWindow* theView); + + public slots: + //! Start zooming operation + void activateZoom(); + + //! Start rotation operation + void activateRotation(); + + //! Start panning operation + void activatePanning(); + + //! Start window fit operation + void activateWindowFit(); + + //! Start global panning operation + void activateGlobalPanning(); + + //! Clone the view window preserving a view point of the current view + void cloneView(); + + //! Dump the view window into external file (*.bmp *.png *.jpg *.jpeg *.eps *.ps) + void dumpView(); + + //! Fit all command + void fitAll(); + + //! Set front view + void frontView(); + + //! Set back view + void backView(); + + //! Set top view + void topView(); + + //! Set bottom view + void bottomView(); + + //! Set left view + void leftView(); + + //! Set right view + void rightView(); + + //! Reset point of view + void reset(); + + void windowActivated(); + + void windowDeactivated(); + + protected: + virtual void changeEvent(QEvent* theEvent); + + virtual bool eventFilter(QObject *theObj, QEvent *theEvent); + + virtual void showEvent(QShowEvent* theEvent); + + virtual void contextMenuEvent(QContextMenuEvent* theEvent); + + private slots: + void onClose(); + void onMinimize(); + void onMaximize(); + + void updateToolBar(); +// void repaintToolBar(); + + private: + enum WindowState + { + MinimizedState, + MaximizedState, + WindowNormalState + }; + + bool processWindowControls(QObject *theObj, QEvent *theEvent); + bool processViewPort(QEvent *theEvent); + + void vpMousePressEvent(QMouseEvent* theEvent); + void vpMouseReleaseEvent(QMouseEvent* theEvent); + void vpMouseMoveEvent(QMouseEvent* theEvent); + + OperationType getButtonState(QMouseEvent* theEvent, XGUI::InteractionStyle theInteractionStyle); + + void resetState(); + void drawRect(); + void endDrawRect(); + + bool transformRequested() const; + bool setTransformRequested(OperationType); + + // Transformation is selected and already started + bool transformInProcess() const + { + return myEventStarted; + } + void setTransformInProcess(bool bOn) + { + myEventStarted = bOn; + } + + private: + XGUI_Viewer* myViewer; + + QLabel* myPicture; + ViewerLabel* myGripWgt; + XGUI_ViewPort* myViewPort; + ViewerToolbar* myViewBar; + ViewerToolbar* myWindowBar; + QAction* myMinimizeBtn; + QAction* myMaximizeBtn; + + QIcon MinimizeIco; + QIcon MaximizeIco; + QIcon CloseIco; + QIcon RestoreIco; + + bool myMoving; + QPoint myMousePnt; + + WindowState myLastState; + + int myStartX; + int myStartY; + int myCurrX; + int myCurrY; + + XGUI::InteractionStyle myInteractionStyle; + OperationType myOperation; + XGUI::Mode2dType my2dMode; + + int myCurSketch; + bool myDrawRect; // set when a rect is used for selection or magnify + bool myEnableDrawMode; + bool myRotationPointSelection; + bool myCursorIsHand; + bool myIsKeyFree; + bool myEventStarted; // set when transformation is in process + bool myClosable; + bool myIsActive; + + QCursor myCursor; + + XGUI::RotationPointType myCurrPointType; + XGUI::RotationPointType myPrevPointType; + + gp_Pnt mySelectedPoint; + + XGUI_RectRubberBand* myRectBand; //!< selection rectangle rubber band + + typedef QMap MapOfTransformStatus; + MapOfTransformStatus myStatus; + + double myCurScale; +}; + +//****************************************************** +/*! + \class ViewerToolbar + \ingroup GUI + \brief Provides a toolbar widget with treansparent background over OCCT View window + */ +class ViewerToolbar : public QToolBar +{ +Q_OBJECT + public: + ViewerToolbar(QWidget* theParent, XGUI_ViewPort* thePort); + + protected slots: + void onViewPortResized() + { + myResize = true; + } + + protected: + virtual void paintEvent(QPaintEvent* theEvent); + + private: + XGUI_ViewPort* myVPort; + bool myResize; +}; + +//****************************************************** +/*! + \class ViewerToolbar + \ingroup GUI + \brief Provides a Label widget with treansparent background over OCCT View window + */ +class ViewerLabel : public QLabel +{ +Q_OBJECT + public: + ViewerLabel(QWidget* theParent, XGUI_ViewPort* thePort); + + protected slots: + void onViewPortResized() + { + myResize = true; + } + + protected: + virtual void paintEvent(QPaintEvent* theEvent); + + private: + XGUI_ViewPort* myVPort; + bool myResize; }; -#endif \ No newline at end of file +#endif