Salome HOME
Base implementation of dumping study document in to Python script (Feature #14).
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_DataModel.cxx
index 4108df409fe06fa37bd36136b5745bd72118b5dc..798cf88ed181a2ca635233e75e260fc7e699509d 100644 (file)
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_Tool.h"
 
+#include <HYDROData_Bathymetry.h>
 #include <HYDROData_Document.h>
 #include <HYDROData_Image.h>
 #include <HYDROData_Iterator.h>
+#include <HYDROData_Polyline.h>
+#include <HYDROData_VisualState.h>
 
 #include <CAM_Application.h>
 #include <CAM_DataObject.h>
@@ -147,8 +150,7 @@ bool HYDROGUI_DataModel::close()
 
 bool HYDROGUI_DataModel::isModified() const
 {
-  int aStudyId = module()->application()->activeStudy()->id();
-  return HYDROData_Document::Document( aStudyId )->IsModified();
+  return getDocument()->IsModified();
 }
 
 bool HYDROGUI_DataModel::isSaved() const
@@ -192,20 +194,52 @@ void HYDROGUI_DataModel::update( const int theStudyId )
     Handle(HYDROData_Image) anImageObj =
       Handle(HYDROData_Image)::DownCast( anIterator.Current() );
     if( !anImageObj.IsNull() )
-      createObject( anImageRootObj, anImageObj );
+    {
+      if( LightApp_DataObject* anImageDataObj = createObject( anImageRootObj, anImageObj ) )
+      {
+        for( int anIndex = 0, aNbRef = anImageObj->NbReferences(); anIndex < aNbRef; anIndex++ )
+        {
+          Handle(HYDROData_Image) aRefImageObj = anImageObj->Reference( anIndex );
+          if( !aRefImageObj.IsNull() && !aRefImageObj->IsRemoved() )
+            createObject( anImageDataObj, aRefImageObj, anImageDataObj->entry() );
+        }
+      }
+    }
+  }
+
+  LightApp_DataObject* aBathymetryRootObj = createObject( aRootObj, "BATHYMETRIES" );
+
+  anIterator = HYDROData_Iterator( aDocument, KIND_BATHYMETRY );
+  for( ; anIterator.More(); anIterator.Next() )
+  {
+    Handle(HYDROData_Bathymetry) aBathymetryObj =
+      Handle(HYDROData_Bathymetry)::DownCast( anIterator.Current() );
+    if( !aBathymetryObj.IsNull() )
+      createObject( aBathymetryRootObj, aBathymetryObj );
   }
 
   LightApp_DataObject* aPolylineRootObj = createObject( aRootObj, "POLYLINES" );
 
-  HYDROData_Iterator aPolyIterator( aDocument, KIND_IMAGE );
-  for( ; aPolyIterator.More(); aPolyIterator.Next() )
+  anIterator = HYDROData_Iterator( aDocument, KIND_POLYLINE );
+  for( ; anIterator.More(); anIterator.Next() )
   {
-    Handle(HYDROData_Image) aPolylineObj =
-      Handle(HYDROData_Image)::DownCast( anIterator.Current() );
+    Handle(HYDROData_Polyline) aPolylineObj =
+      Handle(HYDROData_Polyline)::DownCast( anIterator.Current() );
     if( !aPolylineObj.IsNull() )
       createObject( aPolylineRootObj, aPolylineObj );
   }
 
+  LightApp_DataObject* aVisualStateRootObj = createObject( aRootObj, "VISUAL_STATES" );
+
+  anIterator = HYDROData_Iterator( aDocument, KIND_VISUAL_STATE );
+  for( ; anIterator.More(); anIterator.Next() )
+  {
+    Handle(HYDROData_VisualState) aVisualStateObj =
+      Handle(HYDROData_VisualState)::DownCast( anIterator.Current() );
+    if( !aVisualStateObj.IsNull() )
+      createObject( aVisualStateRootObj, aVisualStateObj );
+  }
+
   if( SUIT_DataBrowser* anObjectBrowser = anApp->objectBrowser() )
   {
     anObjectBrowser->setAutoOpenLevel( 3 );
@@ -255,8 +289,11 @@ void HYDROGUI_DataModel::updateModel()
 Handle(HYDROData_Object) HYDROGUI_DataModel::objectByEntry( const QString& theEntry,
                                                             const ObjectKind theObjectKind )
 {
-  const int aStudyId = module()->application()->activeStudy()->id();
-  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( aStudyId );
+  QString anEntry = theEntry;
+  if( anEntry.indexOf( "_" ) != -1 ) // reference object
+    anEntry = anEntry.section( "_", -1 );
+
+  Handle(HYDROData_Document) aDocument = getDocument();
   if( !aDocument.IsNull() )
   {
     HYDROData_Iterator anIterator( aDocument, theObjectKind );
@@ -265,8 +302,8 @@ Handle(HYDROData_Object) HYDROGUI_DataModel::objectByEntry( const QString& theEn
       Handle(HYDROData_Object) anObject = anIterator.Current();
       if( !anObject.IsNull() )
       {
-        QString anEntry = HYDROGUI_DataObject::dataObjectEntry( anObject );
-        if( anEntry == theEntry )
+        QString anEntryRef = HYDROGUI_DataObject::dataObjectEntry( anObject );
+        if( anEntryRef == anEntry )
           return anObject;
       }
     }
@@ -343,9 +380,10 @@ Handle(HYDROData_Document) HYDROGUI_DataModel::getDocument() const
 }
 
 LightApp_DataObject* HYDROGUI_DataModel::createObject( SUIT_DataObject* theParent,
-                                                       Handle(HYDROData_Object) theModelObject )
+                                                       Handle(HYDROData_Object) theModelObject,
+                                                       const QString& theParentEntry )
 {
-  return new HYDROGUI_DataObject( theParent, theModelObject );
+  return new HYDROGUI_DataObject( theParent, theModelObject, theParentEntry );
 }
 
 LightApp_DataObject* HYDROGUI_DataModel::createObject( SUIT_DataObject* theParent,