Salome HOME
refs #525: autocolor of zones in a calculation case.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index 4aef231e67efa6884f518361b1249f7195367b76..e0f4f8c8cb236158b8a3d832ec24e858e784d8c3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
@@ -6,7 +6,7 @@
 // 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
 #include "HYDROGUI_ImportGeomObjectOp.h"
 #include "HYDROGUI_ShowHideOp.h"
 
+#include <HYDROData_Tool.h>
 #include <HYDROData_Image.h>
+#include <HYDROData_Stream.h>
 #include <HYDROData_Profile.h>
 #include <HYDROData_Lambert93.h>
-#include <HYDROData_Tool.h>
+#include <HYDROData_Polyline3D.h>
 
 #include <HYDROData_OperationsFactory.h>
 
-#include <CurveCreator_Utils.h>
+#include <CurveCreator_Utils.hxx>
 
 #include <GraphicsView_ViewFrame.h>
 #include <GraphicsView_ViewManager.h>
@@ -259,6 +261,12 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy )
   myVTKPrsMap.clear();
   */
 
+  // clear the status bar
+  SUIT_Desktop* aDesktop = getApp()->desktop();
+  if ( aDesktop && aDesktop->statusBar() ) {
+    aDesktop->statusBar()->clearMessage();
+  }
+
   // clear the data model's list of copying objects
   HYDROGUI_DataModel::changeCopyingObjects( HYDROData_SequenceOfObjects() );
 
@@ -333,6 +341,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
   bool anIsGroup = false;
   bool anIsObjectCanBeColored = false;
   bool isRoot = false;
+  bool isStreamHasBottom = false;
 
   SUIT_SelectionMgr* aSelectionMgr = getApp()->selectionMgr();
   SUIT_DataOwnerPtrList anOwners;
@@ -444,7 +453,13 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
       else if( anObjectKind == KIND_OBSTACLE )
         anIsObstacle = true;
       else if( anObjectKind == KIND_STREAM )
+      {
         anIsStream = true;
+        Handle(HYDROData_Stream) aStream = 
+          Handle(HYDROData_Stream)::DownCast( anObject );
+        if ( !aStream.IsNull() )
+            isStreamHasBottom = !aStream->GetBottomPolyline().IsNull();
+      }
       else if( anObjectKind == KIND_CHANNEL )
         anIsChannel = true;
       else if( anObjectKind == KIND_DIGUE )
@@ -593,6 +608,12 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
       else if( anIsStream )
       {
         theMenu->addAction( action( EditStreamId ) );
+        if ( action( RiverBottomContextId ) )
+        {
+            theMenu->addAction( action( RiverBottomContextId ) );
+            action( RiverBottomContextId )->setEnabled( !isStreamHasBottom );
+        }
+        theMenu->addAction( action( ProfileInterpolateId ) );
         theMenu->addSeparator();
       }
       else if( anIsChannel )
@@ -937,6 +958,23 @@ void HYDROGUI_Module::setIsToUpdate( const Handle(HYDROData_Entity)& theObject,
 }
 
 /////////////////// OCC SHAPES PROCESSING
+QList<HYDROGUI_Shape*> HYDROGUI_Module::getObjectShapes( const int  theViewId,
+                                                         ObjectKind theKind ) const
+{
+  QList<HYDROGUI_Shape*> aResult;
+
+  if ( myShapesMap.contains( theViewId ) )
+  {
+    const ListOfShapes& aViewShapes = myShapesMap.value( theViewId );
+    foreach ( HYDROGUI_Shape* aShape, aViewShapes )
+    {
+      if( aShape && aShape->getObject()->GetKind()==theKind )
+        aResult.append( aShape );
+    }
+  }
+  return aResult;
+}
+
 HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int                       theViewId,
                                                  const Handle(HYDROData_Entity)& theObject ) const
 {
@@ -1519,10 +1557,10 @@ void HYDROGUI_Module::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent*
       HYDROData_Document::Document( aStudyId )->Transform( aWPnt, false );
       double WX = aWPnt.X(), WY = aWPnt.Y();
 
-      QString aXStr = HYDROGUI_Tool::GetCoordinateString( X );
-      QString anYStr = HYDROGUI_Tool::GetCoordinateString( Y );
-      QString aWXStr = HYDROGUI_Tool::GetCoordinateString( WX );
-      QString aWYStr = HYDROGUI_Tool::GetCoordinateString( WY );
+      QString aXStr = HYDROGUI_Tool::GetCoordinateString( X, true );
+      QString anYStr = HYDROGUI_Tool::GetCoordinateString( Y, true );
+      QString aWXStr = HYDROGUI_Tool::GetCoordinateString( WX, true );
+      QString aWYStr = HYDROGUI_Tool::GetCoordinateString( WY, true );
       QString aMsg = tr( "COORDINATES_INFO" );
       aMsg = aMsg.arg( aXStr ).arg( anYStr ).arg( aWXStr ).arg( aWYStr );
       aDesktop->statusBar()->showMessage( aMsg );