Salome HOME
patch for crash in channel
[modules/hydro.git] / src / HYDROData / HYDROData_Document.cxx
index c195b9d5d7150f94c93455cd49b826cfed559c20..89469757f5405e6daecd0945e8b45d3a1de4f9f8 100644 (file)
@@ -175,7 +175,8 @@ void HYDROData_Document::Close()
   HYDROData_Application::GetApplication()->RemoveDocument(this);
 }
 
-bool HYDROData_Document::DumpToPython( const QString& theFileName ) const
+bool HYDROData_Document::DumpToPython( const QString& theFileName,
+                                       const bool     theIsMultiFile ) const
 {
   // Try to open the file
   QFile aFile( theFileName );
@@ -185,7 +186,7 @@ bool HYDROData_Document::DumpToPython( const QString& theFileName ) const
   MapOfTreatedObjects aTreatedObjects;
 
   // Dump header for python script
-  QStringList aHeaderDump = DumpToPython( aTreatedObjects );
+  QStringList aHeaderDump = DumpToPython( aTreatedObjects, theIsMultiFile );
   if ( aHeaderDump.isEmpty() )
     return false;
 
@@ -194,17 +195,27 @@ bool HYDROData_Document::DumpToPython( const QString& theFileName ) const
   bool aRes = true;
 
   // Dump all model objects to Python script
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_IMAGE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_POLYLINEXY );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_BATHYMETRY );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_PROFILE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_POLYLINE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_IMMERSIBLE_ZONE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_STREAM );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_CHANNEL );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_DIGUE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_OBSTACLE );
-  aRes = aRes && dumpPartitionToPython( aFile, aTreatedObjects, KIND_CALCULATION );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_IMAGE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_POLYLINEXY );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_BATHYMETRY );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_PROFILE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_POLYLINE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_IMMERSIBLE_ZONE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_STREAM );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_CHANNEL );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_DIGUE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_OBSTACLE );
+  aRes = aRes && dumpPartitionToPython( aFile, theIsMultiFile, aTreatedObjects, KIND_CALCULATION );
+
+  // Dump code to close python fuction
+  if ( aRes && theIsMultiFile )
+  {
+    QStringList aFooterScript;
+    aFooterScript << QString( "" );
+    aFooterScript << QString( "  pass" );
+    HYDROData_Tool::WriteStringsToFile( aFile, aFooterScript );
+  }
+
   return aRes;
 }
 
@@ -221,7 +232,8 @@ QString HYDROData_Document::GetDocPyName() const
   return aDocName;
 }
 
-QStringList HYDROData_Document::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
+QStringList HYDROData_Document::DumpToPython( MapOfTreatedObjects& theTreatedObjects,
+                                              const bool           theIsMultiFile ) const
 {
   QString aDocName = GetDocPyName();
 
@@ -237,14 +249,24 @@ QStringList HYDROData_Document::DumpToPython( MapOfTreatedObjects& theTreatedObj
   aResScript << QString( "from HYDROPy import *" );
   aResScript << QString( "from PyQt4.QtCore import *" );
   aResScript << QString( "from PyQt4.QtGui import *" );
-  aResScript << QString( "import salome" );
-  aResScript << QString( "" );
-  aResScript << QString( "%1 = HYDROData_Document.Document( salome.sg.getActiveStudyId() );" ).arg( aDocName );
+
+  if ( theIsMultiFile )
+  {
+    aResScript << QString( "" );
+    aResScript << QString( "def RebuildData( theStudy ):" );
+    aResScript << QString( "  %1 = HYDROData_Document.Document( theStudy._get_StudyId() );" ).arg( aDocName );
+  }
+  else
+  {
+    aResScript << QString( "" );
+    aResScript << QString( "%1 = HYDROData_Document.Document( theStudy._get_StudyId() );" ).arg( aDocName );
+  }
 
   return aResScript;
 }
 
 bool HYDROData_Document::dumpPartitionToPython( QFile&               theFile,
+                                                const bool           theIsMultiFile,
                                                 MapOfTreatedObjects& theTreatedObjects,
                                                 const ObjectKind&    theObjectKind ) const
 {
@@ -269,6 +291,14 @@ bool HYDROData_Document::dumpPartitionToPython( QFile&               theFile,
     theTreatedObjects.insert( anObjName, anObject );
 
     QStringList anObjDump = anObject->DumpToPython( theTreatedObjects );
+
+    if ( theIsMultiFile )
+    {
+      // For multifile dump we use the function, see the document dump header
+      QStringList::iterator anIt = anObjDump.begin();
+      for ( ; anIt != anObjDump.end(); ++anIt )
+        anIt->prepend( "  " );
+    }
     
     HYDROData_Tool::WriteStringsToFile( theFile, anObjDump );
   }