Salome HOME
refs #441: crash in digue construction
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.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_TOOL_H
24 #define HYDROGUI_TOOL_H
25
26 #include <HYDROData_Image.h>
27
28 #include <GraphicsView_Defs.h>
29 #include <GraphicsView_ViewPort.h>
30
31 #include <TCollection_AsciiString.hxx>
32 #include <TCollection_ExtendedString.hxx>
33 #include <TCollection_HAsciiString.hxx>
34 #include <TCollection_HExtendedString.hxx>
35
36 // IDL includes
37 #include <SALOMEconfig.h>
38 #include CORBA_SERVER_HEADER(GEOM_Gen)
39
40 class SUIT_ViewManager;
41 class OCCViewer_ViewFrame;
42
43 class HYDROGUI_DataModel;
44 class HYDROGUI_Module;
45 class HYDROGUI_Prs;
46
47 class QDockWidget;
48 class Handle(HYDROData_Document);
49
50 /**
51  * \class HYDROGUI_Tool
52  * \brief This class contains several useful methods.
53  */
54 class HYDROGUI_Tool
55 {
56 public:
57   /**
58    * \brief Convert \a TCollection_AsciiString to \a QString
59    */
60   static QString                                  ToQString( const TCollection_AsciiString& );
61
62   /**
63    * \brief Convert \a TCollection_ExtendedString to \a QString
64    */
65   static QString                                  ToQString( const TCollection_ExtendedString& );
66
67   /**
68    * \brief Convert \a Handle_TCollection_HAsciiString to \a QString
69    */
70   static QString                                  ToQString( const Handle(TCollection_HAsciiString)& );
71
72   /**
73    * \brief Convert \a Handle_TCollection_HExtendedString to \a QString
74    */
75   static QString                                  ToQString( const Handle(TCollection_HExtendedString)& );
76
77   /**
78    * \brief Convert \a QString to \a TCollection_AsciiString
79    */
80   static TCollection_AsciiString                  ToAsciiString( const QString& );
81
82   /**
83    * \brief Convert \a QString to \a TCollection_ExtendedString
84    */
85   static TCollection_ExtendedString               ToExtString( const QString& );
86
87   /**
88    * \brief Convert \a QString to \a Handle_TCollection_HAsciiString
89    */
90   static Handle(TCollection_HAsciiString)         ToHAsciiString( const QString& );
91
92   /**
93    * \brief Convert \a QString to \a Handle_TCollection_HExtendedString
94    */
95   static Handle(TCollection_HExtendedString)      ToHExtString( const QString& );
96
97   /**
98    * \brief Get the active study id.
99    * \return active study id
100    */
101   static int                      GetActiveStudyId();
102
103   /**
104    * \brief Get path to the temporary directory.
105    * \param theToCreate flag used to create a directory if it doesn't exist
106    * \return path
107    */
108   static QString                  GetTempDir( const bool theToCreate );
109
110   /**
111    * \brief Set the specified view manager to be active on the desktop.
112    * \param theModule module
113    * \param theViewManager view manager
114    */
115   static void                     SetActiveViewManager( HYDROGUI_Module* theModule,
116                                                         SUIT_ViewManager* theViewManager );
117
118   /**
119    * \brief Returns TRUE if object can be shown on the viewer.
120    * \param theObject data model object to check
121    * \param theViewerType viewer type
122    */
123   static bool                     IsObjectHasPresentation( const Handle(HYDROData_Entity)& theObject,
124                                                            const QString&                  theViewerType = "" );
125
126 /**
127    * \brief Get sub-objects to build presentations.
128    * \param theModule module
129    * \param theSeq sequence of sub-objects
130    */
131   static void                     GetPrsSubObjects( HYDROGUI_Module* theModule,
132                                                     HYDROData_SequenceOfObjects& theSeq );
133
134   /**
135    * \brief Get presentation built for specified data object.
136    * \param theObj data object
137    * \param theObjects list of existing presentations
138    * \return presentation
139    */
140   static HYDROGUI_Prs*            GetPresentation( const Handle(HYDROData_Entity)& theObj,
141                                                    const GraphicsView_ObjectList& theObjects );
142
143   /**
144    * \brief Get list of HYDRO presentations from the specified viewport.
145    * \param theViewPort viewport
146    * \return list of HYDRO presentations
147    */
148   static GraphicsView_ObjectList  GetPrsList( GraphicsView_ViewPort* theViewPort );
149
150   /**
151    * \brief Get list of the selected data objects.
152    * \param theModule module
153    * \return list of the selected data objects
154    */
155   static HYDROData_SequenceOfObjects GetSelectedObjects( HYDROGUI_Module* theModule );
156
157   /**
158    * \brief Get the selected data object (first in the selected list).
159    * \param theModule module
160    * \return selected data object
161    */
162   static Handle(HYDROData_Entity) GetSelectedObject( HYDROGUI_Module* theModule );
163
164   /**
165    * \brief Get the geometry data objects from document.
166    * \param theModule module
167    * \return sequence of data objects
168    */
169   static HYDROData_SequenceOfObjects GetGeometryObjects( HYDROGUI_Module* theModule );
170
171   /**
172    * \brief Get kind of objects the selected partition contains.
173    * \param theModule module
174    * \return object kind
175    */
176   static ObjectKind GetSelectedPartition( HYDROGUI_Module* theModule );
177
178   /**
179    * \brief Get the selected GEOM objects.
180    * \param theModule module
181    * \param theTypes the acceptable GEOM object types
182    * \return list of GEOM objects entries
183    */
184   static QStringList GetSelectedGeomObjects( HYDROGUI_Module* theModule,
185                                              QList<GEOM::shape_type> theTypes );
186
187   /**
188    * \brief Find the data object with the specified name.
189    * \param theModule module
190    * \param theName name
191    * \param theObjectKind kind of object
192    * \return data object
193    */
194   static Handle(HYDROData_Entity) FindObjectByName( HYDROGUI_Module* theModule,
195                                                     const QString& theName,
196                                                     const ObjectKind theObjectKind = KIND_UNKNOWN );
197
198   /**
199    * \brief Find the data objects with the specified names.
200    * \param theModule module
201    * \param theNames list of names
202    * \param theObjectKind kind of object
203    * \return list of data objects
204    */
205   static HYDROData_SequenceOfObjects FindObjectsByNames( HYDROGUI_Module*   theModule,
206                                                          const QStringList& theNames,
207                                                          const ObjectKind   theObjectKind = KIND_UNKNOWN );
208
209   /**
210    * \brief Generate name for new object.
211    * \param theModule module
212    * \param thePrefix name prefix
213    * \param theUsedNames list of already used names
214    * \param theIsTryToUsePurePrefix if true - the prefix will be returned if the name equal to the prefix is not busy
215    * \return generated name
216    */
217   static QString                  GenerateObjectName( HYDROGUI_Module*   theModule,
218                                                       const QString&     thePrefix,
219                                                       const QStringList& theUsedNames = QStringList(),
220                                                       const bool         theIsTryToUsePurePrefix = false );
221
222   /**
223    * \brief Get id of the active view.
224    * \param theModule module
225    * \return view id
226    */
227   static size_t                   GetActiveViewId( HYDROGUI_Module* theModule,
228                                                    const QString&   theViewId = QString() );
229
230   /**
231    * \brief Get id of the active GraphicsView view.
232    * \param theModule module
233    * \return view id
234    */
235   static size_t                   GetActiveGraphicsViewId( HYDROGUI_Module* theModule );
236
237   /**
238    * \brief Get id of the active OCC view.
239    * \param theModule module
240    * \return view id
241    */
242   static size_t                   GetActiveOCCViewId( HYDROGUI_Module* theModule );
243
244   /**
245    * \brief Get list of ids of existing GraphicsView views.
246    * \param theModule module
247    * \return list of view ids
248    */
249   static QList<size_t>            GetGraphicsViewIdList( HYDROGUI_Module* theModule );
250
251   /**
252    * \brief Get list of ids of existing OCC views.
253    * \param theModule module
254    * \return list of view ids
255    */
256   static QList<size_t>            GetOCCViewIdList( HYDROGUI_Module* theModule );
257
258
259   /**
260    * \brief Change OCC viewer action visibility.
261    * \param theViewFrame OCC viewer frame
262    * \param theActionId an action index, which state should be changed
263    * \param isShown the action visibility state
264    */
265   static void                     setOCCActionShown( OCCViewer_ViewFrame* theViewFrame,
266                                                      const int theActionId,
267                                                      const bool isShown );
268
269   /**
270    * \brief Change OCC viewer action visibility for all opened views.
271    * \param theActionId an action index, which state should be changed
272    * \param isShown the action visibility state
273    */
274   static void                     setOCCActionShown( HYDROGUI_Module* theModule,
275                                                      const int theActionId,
276                                                      const bool isShown );
277
278   /**
279    * \brief Get the list of references (recursively) for the specified data object
280    * \param theObj data object
281    * \param theRefObjects list of reference objects
282    * \param theRefNames list of reference object names
283    */
284   static void                     GetObjectReferences( const Handle(HYDROData_Entity)& theObj,
285                                                        HYDROData_SequenceOfObjects& theRefObjects,
286                                                        QStringList& theRefNames );
287
288   /**
289    * \brief Get the list of back-references for the specified object
290    * \param theModule module
291    * \param theObj data object
292    * \return list of back-reference objects
293    */
294   static HYDROData_SequenceOfObjects GetObjectBackReferences( HYDROGUI_Module*                theModule,
295                                                               const Handle(HYDROData_Entity)& theObj );
296
297   /**
298    * \brief Get the map of back-references for the specified list of objects
299    * \param theModule module
300    * \param theObjectNames names of objects
301    * \return map of back-reference objects
302    */
303   static QMap<QString,HYDROData_SequenceOfObjects> GetObjectsBackReferences( HYDROGUI_Module*   theModule,
304                                                                              const QStringList& theObjectNames );
305
306   /**
307    * \brief Get father dock window for widget 
308    * \param wid widget
309    * \return dock window
310    */
311   static QDockWidget*             WindowDock( QWidget* wid );
312
313   /**
314    * \brief Generates the filling color for intersected zone
315    * \param theModule module
316    * \param theZoneNames list of intersected zones
317    * \return result color
318    */
319   static QColor                   GenerateFillingColor( HYDROGUI_Module*   theModule,
320                                                         const QStringList& theZoneNames );
321
322   /**
323    * \brief Generates the filling color for intersected zone
324    * \param theDoc model document
325    * \param theZoneNames list of intersected zones
326    * \return result color
327    */
328   static QColor                   GenerateFillingColor( const Handle(HYDROData_Document)& theDoc,
329                                                         const QStringList&                theZoneNames );
330
331   /**
332    * \brief Find names of existing objects of the given kind.
333    * \param theDoc model document
334    * \param theObjectKind kind of object
335    * \return list of names
336    */
337   static QStringList              FindExistingObjectsNames( const Handle(HYDROData_Document)& theDoc, 
338                                                             const ObjectKind theObjectKind, 
339                                                             bool isCheckValidProfile = false );
340
341   /**
342    * \brief Converts coordinate value to string.
343    * \param theNumber coordinate as a number
344    * \return coordinate as a string
345    */
346   static QString                  GetCoordinateString( const double theNumber, bool isInLocale );
347 };
348
349 #endif