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