Salome HOME
Fix for the bug #45: check and warning when the same image is used in 2 arguments.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_DataModel.cxx
index 9432c01c02f2cd996db52aad98d688073acce22c..2369f1f52e58533dd3f44eff1453c7b70e8056a2 100644 (file)
@@ -34,7 +34,8 @@
 #include <HYDROData_Image.h>
 #include <HYDROData_ImmersibleZone.h>
 #include <HYDROData_Iterator.h>
-#include <HYDROData_Polyline.h>
+#include <HYDROData_Polyline3D.h>
+#include <HYDROData_PolylineXY.h>
 #include <HYDROData_Profile.h>
 #include <HYDROData_VisualState.h>
 #include <HYDROData_Region.h>
@@ -43,6 +44,7 @@
 #include <HYDROData_Channel.h>
 #include <HYDROData_Digue.h>
 #include <HYDROData_River.h>
+#include <HYDROData_Stream.h>
 
 #include <CAM_Application.h>
 #include <CAM_DataObject.h>
@@ -250,7 +252,10 @@ void HYDROGUI_DataModel::update( const int theStudyId )
   LightApp_DataObject* aCalculRootObj = createObject( aRootObj, tr( partitionName( KIND_CALCULATION ).toAscii() ) );
 
   // POLYLINES
-  LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, tr( partitionName( KIND_POLYLINE ).toAscii() ) );
+  LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, tr( partitionName( KIND_POLYLINEXY ).toAscii() ) );
+
+  // POLYLINES
+  LightApp_DataObject* aPolyline3DRootObj = createObject( aRootObj, tr( partitionName( KIND_POLYLINE ).toAscii() ) );
 
   // PROFILES
   LightApp_DataObject* aProfileRootObj = createObject( aRootObj, tr( partitionName( KIND_PROFILE ).toAscii() ) );
@@ -262,116 +267,139 @@ void HYDROGUI_DataModel::update( const int theStudyId )
   for( ; anIterator.More(); anIterator.Next() ) {
     Handle(HYDROData_Entity) anObj = anIterator.Current();
 
-    switch ( anObj->GetKind() ) {
-      case KIND_IMAGE:
-      {
-        Handle(HYDROData_Image) anImageObj =
-          Handle(HYDROData_Image)::DownCast( anObj );
-        if( !anImageObj.IsNull() ) {
-          createObject( anImageRootObj, anImageObj );
+    if ( !anObj.IsNull() )
+    {
+      switch ( anObj->GetKind() ) {
+        case KIND_IMAGE:
+        {
+          Handle(HYDROData_Image) anImageObj =
+            Handle(HYDROData_Image)::DownCast( anObj );
+          if( !anImageObj.IsNull() ) {
+            createObject( anImageRootObj, anImageObj );
+          }
+
+          break;
         }
+        case KIND_BATHYMETRY:
+        {
+          Handle(HYDROData_Bathymetry) aBathymetryObj =
+            Handle(HYDROData_Bathymetry)::DownCast( anObj );
+          if( !aBathymetryObj.IsNull() ) {
+            createObject( aBathymetryRootObj, aBathymetryObj );
+          }
 
-        break;
-      }
-      case KIND_BATHYMETRY:
-      {
-        Handle(HYDROData_Bathymetry) aBathymetryObj =
-          Handle(HYDROData_Bathymetry)::DownCast( anObj );
-        if( !aBathymetryObj.IsNull() ) {
-          createObject( aBathymetryRootObj, aBathymetryObj );
+          break;
         }
+        case KIND_CHANNEL:
+        {
+          Handle(HYDROData_Channel) aChannelObj =
+            Handle(HYDROData_Channel)::DownCast( anObj );
+          if( !aChannelObj.IsNull() ) {
+            createObject( anArtificialObjectsRootObj, aChannelObj );
+          }
 
-        break;
-      }
-      case KIND_CHANNEL:
-      {
-        Handle(HYDROData_Channel) aChannelObj =
-          Handle(HYDROData_Channel)::DownCast( anObj );
-        if( !aChannelObj.IsNull() ) {
-          createObject( anArtificialObjectsRootObj, aChannelObj );
+          break;
         }
+        case KIND_DIGUE:
+        {
+          Handle(HYDROData_Digue) aDigueObj =
+            Handle(HYDROData_Digue)::DownCast( anObj );
+          if( !aDigueObj.IsNull() ) {
+            createObject( anArtificialObjectsRootObj, aDigueObj );
+          }
 
-        break;
-      }
-      case KIND_DIGUE:
-      {
-        Handle(HYDROData_Digue) aDigueObj =
-          Handle(HYDROData_Digue)::DownCast( anObj );
-        if( !aDigueObj.IsNull() ) {
-          createObject( anArtificialObjectsRootObj, aDigueObj );
+          break;
         }
+        case KIND_IMMERSIBLE_ZONE:
+        {
+          Handle(HYDROData_ImmersibleZone) anImmersibleZoneObj =
+            Handle(HYDROData_ImmersibleZone)::DownCast( anObj );
+          if( !anImmersibleZoneObj.IsNull() ) {
+            createObject( aNaturalObjectsRootObj, anImmersibleZoneObj );
+          }
 
-        break;
-      }
-      case KIND_IMMERSIBLE_ZONE:
-      {
-        Handle(HYDROData_ImmersibleZone) anImmersibleZoneObj =
-          Handle(HYDROData_ImmersibleZone)::DownCast( anObj );
-        if( !anImmersibleZoneObj.IsNull() ) {
-          createObject( aNaturalObjectsRootObj, anImmersibleZoneObj );
+          break;
         }
+        case KIND_RIVER:
+        {
+          Handle(HYDROData_River) aRiverObj =
+            Handle(HYDROData_River)::DownCast( anObj );
+          if( !aRiverObj.IsNull() ) {
+            createObject( aNaturalObjectsRootObj, aRiverObj );
+          }
 
-        break;
-      }
-      case KIND_RIVER:
-      {
-        Handle(HYDROData_River) aRiverObj =
-          Handle(HYDROData_River)::DownCast( anObj );
-        if( !aRiverObj.IsNull() ) {
-          createObject( aNaturalObjectsRootObj, aRiverObj );
+          break;
         }
+        case KIND_STREAM:
+        {
+          Handle(HYDROData_Stream) aStreamObj =
+            Handle(HYDROData_Stream)::DownCast( anObj );
+          if( !aStreamObj.IsNull() ) {
+            createObject( aNaturalObjectsRootObj, aStreamObj );
+          }
 
-        break;
-      }
-      case KIND_OBSTACLE:
-      {
-        Handle(HYDROData_Obstacle) anObstacleObj =
-          Handle(HYDROData_Obstacle)::DownCast( anObj );
-        if( !anObstacleObj.IsNull() ) {
-          createObject( anObstaclesRootObj, anObstacleObj );
+          break;
         }
+        case KIND_OBSTACLE:
+        {
+          Handle(HYDROData_Obstacle) anObstacleObj =
+            Handle(HYDROData_Obstacle)::DownCast( anObj );
+          if( !anObstacleObj.IsNull() ) {
+            createObject( anObstaclesRootObj, anObstacleObj );
+          }
 
-        break;
-      }
-      case KIND_CALCULATION:
-      {
-        Handle(HYDROData_CalculationCase) aCalculObj =
-          Handle(HYDROData_CalculationCase)::DownCast( anObj );
-        if( !aCalculObj.IsNull() ) {
-          createObject( aCalculRootObj, aCalculObj );
+          break;
         }
+        case KIND_CALCULATION:
+        {
+          Handle(HYDROData_CalculationCase) aCalculObj =
+            Handle(HYDROData_CalculationCase)::DownCast( anObj );
+          if( !aCalculObj.IsNull() ) {
+            createObject( aCalculRootObj, aCalculObj );
+          }
 
-        break;
-      }
-      case KIND_POLYLINE:
-      {
-        Handle(HYDROData_Polyline) aPolylineObj =
-          Handle(HYDROData_Polyline)::DownCast( anObj );
-        if( !aPolylineObj.IsNull() ) {
-          createObject( aPolylineRootObj, aPolylineObj );
+          break;
         }
+        case KIND_POLYLINEXY:
+        {
+          Handle(HYDROData_PolylineXY) aPolylineObj =
+            Handle(HYDROData_PolylineXY)::DownCast( anObj );
+          if( !aPolylineObj.IsNull() ) {
+            createObject( aPolylineRootObj, aPolylineObj );
+          }
 
-        break;
-      }
-      case KIND_PROFILE:
-      {
-        Handle(HYDROData_Profile) aProfileObj =
-          Handle(HYDROData_Profile)::DownCast( anObj );
-        if( !aProfileObj.IsNull() ) {
-          createObject( aProfileRootObj, aProfileObj );
+          break;
+        }
+        case KIND_POLYLINE:
+        {
+          Handle(HYDROData_Polyline3D) aPolylineObj =
+            Handle(HYDROData_Polyline3D)::DownCast( anObj );
+          if( !aPolylineObj.IsNull() ) {
+            createObject( aPolyline3DRootObj, aPolylineObj );
+          }
+
+          break;
         }
+        case KIND_PROFILE:
+        {
+          Handle(HYDROData_Profile) aProfileObj =
+            Handle(HYDROData_Profile)::DownCast( anObj );
+          if( !aProfileObj.IsNull() ) {
+            createObject( aProfileRootObj, aProfileObj );
+          }
 
-        break;
-      }
-      case KIND_VISUAL_STATE:
-      {
-        Handle(HYDROData_VisualState) aVisualStateObj =
-          Handle(HYDROData_VisualState)::DownCast( anObj );
-        if( !aVisualStateObj.IsNull() ) {
-          createObject( aVisualStateRootObj, aVisualStateObj );
+          break;
         }
+        case KIND_VISUAL_STATE:
+        {
+          Handle(HYDROData_VisualState) aVisualStateObj =
+            Handle(HYDROData_VisualState)::DownCast( anObj );
+          if( !aVisualStateObj.IsNull() ) {
+            createObject( aVisualStateRootObj, aVisualStateObj );
+          }
 
-        break;
+          break;
+        }
       }
     }
   }
@@ -410,7 +438,8 @@ void HYDROGUI_DataModel::update( LightApp_DataObject* theObject,
 
 CAM_DataObject* HYDROGUI_DataModel::createRootModuleObject( SUIT_DataObject* theParent )
 {
-  CAM_DataObject* aRootObj = createModuleObject( theParent );
+  CAM_ModuleObject* aRootObj = createModuleObject( theParent );
+  aRootObj->setDataModel( this );
   setRoot( aRootObj );
   return aRootObj;
 }
@@ -595,7 +624,8 @@ QString HYDROGUI_DataModel::partitionName( const ObjectKind theObjectKind )
   switch( theObjectKind )
   {
     case KIND_IMAGE:             return "IMAGES";
-    case KIND_POLYLINE:          return "POLYLINES";
+    case KIND_POLYLINE:          return "POLYLINES_3D";
+    case KIND_POLYLINEXY:        return "POLYLINES";
     case KIND_PROFILE:           return "PROFILES";
     case KIND_VISUAL_STATE:      return "VISUAL_STATES";
     case KIND_BATHYMETRY:        return "BATHYMETRIES";
@@ -697,7 +727,7 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent,
     LightApp_DataObject* aPolylineSect = 
       createObject( aGuiObj, tr( "ZONE_POLYLINE" ), aGuiObj->entry() );
 
-    Handle(HYDROData_Polyline) aPolyline = aZoneObj->GetPolyline();
+    Handle(HYDROData_PolylineXY) aPolyline = aZoneObj->GetPolyline();
     if ( !aPolyline.IsNull() && !aPolyline->IsRemoved() )
       createObject( aPolylineSect, aPolyline, aGuiObj->entry(), false );
 
@@ -741,6 +771,13 @@ void HYDROGUI_DataModel::buildObjectTree( SUIT_DataObject* theParent,
         createZone( aGuiObj, aRegionZone, "", true );
     }
   }
+  else if ( anObjectKind == KIND_PROFILE )
+  {
+    Handle(HYDROData_Profile) aProfileObj =
+      Handle(HYDROData_Profile)::DownCast( aDataObj );
+
+    aGuiObj->setIsValid( aProfileObj->IsValid() );
+  }
 }
 
 void HYDROGUI_DataModel::buildCaseTree( SUIT_DataObject* theParent, Handle(HYDROData_CalculationCase) theCase )
@@ -813,3 +850,24 @@ bool HYDROGUI_DataModel::createNewRegion( Handle(HYDROData_CalculationCase) theC
   }
   return isOk;
 }
+
+bool HYDROGUI_DataModel::rename( Handle(HYDROData_Entity) theEntity, const QString& theName )
+{
+  if ( theName.isEmpty() )
+    return false;
+
+  try 
+  {
+    getDocument()->StartOperation();
+    theEntity->SetName( theName );
+    getDocument()->CommitOperation( HYDROGUI_Tool::ToExtString( tr("RENAME_TO").arg( theName ) ) );
+    module()->application()->activeStudy()->Modified();
+  }
+  catch ( Standard_Failure )
+  {
+    getDocument()->AbortOperation();
+    return false;
+  }
+  return true;
+}
+