Salome HOME
Fix for the bug #293: Shown bathymetry doesn't disappear after Undo.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.h
1 // Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 #ifndef HYDROGUI_MODULE_H
24 #define HYDROGUI_MODULE_H
25
26 #include <HYDROData_Entity.h>
27
28 #include <LightApp_Module.h>
29
30 #include <QEvent>
31 #include <QPoint>
32
33 class QGraphicsSceneMouseEvent;
34
35 class GraphicsView_Viewer;
36 class OCCViewer_Viewer;
37 class SVTK_Viewer;
38
39 class SUIT_ViewWindow;
40 class SUIT_ViewManager;
41
42 class HYDROGUI_DataModel;
43 class HYDROGUI_Displayer;
44 class HYDROGUI_OCCDisplayer;
45 class HYDROGUI_VTKPrsDisplayer;
46 class HYDROGUI_AbstractDisplayer;
47 class HYDROGUI_Shape;
48 class HYDROGUI_VTKPrs;
49
50 /**\class HYDROGUI_Module
51  *\brief The class representing the HYDROGUI module
52  */
53 class HYDROGUI_Module : public LightApp_Module
54 {
55   Q_OBJECT
56
57   enum CustomEvent { NewViewEvent = QEvent::User + 100 };
58
59 public:
60   
61   enum ViewManagerRole
62   {
63     VMR_Unknown = 0,
64     VMR_General,
65     VMR_TransformImage,
66     VMR_ReferenceImage,
67     VMR_ObserveImage,
68     //VMR_PreviewZone, // totally unused, to delete
69     VMR_PreviewCaseZones // actually unused, to review
70   };
71   typedef QPair< SUIT_ViewManager*, ViewManagerRole > ViewManagerInfo;
72
73   typedef QMap        < int, ViewManagerInfo > ViewManagerMap;
74   typedef QMapIterator< int, ViewManagerInfo > ViewManagerMapIterator;
75
76   struct ObjectState
77   {
78     bool Visibility;
79     double Transparency;
80     double ZValue;
81     ObjectState() : Visibility( false ), Transparency( 1.0 ), ZValue( 0.0 ) {}
82   };
83   typedef QMap< QString, ObjectState > Entry2ObjectStateMap;
84   typedef QMap< int, Entry2ObjectStateMap > ViewId2Entry2ObjectStateMap;
85
86   typedef QList<HYDROGUI_Shape*> ListOfShapes;
87   typedef QMap<int,ListOfShapes> ViewId2ListOfShapes;
88
89   typedef QList<HYDROGUI_VTKPrs*> ListOfVTKPrs;
90   typedef QMap<int,ListOfVTKPrs> ViewId2ListOfVTKPrs;
91
92 public:
93   HYDROGUI_Module();
94   virtual ~HYDROGUI_Module();
95
96   int                             getStudyId() const;
97
98   virtual void                    initialize( CAM_Application* );
99   virtual void                    windows( QMap<int, int>& ) const;
100   virtual void                    viewManagers( QStringList& ) const;
101
102   virtual void                    contextMenuPopup( const QString&, QMenu*, QString& );
103
104   virtual void                    update( const int );
105   virtual void                    updateCommandsStatus();
106
107   virtual void                    selectionChanged();
108
109   SUIT_ViewManager*               getViewManager( const int theId ) const;
110   HYDROGUI_DataModel*             getDataModel() const;
111   HYDROGUI_Displayer*             getDisplayer() const;
112   HYDROGUI_OCCDisplayer*          getOCCDisplayer() const;
113   HYDROGUI_VTKPrsDisplayer*       getVTKDisplayer() const;
114
115   GraphicsView_Viewer*            getViewer( const int theId ) const;
116   OCCViewer_Viewer*               getOCCViewer( const int theId ) const;
117   SVTK_Viewer*                    getVTKViewer( const int theId ) const;
118
119   int                             getViewManagerId( SUIT_ViewManager* theViewManager );
120   ViewManagerRole                 getViewManagerRole( SUIT_ViewManager* theViewManager );
121   void                            setViewManagerRole( SUIT_ViewManager* theViewManager,
122                                                       const ViewManagerRole theRole );
123
124   bool                            isObjectVisible( const int theViewId,
125                                                    const Handle(HYDROData_Entity)& theObject ) const;
126   void                            setObjectVisible( const int theViewId,
127                                                     const Handle(HYDROData_Entity)& theObject,
128                                                     const bool theState );
129   /** 
130    * Set IsToUpdate flag for all presentations of the given object to recompute them during 
131    * the next viewer(s) updating.
132    * @param theObject the data model object
133    * @param theState  the flag to set for object's presentations, it's true by default.
134    */
135   void                            setIsToUpdate( const Handle(HYDROData_Entity)& theObject,
136                                                  const bool theState = true );
137   HYDROGUI_Shape*                 getObjectShape( const int                       theViewId,
138                                                   const Handle(HYDROData_Entity)& theObject ) const;
139   void                            setObjectShape( const int                       theViewId,
140                                                   const Handle(HYDROData_Entity)& theObject,
141                                                   HYDROGUI_Shape*                 theShape );
142   void                            removeViewShapes( const int                     theViewId );
143   void                            removeObjectShape( const int                       theViewId,
144                                                      const Handle(HYDROData_Entity)& theObject );
145
146   HYDROGUI_VTKPrs*                getObjectVTKPrs( const int                       theViewId,
147                                                    const Handle(HYDROData_Entity)& theObject ) const;
148   void                            setObjectVTKPrs( const int                       theViewId,
149                                                    const Handle(HYDROData_Entity)& theObject,
150                                                    HYDROGUI_VTKPrs*                theShape );
151   void                            removeViewVTKPrs( const int                      theViewId );
152   void                            removeObjectVTKPrs( const int                      theViewId,
153                                                      const Handle(HYDROData_Entity)& theObject );
154
155   /**
156    * Update global imposed range of Z values for the given VTK viewer id
157    */
158   void                            updateVTKZRange( const int theViewId, double theRange[] );
159
160   /**
161    * Returns true if the object with the given entry can be renamed.
162    * @param theEntry the object entry
163    */
164   virtual bool                    renameAllowed( const QString& theEntry ) const;
165   /**
166    * Returns true if the object with the given entry is renamed.
167    * @param theEntry the object entry
168    * @param theName the new name
169    */
170   virtual bool                    renameObject( const QString& theEntry, const QString& theName );
171
172   int                             getObjectDisplayOrder( const int theViewId,
173                                                          const Handle(HYDROData_Entity)& theObject ) const;
174   QPoint                          getPopupPosition() const;
175
176 protected:
177   CAM_DataModel*                  createDataModel();
178
179 public slots:
180   virtual bool                    activateModule( SUIT_Study* );
181   virtual bool                    deactivateModule( SUIT_Study* );
182
183 protected:
184   virtual LightApp_Operation*     createOperation( const int ) const;
185   virtual bool                    reusableOperation( const int id );
186
187   virtual void                    customEvent( QEvent* );
188   virtual bool                    eventFilter( QObject*, QEvent* );
189
190 protected slots:
191   void                            onOperation();
192   void                            onDelete();
193
194
195   bool                            onUndo( int theNumActions );
196   bool                            onRedo( int theNumActions );
197
198   virtual void                    onViewManagerAdded( SUIT_ViewManager* );
199   virtual void                    onViewManagerRemoved( SUIT_ViewManager* );
200   virtual void                    onViewCreated( SUIT_ViewWindow* );
201
202   void                            onViewPortMouseEvent( QGraphicsSceneMouseEvent* );
203
204   void                            onMouseMove( SUIT_ViewWindow*, QMouseEvent* );
205
206 private:
207   void                            updateViewer( HYDROGUI_AbstractDisplayer* theDisplayer, 
208                                                 const bool theIsInit = false, 
209                                                 const bool theIsForced = false, 
210                                                 const bool theDoFitAll = false );
211
212   void                            createSelector( SUIT_ViewManager* viewMgr );
213
214   bool                            setUpdateEnabled( const bool theState );
215   bool                            isUpdateEnabled() const;
216
217   QStringList                     storeSelection() const;
218   void                            restoreSelection( const QStringList& theEntryList );
219
220 private:
221   void                            createActions();
222   void                            createMenus();
223   void                            createPopups();
224   void                            createToolbars();
225
226   void                            createUndoRedoActions();
227   void                            updateUndoRedoControls();
228
229 private:
230   QAction*                        createAction( const int theId, const QString& theSuffix,
231                                                 const QString& theImg = QString::null,
232                                                 const int theKey = 0, const bool isToggle = false,
233                                                 const QString& theSlot = QString::null );
234
235 private:
236   HYDROGUI_Displayer*             myDisplayer;
237   HYDROGUI_OCCDisplayer*          myOCCDisplayer;
238   HYDROGUI_VTKPrsDisplayer*       myVTKDisplayer;
239
240   ViewManagerMap                  myViewManagerMap;
241   ViewId2Entry2ObjectStateMap     myObjectStateMap;
242
243   QMap<int, QStringList>          myObjectDisplayOrderMap;
244
245   ViewId2ListOfShapes             myShapesMap;
246   ViewId2ListOfVTKPrs             myVTKPrsMap;
247   QPoint                          myPopupPos;
248   bool                            myIsUpdateEnabled;
249
250   QStringList                     myGeomObjectsToImport; ///< entries of GEOM objects to be imported
251 };
252
253 #endif