Salome HOME
Preparing move of the engine code into GUI (and restoring trace)
[modules/paravis.git] / src / PVGUI / PVGUI_Module.h
1 // PARAVIS : ParaView wrapper SALOME module
2 //
3 // Copyright (C) 2010-2014  CEA/DEN, EDF R&D
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 //
19 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 //
21 // File   : PVGUI_Module.h
22 // Author : Sergey ANIKIN
23 //
24
25
26 #ifndef PVGUI_Module_H
27 #define PVGUI_Module_H
28
29 #include <SalomeApp_Module.h>
30 #include <SALOMEconfig.h>
31 #include CORBA_SERVER_HEADER(PVSERVER_Gen)
32
33 #include <ostream>
34 #include <vtkType.h>
35 #include <QTimer>
36
37 #include <pqVariableType.h>
38
39 class QMenu;
40 class QDockWidget;
41 class QToolBar;
42 class vtkPVMain;
43 class pqOptions;
44 class pqServer;
45 class pqMainWindowCore;
46 class vtkEventQtSlotConnect;
47 class pqPythonScriptEditor;
48 class pqPVApplicationCore;
49 class pqDataRepresentation;
50 class pqRepresentation;
51 class PVViewer_GUIElements;
52 class PVViewer_EngineWrapper;
53
54 class PVGUI_Module : public SalomeApp_Module
55 {
56   Q_OBJECT
57    
58   //! Menu actions
59   enum { // Menu "File"
60      OpenFileId,
61
62      LoadStateId,
63      SaveStateId,
64
65      SaveDataId,
66      SaveScreenshotId,
67      ExportId,
68
69      SaveAnimationId,
70      SaveGeometryId,
71
72      ConnectId,
73      DisconnectId,
74
75      // Menu "Edit"
76      UndoId,
77      RedoId,
78
79      CameraUndoId,
80      CameraRedoId,
81
82      FindDataId,
83      ChangeInputId,
84      IgnoreTimeId,
85      DeleteId,
86      DeleteAllId,
87
88      SettingsId,
89      ViewSettingsId,
90
91      // Menu "View"
92      FullScreenId,
93
94      // Menu "Animation"
95      FirstFrameId,
96      PreviousFrameId,
97      PlayId,
98      NextFrameId,
99      LastFrameId,
100      LoopId,
101
102      // Menu "Tools"
103      CreateCustomFilterId,
104      ManageCustomFiltersId,
105      CreateLookmarkId,
106      ManageLinksId,
107      AddCameraLinkId,
108      ManagePluginsExtensionsId,
109      DumpWidgetNamesId,
110      RecordTestId,
111      RecordTestScreenshotId,
112      PlayTestId,
113      MaxWindowSizeId,
114      CustomWindowSizeId,
115      TimerLogId,
116      OutputWindowId,
117      PythonShellId,
118      ShowTraceId,
119      RestartTraceId,
120
121      // Menu "Help"
122      AboutParaViewId,
123      ParaViewHelpId,
124      EnableTooltipsId,
125
126      // Menu "Window" - "New Window"
127      ParaViewNewWindowId,
128
129      // "Save state" ParaVis module root object popup
130      SaveStatePopupId,
131
132      // "Add state" and "Reload state" popups
133      AddStatePopupId,
134      CleanAndAddStatePopupId,
135
136      // "Rename" and "Delete" popups (Object Browser)
137      ParaVisRenameId,
138      ParaVisDeleteId
139   };
140
141 public:
142   PVGUI_Module();
143   ~PVGUI_Module();
144
145   virtual void           initialize( CAM_Application* );
146   virtual void           windows( QMap<int, int>& ) const;
147
148   virtual QString engineIOR() const;  // to be removed when becoming Light
149
150   void openFile(const char* theName);
151   void executeScript(const char *script);
152   void saveParaviewState(const char* theFileName);
153   void loadParaviewState(const char* theFileName);
154   void clearParaviewState();
155
156   QString getTraceString();
157   void startTrace();
158   void stopTrace();
159   void saveTrace(const char* theName);
160
161   pqServer* getActiveServer();
162
163   virtual void createPreferences();
164
165   virtual void contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle);
166
167   inline static PVViewer_EngineWrapper * GetEngine();
168   inline static PVSERVER_ORB::PVSERVER_Gen_var GetCPPEngine();  // to be removed once light!
169   inline static pqPVApplicationCore * GetPVApplication();
170
171   virtual CAM_DataModel* createDataModel();
172
173 public slots:
174   //void onImportFromVisu(QString theEntry);
175
176 private:
177   void deleteTemporaryFiles();
178  
179   //! Create actions for ParaView GUI operations
180   void                   pvCreateActions();
181
182   //! Create menus for ParaView GUI operations duplicating menus in pqMainWindow ParaView class
183   void                   pvCreateMenus();
184
185   //! Create toolbars for ParaView GUI operations duplicating toolbars in pqMainWindow ParaView class
186   void                   pvCreateToolBars();
187
188   //! Create dock widgets for ParaView widgets
189   void                   setupDockWidgets();
190
191   //! Save states of dockable ParaView widgets
192   void                   saveDockWidgetsState();
193
194   //! Restore states of dockable ParaView widgets
195   void                   restoreDockWidgetsState();
196
197   //! Shows or hides ParaView view window
198   void                   showView( bool );    
199
200   //! Returns QMenu object for a given menu id
201   QMenu*                 getMenu( const int );
202   
203   //! Discover help project files from the resources.
204   QString getHelpFileName();
205
206   //! Create actions for ParaViS
207   void createActions();
208
209   //! Create menus for ParaViS
210   void createMenus();
211
212   //! Load selected state
213   void loadSelectedState(bool toClear);
214
215   //! Get list of embedded macros files
216   QStringList getEmbeddedMacrosList();
217
218   //! update macros state
219   void updateMacros();
220
221   //! store visibility of the common dockable windows (OB, PyConsole, ... etc.)
222   void storeCommonWindowsState();
223
224   //! restore visibility of the common dockable windows (OB, PyConsole, ... etc.)
225   void restoreCommonWindowsState();
226
227 private slots:
228
229   void showHelpForProxy( const QString&, const QString& );
230   
231   void onPreAccept();
232   void onPostAccept();
233   void endWaitCursor();
234
235   //  void buildToolbarsMenu();
236
237   //void showParaViewHelp();
238   //void showHelp(const QString& url);
239
240   void onDataRepresentationUpdated();
241
242   void onStartProgress();
243   void onEndProgress();
244   void onShowTrace();
245   void onRestartTrace();
246
247   void onNewParaViewWindow();
248
249   void onSaveMultiState();
250   void onAddState();
251   void onCleanAddState();
252
253   void onRename();
254   void onDelete();
255
256 public slots:
257   virtual bool           activateModule( SUIT_Study* );
258   virtual bool           deactivateModule( SUIT_Study* );
259   virtual void           onApplicationClosed( SUIT_Application* );
260   virtual void           studyClosed( SUIT_Study* );
261
262 protected slots:
263   virtual void           onModelOpened();
264   virtual void           onPushTraceTimer();
265   virtual void           onInitTimer();
266
267 private:
268   int                    mySelectionControlsTb;
269   int                    mySourcesMenuId;
270   int                    myFiltersMenuId;
271   int                    myToolbarsMenuId;
272   int                    myMacrosMenuId;
273   int                    myRecentMenuId;
274   
275   typedef QMap<QWidget*, bool> WgMap;
276   WgMap                  myDockWidgets;
277   WgMap                  myToolbars;
278   WgMap                  myToolbarBreaks;
279   QList<QMenu*>          myMenus;
280
281   typedef QMap<int, bool> DockWindowMap;         
282   DockWindowMap           myCommonMap; 
283
284   QStringList            myTemporaryFiles;
285
286   QtMsgHandler           myOldMsgHandler;
287
288   vtkEventQtSlotConnect *VTKConnect;
289
290   pqPythonScriptEditor* myTraceWindow;
291
292   int myStateCounter;
293
294   //! Single shot timer used to connect to the PVServer, and start the trace.
295   QTimer             * myInitTimer;
296
297   //! Timer used to regularly push the Python trace to the engine.
298   QTimer             * myPushTraceTimer;
299
300   PVViewer_GUIElements * myGuiElements;
301
302   static PVSERVER_ORB::PVSERVER_Gen_var MyEngine;
303
304 };
305
306 #endif // PVGUI_Module_H