Salome HOME
Merge remote-tracking branch 'origin/BR_LAND_COVER' into BR_v14_rc
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_DataModel.cxx
index 956015e624e16ab4f95388430448140b23ba1c3a..61f5453c82b9af3f3f129c9bab390edfee3fbbde 100644 (file)
@@ -43,6 +43,8 @@
 #include <HYDROData_Digue.h>
 #include <HYDROData_River.h>
 #include <HYDROData_Stream.h>
+#include <HYDROData_StricklerTable.h>
+#include <HYDROData_LandCover.h>
 
 #include <CAM_Module.h>
 #include <CAM_Study.h>
@@ -267,6 +269,12 @@ void HYDROGUI_DataModel::update( const int theStudyId )
   // OBSTACLES
   LightApp_DataObject* anObstaclesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_OBSTACLE ).toAscii() ) );
 
+  // STRICKLER TABLES
+  LightApp_DataObject* aStricklerTablesRootObj = createObject( aNewRootObj, tr( partitionName( KIND_STRICKLER_TABLE ).toAscii() ) );
+
+  // LAND COVERS
+  LightApp_DataObject* aLandCoversRootObj = createObject( aNewRootObj, tr( partitionName( KIND_LAND_COVER ).toAscii() ) );
+
   // CALCULATION CASES
   LightApp_DataObject* aCalculRootObj = createObject( aNewRootObj, tr( partitionName( KIND_CALCULATION ).toAscii() ) );
 
@@ -282,6 +290,7 @@ void HYDROGUI_DataModel::update( const int theStudyId )
   // VISUAL STATES
   LightApp_DataObject* aVisualStateRootObj = createObject( aNewRootObj, tr( partitionName( KIND_VISUAL_STATE ).toAscii() ) );
 
+  int aNoStricklerTableObj = 0;
   HYDROData_Iterator anIterator( aDocument, KIND_UNKNOWN );
   for( ; anIterator.More(); anIterator.Next() ) {
     LightApp_DataObject* obj = 0;
@@ -368,6 +377,27 @@ void HYDROGUI_DataModel::update( const int theStudyId )
             obj = createObject( anObstaclesRootObj, anObstacleObj );
           }
 
+          break;
+        }
+               case KIND_STRICKLER_TABLE:
+        {
+          Handle(HYDROData_StricklerTable) aStricklerTableObj =
+            Handle(HYDROData_StricklerTable)::DownCast( anObj );
+          if( !aStricklerTableObj.IsNull() ) {
+            obj = createObject( aStricklerTablesRootObj, aStricklerTableObj );
+          }
+                 aNoStricklerTableObj++;
+
+          break;
+        }
+        case KIND_LAND_COVER:
+        {
+          Handle(HYDROData_LandCover) aLandCoverObj =
+            Handle(HYDROData_LandCover)::DownCast( anObj );
+          if( !aLandCoverObj.IsNull() ) {
+            obj = createObject( aLandCoversRootObj, aLandCoverObj );
+          }
+
           break;
         }
         case KIND_CALCULATION:
@@ -424,6 +454,10 @@ void HYDROGUI_DataModel::update( const int theStudyId )
     }
   }
 
+  // Create default Strickler table object
+  if ( aNoStricklerTableObj == 0 )
+    createDefaultStricklerTable( aDocument, aStricklerTablesRootObj );
+
   //if( SUIT_DataBrowser* anObjectBrowser = anApp->objectBrowser() )
   //{
   //  anObjectBrowser->setAutoOpenLevel( 3 );
@@ -661,6 +695,8 @@ QString HYDROGUI_DataModel::partitionName( const ObjectKind theObjectKind )
     case KIND_OBSTACLE:          return "OBSTACLES";
     case KIND_ARTIFICIAL_OBJECT: return "ARTIFICIAL_OBJECTS";
     case KIND_NATURAL_OBJECT:    return "NATURAL_OBJECTS";
+    case KIND_STRICKLER_TABLE:   return "STRICKLER_TABLES";
+    case KIND_LAND_COVER:        return "LAND_COVERS";
     default: break;
   }
   return QString();
@@ -684,7 +720,7 @@ LightApp_DataObject* HYDROGUI_DataModel::createObject( SUIT_DataObject*
                     aKind == KIND_SHAPES_GROUP || aKind == KIND_SPLITTED_GROUP || aKind == KIND_ZONE ||
                     aKind == KIND_IMMERSIBLE_ZONE || aKind == KIND_REGION || aKind == KIND_BATHYMETRY ||
                     aKind == KIND_OBSTACLE || aKind == KIND_STREAM || aKind == KIND_CHANNEL ||
-                    aKind == KIND_DIGUE || aKind == KIND_DUMMY_3D;
+                    aKind == KIND_DIGUE || aKind == KIND_DUMMY_3D || aKind == KIND_LAND_COVER;
   if ( !visibility )
   {
     Handle(HYDROData_Profile) aProfObj = Handle(HYDROData_Profile)::DownCast( theModelObject );
@@ -747,6 +783,34 @@ LightApp_DataObject* HYDROGUI_DataModel::createRegion( SUIT_DataObject*
     theParentEntry, theIsBuildTree, theIsInOperation );
 }
 
+void HYDROGUI_DataModel::createDefaultStricklerTable( const Handle(HYDROData_Document)& theDocument,
+                                                      LightApp_DataObject*              theParent )
+{
+  // Create default Strickler table object
+  Handle(HYDROData_StricklerTable) aStricklerTableObj =
+    Handle(HYDROData_StricklerTable)::DownCast( theDocument->CreateObject(KIND_STRICKLER_TABLE) );     
+  if ( !aStricklerTableObj.IsNull() )
+  {
+    SUIT_ResourceMgr* resMgr = module()->application()->resourceMgr();
+    QString defTablePath = resMgr->path( "resources", module()->name(), tr( "DEFAULT_STRICKLER_TABLE_FILE" ) );
+    aStricklerTableObj->Import( HYDROGUI_Tool::ToAsciiString( defTablePath ) );
+       // Set name
+    QString aStricklerTableName;
+    if ( aStricklerTableObj->GetName().isEmpty() )
+    {
+      HYDROGUI_Module* aModule = dynamic_cast<HYDROGUI_Module*>( module() );
+      if ( aModule )
+        aStricklerTableName = HYDROGUI_Tool::GenerateObjectName( aModule, tr( "DEFAULT_STRICKLER_TABLE_NAME" ) );
+    }
+    if ( aStricklerTableObj->GetName() != aStricklerTableName )
+      aStricklerTableObj->SetName( aStricklerTableName );
+
+    aStricklerTableObj->Update();
+
+    LightApp_DataObject* obj = createObject( theParent, aStricklerTableObj );
+  }
+}
+
 LightApp_DataObject* HYDROGUI_DataModel::createObject( SUIT_DataObject* theParent,
                                                        const QString&   theName,
                                                        const QString&   theParentEntry )
@@ -1148,4 +1212,4 @@ void HYDROGUI_DataModel::setObjectVisibilityState( Handle(HYDROData_Entity) theM
     Qtx::VisibilityState aVisState = isVisible ? Qtx::ShownState : Qtx::HiddenState;
     treeModel->setVisibilityState( theObject->text( theObject->customData( Qtx::IdType ).toInt() ), aVisState, false );
   }
-}
\ No newline at end of file
+}