Salome HOME
refs #568: use ordered list view with selection synchronized with object browser...
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Tool.h
index 29bd4de731d59b217ca4db26dee8a50d42a157c5..fada415c5233880283e5493d286456419e6587d7 100644 (file)
@@ -1,12 +1,8 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
+// Copyright (C) 2014-2015  EDF-R&D
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #ifndef HYDROGUI_TOOL_H
 #define HYDROGUI_TOOL_H
 
-#include <HYDROData_Object.h>
+#include <HYDROData_Image.h>
 
 #include <GraphicsView_Defs.h>
+#include <GraphicsView_ViewPort.h>
+
+#include <TCollection_AsciiString.hxx>
+#include <TCollection_ExtendedString.hxx>
+#include <TCollection_HAsciiString.hxx>
+#include <TCollection_HExtendedString.hxx>
+
+#include <Image_PixMap.hxx>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
 
 class SUIT_ViewManager;
+class OCCViewer_ViewFrame;
 
 class HYDROGUI_DataModel;
 class HYDROGUI_Module;
 class HYDROGUI_Prs;
 
+class QDockWidget;
+class Handle(HYDROData_Document);
+
 /**
  * \class HYDROGUI_Tool
  * \brief This class contains several useful methods.
@@ -40,6 +52,59 @@ class HYDROGUI_Prs;
 class HYDROGUI_Tool
 {
 public:
+  /**
+   * \brief Convert \a TCollection_AsciiString to \a QString
+   */
+  static QString                                  ToQString( const TCollection_AsciiString& );
+
+  /**
+   * \brief Convert \a TCollection_ExtendedString to \a QString
+   */
+  static QString                                  ToQString( const TCollection_ExtendedString& );
+
+  /**
+   * \brief Convert \a Handle_TCollection_HAsciiString to \a QString
+   */
+  static QString                                  ToQString( const Handle(TCollection_HAsciiString)& );
+
+  /**
+   * \brief Convert \a Handle_TCollection_HExtendedString to \a QString
+   */
+  static QString                                  ToQString( const Handle(TCollection_HExtendedString)& );
+
+  /**
+   * \brief Convert \a QString to \a TCollection_AsciiString
+   */
+  static TCollection_AsciiString                  ToAsciiString( const QString& );
+
+  /**
+   * \brief Convert \a QString to \a TCollection_ExtendedString
+   */
+  static TCollection_ExtendedString               ToExtString( const QString& );
+
+  /**
+   * \brief Convert \a QString to \a Handle_TCollection_HAsciiString
+   */
+  static Handle(TCollection_HAsciiString)         ToHAsciiString( const QString& );
+
+  /**
+   * \brief Convert \a QString to \a Handle_TCollection_HExtendedString
+   */
+  static Handle(TCollection_HExtendedString)      ToHExtString( const QString& );
+
+  /**
+   * \brief Get the active study id.
+   * \return active study id
+   */
+  static int                      GetActiveStudyId();
+
+  /**
+   * \brief Get path to the temporary directory.
+   * \param theToCreate flag used to create a directory if it doesn't exist
+   * \return path
+   */
+  static QString                  GetTempDir( const bool theToCreate );
+
   /**
    * \brief Set the specified view manager to be active on the desktop.
    * \param theModule module
@@ -49,13 +114,19 @@ public:
                                                         SUIT_ViewManager* theViewManager );
 
   /**
+   * \brief Returns TRUE if object can be shown on the viewer.
+   * \param theObject data model object to check
+   * \param theViewerType viewer type
+   */
+  static bool                     IsObjectHasPresentation( const Handle(HYDROData_Entity)& theObject,
+                                                           const QString&                  theViewerType = "" );
+
+/**
    * \brief Get sub-objects to build presentations.
-   * \param theGUIModel data model
-   * \param theViewerId viewer id
+   * \param theModule module
    * \param theSeq sequence of sub-objects
    */
-  static void                     GetPrsSubObjects( const HYDROGUI_DataModel* theGUIModel,
-                                                    const int theViewerId,
+  static void                     GetPrsSubObjects( HYDROGUI_Module* theModule,
                                                     HYDROData_SequenceOfObjects& theSeq );
 
   /**
@@ -64,8 +135,227 @@ public:
    * \param theObjects list of existing presentations
    * \return presentation
    */
-  static HYDROGUI_Prs*            GetPresentation( const Handle(HYDROData_Object)& theObj,
+  static HYDROGUI_Prs*            GetPresentation( const Handle(HYDROData_Entity)& theObj,
                                                    const GraphicsView_ObjectList& theObjects );
+
+  /**
+   * \brief Get list of HYDRO presentations from the specified viewport.
+   * \param theViewPort viewport
+   * \return list of HYDRO presentations
+   */
+  static GraphicsView_ObjectList  GetPrsList( GraphicsView_ViewPort* theViewPort );
+
+  /**
+   * \brief Get list of the selected data objects.
+   * \param theModule module
+   * \return list of the selected data objects
+   */
+  static HYDROData_SequenceOfObjects GetSelectedObjects( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get the selected data object (first in the selected list).
+   * \param theModule module
+   * \return selected data object
+   */
+  static Handle(HYDROData_Entity) GetSelectedObject( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get the geometry data objects from document.
+   * \param theModule module
+   * \return sequence of data objects
+   */
+  static HYDROData_SequenceOfObjects GetGeometryObjects( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get the land covers from document.
+   * \param theModule module
+   * \return sequence of land covers
+   */
+  static HYDROData_SequenceOfObjects GetLandCovers( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get kind of objects the selected partition contains.
+   * \param theModule module
+   * \return object kind
+   */
+  static ObjectKind GetSelectedPartition( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get the selected GEOM objects.
+   * \param theModule module
+   * \param theTypes the acceptable GEOM object types
+   * \return list of GEOM objects entries
+   */
+  static QStringList GetSelectedGeomObjects( HYDROGUI_Module* theModule,
+                                             QList<GEOM::shape_type> theTypes );
+
+  /**
+   * \brief Find the data object with the specified name.
+   * \param theModule module
+   * \param theName name
+   * \param theObjectKind kind of object
+   * \return data object
+   */
+  static Handle(HYDROData_Entity) FindObjectByName( HYDROGUI_Module* theModule,
+                                                    const QString& theName,
+                                                    const ObjectKind theObjectKind = KIND_UNKNOWN );
+
+  /**
+   * \brief Find the data objects with the specified names.
+   * \param theModule module
+   * \param theNames list of names
+   * \param theObjectKind kind of object
+   * \return list of data objects
+   */
+  static HYDROData_SequenceOfObjects FindObjectsByNames( HYDROGUI_Module*   theModule,
+                                                         const QStringList& theNames,
+                                                         const ObjectKind   theObjectKind = KIND_UNKNOWN );
+
+  /**
+   * \brief Generate name for new object.
+   * \param theModule module
+   * \param thePrefix name prefix
+   * \param theUsedNames list of already used names
+   * \param theIsTryToUsePurePrefix if true - the prefix will be returned if the name equal to the prefix is not busy
+   * \return generated name
+   */
+  static QString                  GenerateObjectName( HYDROGUI_Module*   theModule,
+                                                      const QString&     thePrefix,
+                                                      const QStringList& theUsedNames = QStringList(),
+                                                      const bool         theIsTryToUsePurePrefix = false );
+
+  /**
+   * \brief Get id of the active view.
+   * \param theModule module
+   * \return view id
+   */
+  static size_t                   GetActiveViewId( HYDROGUI_Module* theModule,
+                                                   const QString&   theViewId = QString() );
+
+  /**
+   * \brief Get id of the active GraphicsView view.
+   * \param theModule module
+   * \return view id
+   */
+  static size_t                   GetActiveGraphicsViewId( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get id of the active OCC view.
+   * \param theModule module
+   * \return view id
+   */
+  static size_t                   GetActiveOCCViewId( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get list of ids of existing GraphicsView views.
+   * \param theModule module
+   * \return list of view ids
+   */
+  static QList<size_t>            GetGraphicsViewIdList( HYDROGUI_Module* theModule );
+
+  /**
+   * \brief Get list of ids of existing OCC views.
+   * \param theModule module
+   * \return list of view ids
+   */
+  static QList<size_t>            GetOCCViewIdList( HYDROGUI_Module* theModule );
+
+
+  /**
+   * \brief Change OCC viewer action visibility.
+   * \param theViewFrame OCC viewer frame
+   * \param theActionId an action index, which state should be changed
+   * \param isShown the action visibility state
+   */
+  static void                     setOCCActionShown( OCCViewer_ViewFrame* theViewFrame,
+                                                     const int theActionId,
+                                                     const bool isShown );
+
+  /**
+   * \brief Change OCC viewer action visibility for all opened views.
+   * \param theActionId an action index, which state should be changed
+   * \param isShown the action visibility state
+   */
+  static void                     setOCCActionShown( HYDROGUI_Module* theModule,
+                                                     const int theActionId,
+                                                     const bool isShown );
+
+  /**
+   * \brief Get the list of references (recursively) for the specified data object
+   * \param theObj data object
+   * \param theRefObjects list of reference objects
+   * \param theRefNames list of reference object names
+   */
+  static void                     GetObjectReferences( const Handle(HYDROData_Entity)& theObj,
+                                                       HYDROData_SequenceOfObjects& theRefObjects,
+                                                       QStringList& theRefNames );
+
+  /**
+   * \brief Get the list of back-references for the specified object
+   * \param theModule module
+   * \param theObj data object
+   * \return list of back-reference objects
+   */
+  static HYDROData_SequenceOfObjects GetObjectBackReferences( HYDROGUI_Module*                theModule,
+                                                              const Handle(HYDROData_Entity)& theObj );
+
+  /**
+   * \brief Get the map of back-references for the specified list of objects
+   * \param theModule module
+   * \param theObjectNames names of objects
+   * \return map of back-reference objects
+   */
+  static QMap<QString,HYDROData_SequenceOfObjects> GetObjectsBackReferences( HYDROGUI_Module*   theModule,
+                                                                             const QStringList& theObjectNames );
+
+  /**
+   * \brief Get father dock window for widget 
+   * \param wid widget
+   * \return dock window
+   */
+  static QDockWidget*             WindowDock( QWidget* wid );
+
+  /**
+   * \brief Generates the filling color for intersected zone
+   * \param theModule module
+   * \param theZoneNames list of intersected zones
+   * \return result color
+   */
+  static QColor                   GenerateFillingColor( HYDROGUI_Module*   theModule,
+                                                        const QStringList& theZoneNames );
+
+  /**
+   * \brief Generates the filling color for intersected zone
+   * \param theDoc model document
+   * \param theZoneNames list of intersected zones
+   * \return result color
+   */
+  static QColor                   GenerateFillingColor( const Handle(HYDROData_Document)& theDoc,
+                                                        const QStringList&                theZoneNames );
+
+  /**
+   * \brief Find names of existing objects of the given kind.
+   * \param theDoc model document
+   * \param theObjectKind kind of object
+   * \return list of names
+   */
+  static QStringList              FindExistingObjectsNames( const Handle(HYDROData_Document)& theDoc, 
+                                                            const ObjectKind theObjectKind, 
+                                                            bool isCheckValidProfile = false );
+
+  /**
+   * \brief Converts coordinate value to string.
+   * \param theNumber coordinate as a number
+   * \return coordinate as a string
+   */
+  static QString                  GetCoordinateString( const double theNumber, bool isInLocale );
+
+  /**
+   * \brief Converts Qt QImage object to OCCT Image_PixMap object.
+   * \param theImage QImage object
+   * \return Image_PixMap object
+   */
+  static Handle(Image_PixMap)     Pixmap( const QImage& theImage );
 };
 
 #endif