]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
INT PAL 0052944: Multi-file save mode does not work for "light" modules imn/52944
authorimn <imn@opencascade.com>
Sat, 20 Feb 2016 12:11:56 +0000 (15:11 +0300)
committerimn <imn@opencascade.com>
Sat, 20 Feb 2016 12:11:56 +0000 (15:11 +0300)
src/LightApp/LightApp_Driver.cxx
src/LightApp/LightApp_Driver.h
src/LightApp/LightApp_HDFDriver.cxx
src/LightApp/LightApp_Study.cxx
src/LightApp/LightApp_Study.h
src/SalomeApp/SalomeApp_Engine_i.cxx
src/SalomeApp/SalomeApp_Engine_i.h
src/SalomeApp/SalomeApp_Study.cxx
src/SalomeApp/SalomeApp_Study.h

index 59b1af283df2aab55742108da838bdefcd66dfde..e32912cd9a4225999af81f20fcc7a3fd4b26ac07 100644 (file)
@@ -180,6 +180,7 @@ bool LightApp_Driver::ReadDatasFromFile( const char* theFileName, bool isMultiFi
     // Put buffer to aListOfFiles and set to myMap
     ListOfFiles aListOfFiles = PutStreamToFiles(aBuffer, aBufferSize, isMultiFile);
     SetListOfFiles(aModuleName, aListOfFiles);
+    SetSaveTypeStudy(aModuleName, isMultiFile);
 
     delete[] aModuleName;
     delete[] aBuffer;
@@ -224,6 +225,27 @@ void LightApp_Driver::SetListOfFiles( const char* theModuleName, const ListOfFil
   myMap[aName] = theListOfFiles;
 }
 
+/*!
+  \return (single or multi file) type for save by module with name 'theModuleName'
+*/
+bool LightApp_Driver::GetSaveTypeStudy( const char* theModuleName )
+{
+  bool  isMultiFile = false;
+  std::string aName(theModuleName);
+  if (mySaveTypeMap.count(aName))
+    isMultiFile = mySaveTypeMap[aName];
+  return isMultiFile;
+}
+
+/*!
+  Sets (single or multi file) type for save by module with name 'theModuleName'
+*/
+void LightApp_Driver::SetSaveTypeStudy( const char* theModuleName, const bool isMultiFile )
+{
+  std::string aName (theModuleName);
+  mySaveTypeMap[aName] = isMultiFile;
+}
+
 /*!
   Converts files which was created from module <theModuleName> into a byte sequence unsigned char
 */
@@ -467,6 +489,7 @@ void LightApp_Driver::ClearDriverContents()
     RemoveTemporaryFiles( aModuleName, IsTemporary() );
   }
   myMap.clear();  
+  mySaveTypeMap.clear();
   // Reset the "temporary" flag
   SetIsTemporary( false );
 }
index 230ae59caa17f48bce855ecdb9d4326db19ac07c..ed748bf6e8059b69f8daf7e2c27b455a17d5a366 100644 (file)
@@ -50,6 +50,9 @@ public:
 
   ListOfFiles         GetListOfFiles (const char* theModuleName);
   virtual void        SetListOfFiles (const char* theModuleName, const ListOfFiles theListOfFiles);
+  bool                GetSaveTypeStudy ( const char* theModuleName );
+  virtual void        SetSaveTypeStudy ( const char* theModuleName,
+                                         const bool  isMultiFile);
   virtual void        RemoveTemporaryFiles(const char* theModuleName, const bool IsDirDeleted);
   void                RemoveFiles( const ListOfFiles& theFiles, const bool IsDirDeleted);
 
@@ -69,7 +72,9 @@ protected:
 
 protected:
   typedef std::map<std::string, ListOfFiles> MapOfListOfFiles;
+  typedef std::map<std::string, bool>        MapOfSaveTypeStudy;
   MapOfListOfFiles                           myMap;
+  MapOfSaveTypeStudy                         mySaveTypeMap;
   std::string                                myTmpDir;
 
 private:
index 5cba039a56cf2ab226b2abd0cebfdc4ca2aed939..1ad9344424fe5a082b1d0c467ecf888e85b91507 100644 (file)
@@ -309,6 +309,7 @@ bool LightApp_HDFDriver::ReadDatasFromFile( const char* theFileName, bool isMult
             ListOfFiles aListOfFiles = PutStreamToFiles(aStreamFile, aStreamSize, isMultiFile);
             char* aCompDataType = (char*)(mapEntryName[name].c_str());
             SetListOfFiles(aCompDataType, aListOfFiles);
+            SetSaveTypeStudy(aCompDataType, isMultiFile);
 
             delete [] aStreamFile;
           }
index 1229f127fa39856ccbc7aa2310b23fb168671c8f..25d7a19d248d49b1ded09bd4a4613e84d7063031 100644 (file)
@@ -341,6 +341,12 @@ void LightApp_Study::saveModuleData(QString theModuleName, QStringList theListOf
     anIndex++;
   }
   myDriver->SetListOfFiles(theModuleName.toLatin1().constData(), aListOfFiles);
+
+  SUIT_ResourceMgr* resMgr = application()->resourceMgr();
+  if( !resMgr )
+    return;
+  bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false );
+  myDriver->SetSaveTypeStudy(theModuleName.toLatin1().constData(), isMultiFile);
 }
 
 /*!
@@ -438,6 +444,27 @@ void LightApp_Study::SetListOfFiles (const char* theModuleName, const std::vecto
   myDriver->SetListOfFiles(theModuleName, theListOfFiles);
 }
 
+/*!
+  \return (single or multi file) type for save study used by module: to be used by CORBAless modules.
+  \param theModuleName - name of module
+*/
+bool LightApp_Study::GetSaveTypeStudy(const char* theModuleName) const
+{
+  bool isMultiFile = false;
+  isMultiFile = myDriver->GetSaveTypeStudy(theModuleName);
+  return isMultiFile;
+}
+
+/*!
+  Sets (single or multi file) type for save study used by module: to be used by CORBAless modules.
+  \param theModuleName - name of module
+  \param isMultiFile - type for save study
+*/
+void LightApp_Study::SetSaveTypeStudy (const char* theModuleName, const bool isMultiFile)
+{
+  myDriver->SetSaveTypeStudy(theModuleName, isMultiFile);
+}
+
 /*!
   Removes temporary files
 */
index d397a110afc341c0af3ee9483d81c27146129ed1..49d59fa494e9180c72f257ce9899894f8ad94a2c 100644 (file)
@@ -123,6 +123,10 @@ protected:
   virtual void        SetListOfFiles ( const char* theModuleName,
                                        const std::vector<std::string> theListOfFiles );
 
+  virtual bool        GetSaveTypeStudy ( const char* theModuleName ) const;
+  virtual void        SetSaveTypeStudy ( const char* theModuleName,
+                                         const bool  isMultiFile);
+
   virtual void        RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile ) const;
 
 protected:
index a7bbf1af945e6ac6fd980249004084f824101faf..c53e53c527d86c7ef1ac377f917aaaa7329ce815 100644 (file)
@@ -140,6 +140,7 @@ CORBA::Boolean SalomeApp_Engine_i::Load (SALOMEDS::SComponent_ptr theComponent,
     listOfFiles[i] = std::string(aSeq[i - 1]);
 
   SetListOfFiles(listOfFiles, studyId);
+  SetSaveTypeStudy(isMultiFile, studyId);
 
   return true;
 }
@@ -162,6 +163,23 @@ void SalomeApp_Engine_i::SetListOfFiles (const ListOfFiles& theListOfFiles,
   myMap[theStudyId] = theListOfFiles;
 }
 
+bool SalomeApp_Engine_i::GetSaveTypeStudy (const int theStudyId)
+{
+  bool aSaveTypeStudy;
+
+  if (mySaveTypeMap.find(theStudyId) != mySaveTypeMap.end())
+  {
+    aSaveTypeStudy = mySaveTypeMap[theStudyId];
+  }
+
+  return aSaveTypeStudy;
+}
+
+void SalomeApp_Engine_i::SetSaveTypeStudy (const bool isMultiFile,
+                                           const int  theStudyId)
+{
+  mySaveTypeMap[theStudyId] = isMultiFile;
+}
 /*! 
  *  DumpPython implementation for light modules
  */
index a0be8416d89af4d5c2c6be599f111e5be5c34e13..8f77d5090d9f153978e324ae2bd049c7da2a8710 100644 (file)
@@ -67,6 +67,10 @@ public:
   void                    SetListOfFiles (const ListOfFiles& theListOfFiles,
                                           const int          theStudyId);
 
+  bool                    GetSaveTypeStudy (const int        theStudyId);
+  void                    SetSaveTypeStudy (const bool       isMultiFile,
+                                            const int        theStudyId);
+
   static std::string         EngineIORForComponent( const char* theComponentName,
                                                    bool toCreate );
   static SalomeApp_Engine_i* GetInstance          ( const char* theComponentName,
@@ -99,7 +103,9 @@ private:
   static SALOME_NamingService*       namingService();
 private:
   typedef std::map<int, ListOfFiles> MapOfListOfFiles;
+  typedef std::map<int, bool>        MapOfSaveTypeStudy;
   MapOfListOfFiles                   myMap;
+  MapOfSaveTypeStudy                 mySaveTypeMap;
 
   std::string                        myComponentName;
 };
index 8598e2bdb9b52c409bd9c5708a1f90e564e096f0..9a5da2e372dac6bf51fd96cce64456282f2904b1 100644 (file)
@@ -888,6 +888,12 @@ void SalomeApp_Study::saveModuleData( QString theModuleName, QStringList theList
     anIndex++;
   }
   SetListOfFiles(theModuleName.toStdString().c_str(), aListOfFiles);
+
+  SUIT_ResourceMgr* resMgr = application()->resourceMgr();
+  if( !resMgr )
+    return;
+  bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false );
+  SetSaveTypeStudy(theModuleName.toStdString().c_str(), isMultiFile);
 }
 
 /*!
@@ -919,13 +925,19 @@ bool SalomeApp_Study::saveStudyData( const QString& theFileName )
   ModelList list; dataModels( list );
   QListIterator<CAM_DataModel*> it( list );
   std::vector<std::string> listOfFiles(0);
+  SUIT_ResourceMgr* resMgr = application()->resourceMgr();
+  if( !resMgr )
+    return false;
+  bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false );
   while ( it.hasNext() ){
     LightApp_DataModel* aLModel = 
       dynamic_cast<LightApp_DataModel*>( it.next() );
     // It is safe to call SetListOfFiles() for any kind of module
     // because SetListOfFiles() does nothing for full modules :)
-    if ( aLModel )
+    if ( aLModel ) {
       SetListOfFiles(aLModel->module()->name().toStdString().c_str(), listOfFiles);
+      SetSaveTypeStudy(aLModel->module()->name().toStdString().c_str(), isMultiFile);
+    }
   }
   return true;
 }
@@ -1111,7 +1123,7 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm
   if (dm && dm->open(studyName, this, listOfFiles)) {
     // Remove the files and temporary directory, created
     // for this module by LightApp_Engine_i::Load()
-    bool isMultiFile = false; // TODO: decide, how to access this parameter
+    bool isMultiFile = GetSaveTypeStudy( dm->module()->name().toStdString().c_str() );
     RemoveTemporaryFiles( dm->module()->name().toStdString().c_str(), isMultiFile );
 
     // Something has been read -> create data model tree
@@ -1152,7 +1164,7 @@ QString SalomeApp_Study::newStudyName() const
   \return list of files used by module: to be used by CORBAless modules
   \param theModuleName - name of module
 */
-std::vector<std::string> SalomeApp_Study::GetListOfFiles( const char* theModuleName  ) const
+std::vector<std::string> SalomeApp_Study::GetListOfFiles( const char* theModuleName ) const
 {
   // Issue 21377 - using separate engine for each type of light module
   SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance( theModuleName, false );
@@ -1180,6 +1192,31 @@ void SalomeApp_Study::SetListOfFiles ( const char* theModuleName,
     aDefaultEngine->SetListOfFiles(theListOfFiles, id());
 }
 
+/*!
+  \return (single or multi file) type for save study used by module: to be used by CORBAless modules.
+  \param theModuleName - name of module
+*/
+bool SalomeApp_Study::GetSaveTypeStudy( const char* theModuleName ) const
+{
+  SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance( theModuleName, false );
+  if (aDefaultEngine)
+    return aDefaultEngine->GetSaveTypeStudy(id());
+
+  return false;
+}
+
+/*!
+  Sets (single or multi file) type for save study used by module: to be used by CORBAless modules.
+  \param theModuleName - name of module
+  \param isMultiFile - save type study
+*/
+void SalomeApp_Study::SetSaveTypeStudy ( const char* theModuleName,
+                                         const bool isMultiFile )
+{
+  SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance( theModuleName, false );
+  if (aDefaultEngine)
+    aDefaultEngine->SetSaveTypeStudy(isMultiFile, id());
+}
 /*!
   \return temporary directory for saving files of modules
 */
index e373b4dfb604da2d6b078106716124d5845e1ffc..70f47ad3be5fd1512bcdb51b20b0313ae2e52d1d 100644 (file)
@@ -98,6 +98,9 @@ protected:
   virtual std::vector<std::string> GetListOfFiles ( const char* theModuleName ) const;
   virtual void        SetListOfFiles ( const char* theModuleName,
                                        const std::vector<std::string> theListOfFiles);
+  virtual bool        GetSaveTypeStudy ( const char* theModuleName ) const;
+  virtual void        SetSaveTypeStudy ( const char* theModuleName,
+                                         const bool  isMultiFile);
   virtual void        RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile) const;
 
 protected: