]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
*** empty log message ***
authornds <nds@opencascade.com>
Wed, 28 Sep 2005 08:20:00 +0000 (08:20 +0000)
committernds <nds@opencascade.com>
Wed, 28 Sep 2005 08:20:00 +0000 (08:20 +0000)
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_Application.h
src/SalomeApp/SalomeApp_DataModel.cxx
src/SalomeApp/SalomeApp_DataModel.h
src/SalomeApp/SalomeApp_DataObject.cxx
src/SalomeApp/SalomeApp_DataObject.h
src/SalomeApp/SalomeApp_Module.h
src/SalomeApp/SalomeApp_Study.cxx
src/SalomeApp/SalomeApp_Study.h
src/SalomeApp/resources/SalomeApp.ini
src/SalomeApp/resources/SalomeApp.xml

index ceb036777d0e73d5131d1dba136fa2c3eff31e15..326e9426d1cc8e374754575c2bbd8f3ad61c2d4b 100644 (file)
@@ -66,9 +66,10 @@ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication()
 
 /*
   Class       : SalomeApp_Application
-  Description : Application containing SalomeApp module
+  Description : Application containing SalomeApp module or LightApp module
 */
 
+/*!Constructor.*/
 SalomeApp_Application::SalomeApp_Application()
 : LightApp_Application()
 {
@@ -184,6 +185,12 @@ void SalomeApp_Application::onLoadDoc()
   }
 }
 
+/*!SLOT. Load document with \a aName.*/
+bool SalomeApp_Application::onLoadDoc( const QString& str )
+{
+  return LightApp_Application::onLoadDoc(str);
+}
+
 /*!SLOT. Copy objects to study maneger from selection maneger..*/
 void SalomeApp_Application::onCopy() 
 {
@@ -532,6 +539,7 @@ SALOME_LifeCycleCORBA* SalomeApp_Application::lcc()
   return _lcc;
 }
 
+/*!Return default engine IOR for light modules*/
 QString SalomeApp_Application::defaultEngineIOR()
 {
   /// Look for a default module engine (needed for CORBAless modules to use SALOMEDS persistence)
@@ -563,7 +571,7 @@ void SalomeApp_Application::onProperties()
   updateDesktopTitle();
 }
 
-/*!*/
+/*!Insert items in popup, which necessary for current application*/
 void SalomeApp_Application::contextMenuPopup( const QString& type, QPopupMenu* thePopup, QString& title )
 {
   LightApp_Application::contextMenuPopup( type, thePopup, title );
@@ -623,9 +631,15 @@ void SalomeApp_Application::contextMenuPopup( const QString& type, QPopupMenu* t
   thePopup->insertItem( tr( "MEN_OPENWITH" ), this, SLOT( onOpenWith() ) );
 }
 
-/*!Update obect browser*/
+/*!Update obect browser:
+ 1.if 'updateModels' true, update existing data models;
+ 2. update "non-existing" (not loaded yet) data models;
+ 3. update object browser if it existing */
 void SalomeApp_Application::updateObjectBrowser( const bool updateModels )
 {
+  // update existing data models (already loaded SComponents)
+  LightApp_Application::updateObjectBrowser(updateModels);
+
   // update "non-existing" (not loaded yet) data models
   SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(activeStudy());
   if ( study ) 
@@ -639,12 +653,24 @@ void SalomeApp_Application::updateObjectBrowser( const bool updateModels )
 
        if ( aComponent->ComponentDataType() == "Interface Applicative" )
          continue; // skip the magic "Interface Applicative" component
-    
-       SalomeApp_DataModel::BuildTree( aComponent, study->root(), study, /*skipExisitng=*/true );
+
+        SalomeApp_DataModel::BuildTree( aComponent, study->root(), study, /*skipExisitng=*/true );
       }
     }
   }
-  LightApp_Application::updateObjectBrowser(updateModels);
+  if ( objectBrowser() )
+  {
+    objectBrowser()->updateGeometry();
+    objectBrowser()->updateTree();
+  }
+}
+
+/*!Gets file filter.
+ *\retval QString "(*.hdf)"
+ */
+QString SalomeApp_Application::getFileFilter() const
+{
+  return "(*.hdf)";
 }
 
 /*!Display Catalog Genenerator dialog */
index 567b59668bfef2c3c42f8a0bfb3e15349ac5a731..43bbbafd9315fe0ca047691bfecaa9ee385d45e0 100644 (file)
@@ -35,7 +35,7 @@ class SALOME_LifeCycleCORBA;
 #endif
 
 /*!
-  Description : Application containing SalomeApp module
+  Description : Application containing SalomeApp module or LightApp module
 */
 
 class SALOMEAPP_EXPORT SalomeApp_Application : public LightApp_Application
@@ -53,6 +53,8 @@ public:
   virtual void                        contextMenuPopup( const QString&, QPopupMenu*, QString& );
   virtual void                        updateObjectBrowser( const bool = true );
 
+  virtual QString                     getFileFilter() const;
+
   SUIT_ViewManager*                   getViewManager( const QString&, const bool );
 
   virtual void                        start();
@@ -65,6 +67,7 @@ public:
 
 public slots:
   virtual void                        onLoadDoc();
+  virtual bool                        onLoadDoc( const QString& );
   virtual void                        onCopy();
   virtual void                        onPaste();  
   
index 3c63e644bc7680dce5e7dd6b08f11dddf14e5ba9..6830085edd343aa134549b9c4643a158cdaa163c 100644 (file)
@@ -63,7 +63,7 @@ SUIT_DataObject* SalomeApp_DataModel::BuildTree( const _PTR(SObject)& obj,
               componentObj->removeChild(itc.current());
 
             // delete DataObject itself and re-create it and all its sub-objects
-           delete componentObj;
+            delete componentObj;
            // don't do anything here, because iterator may be corrupted (deleted object inside it)
            break; // proceed to build_a_data_object code below
           }
@@ -108,7 +108,7 @@ SalomeApp_DataModel::~SalomeApp_DataModel()
 // Function : open
 /*! Purpose  : Open data model*/
 //================================================================
-bool SalomeApp_DataModel::open( const QString& name, CAM_Study* study )
+bool SalomeApp_DataModel::open( const QString& name, CAM_Study* study, QStringList )
 {
   SalomeApp_Study* aDoc = dynamic_cast<SalomeApp_Study*>( study );
   if ( !aDoc )
@@ -123,7 +123,8 @@ bool SalomeApp_DataModel::open( const QString& name, CAM_Study* study )
   if ( aSComp )
     buildTree( aSComp, 0, aDoc );
 
-  LightApp_DataModel::open(name, study);
+  QStringList listOfFiles;
+  LightApp_DataModel::open(name, study, listOfFiles);
   return true;
 }
 
@@ -133,36 +134,30 @@ bool SalomeApp_DataModel::open( const QString& name, CAM_Study* study )
 //================================================================
 void SalomeApp_DataModel::update( LightApp_DataObject*, LightApp_Study* study )
 {
-  SalomeApp_Study* aSStudy = 0;
+  SalomeApp_Study* aSStudy = dynamic_cast<SalomeApp_Study*>(study);
   LightApp_RootObject* studyRoot = 0;
   _PTR(SObject) sobj;
   SalomeApp_DataObject* modelRoot = dynamic_cast<SalomeApp_DataObject*>( root() );
   if ( !modelRoot ){ // not yet connected to a study -> try using <study> argument
-    aSStudy = dynamic_cast<SalomeApp_Study*>( study );
     if ( !aSStudy )
       aSStudy = dynamic_cast<SalomeApp_Study*>( getModule()->getApp()->activeStudy() );
     if ( aSStudy ){
       studyRoot = dynamic_cast<LightApp_RootObject*>( aSStudy->root() );
-      if ( studyRoot ) {
-        QString anId = getRootEntry( aSStudy );
-        if ( !anId.isEmpty() ){ // if nothing is published in the study for this module -> do nothing
-         _PTR(Study) aStudy ( aSStudy->studyDS() );
-         sobj = aStudy->FindComponentID( std::string( anId.latin1() ) );
-        }
+      QString anId = getRootEntry( aSStudy );
+      if ( !anId.isEmpty() ){ // if nothing is published in the study for this module -> do nothing
+       _PTR(Study) aStudy ( aSStudy->studyDS() );
+       sobj = aStudy->FindComponentID( std::string( anId.latin1() ) );
       }
     }
   }
   else{
     studyRoot = dynamic_cast<LightApp_RootObject*>( modelRoot->root() );
     if ( studyRoot ) {
-      aSStudy = dynamic_cast<SalomeApp_Study*>( study );
+      aSStudy = dynamic_cast<SalomeApp_Study*>( studyRoot->study() ); // <study> value should not change here theoretically, but just to make sure
       if ( aSStudy ) {
-        aSStudy = dynamic_cast<SalomeApp_Study*>( studyRoot->study() ); // <study> value should not change here theoretically, but just to make sure
-        if ( aSStudy ) {
-          _PTR(Study) aStudy ( aSStudy->studyDS() );
-          // modelRoot->object() cannot be reused here: it is about to be deleted by buildTree() soon
-          sobj = aStudy->FindComponentID( std::string( modelRoot->entry().latin1() ) );
-        }
+        _PTR(Study) aStudy ( aSStudy->studyDS() );
+        // modelRoot->object() cannot be reused here: it is about to be deleted by buildTree() soon
+        sobj = aStudy->FindComponentID( std::string( modelRoot->entry().latin1() ) );
       }
     }
   }
index 7ef34b0888e3bc9dc0cb43ba4829490990b9056f..4dab54d9b2ad0c222870edffc14a7adcf543c32f 100644 (file)
@@ -34,7 +34,7 @@ public:
                                       SalomeApp_DataModel ( CAM_Module* theModule );
   virtual                             ~SalomeApp_DataModel();
 
-  virtual bool                        open( const QString&, CAM_Study* );
+  virtual bool                        open( const QString&, CAM_Study*, QStringList );
   virtual void                        update( LightApp_DataObject* = 0, LightApp_Study* = 0 );
 
   QString                             getRootEntry( SalomeApp_Study* ) const;
index 62cb0add74f663c2b51c8e234eb96faf470c48de..7b094412933aba175ac93cb9f77fc7492586fabe 100644 (file)
@@ -309,7 +309,7 @@ QString SalomeApp_DataObject::value( const _PTR(SObject)& obj ) const
 
 /*!Constructor.Initialize by \a parent.*/
 SalomeApp_ModuleObject::SalomeApp_ModuleObject( SUIT_DataObject* parent )
-: SalomeApp_DataObject( parent ), 
+: SalomeApp_DataObject( parent ),
   CAM_RootObject( parent ),
   CAM_DataObject( parent )
 {
@@ -317,7 +317,7 @@ SalomeApp_ModuleObject::SalomeApp_ModuleObject( SUIT_DataObject* parent )
 
 /*!Constructor.Initialize by \a parent and SObject.*/
 SalomeApp_ModuleObject::SalomeApp_ModuleObject( const _PTR(SObject)& sobj, SUIT_DataObject* parent )
-: SalomeApp_DataObject( sobj, parent ), 
+: SalomeApp_DataObject( sobj, parent ),
   CAM_RootObject( 0, parent ),
   CAM_DataObject( parent )
 {
@@ -325,9 +325,9 @@ SalomeApp_ModuleObject::SalomeApp_ModuleObject( const _PTR(SObject)& sobj, SUIT_
 
 /*!Constructor.Initialize by \a parent and CAM_DataModel.*/
 SalomeApp_ModuleObject::SalomeApp_ModuleObject( CAM_DataModel* dm, const _PTR(SObject)& sobj, SUIT_DataObject* parent )
-: SalomeApp_DataObject( sobj, parent ), 
+: SalomeApp_DataObject( sobj, parent ),
   CAM_RootObject( dm, parent ),
-  CAM_DataObject( parent )  
+  CAM_DataObject( parent )
 {
 }
 
@@ -335,3 +335,10 @@ SalomeApp_ModuleObject::SalomeApp_ModuleObject( CAM_DataModel* dm, const _PTR(SO
 SalomeApp_ModuleObject::~SalomeApp_ModuleObject()
 {
 }
+
+/*!Returns module name */
+QString SalomeApp_ModuleObject::name() const
+{
+  return SalomeApp_DataObject::name();
+}
+
index 34042162d56a2f6c2485230fd4601ff200bb76ec..cf9c154ed178430d0620dd678a116c45f0e0c08f 100644 (file)
@@ -61,6 +61,8 @@ public:
   SalomeApp_ModuleObject( const _PTR(SObject)&, SUIT_DataObject* = 0 );
   SalomeApp_ModuleObject( CAM_DataModel*, const _PTR(SObject)&, SUIT_DataObject* = 0 );
   virtual ~SalomeApp_ModuleObject();
+
+  virtual QString        name() const;
 };
 
 #endif
index 67bc25ed02b0f036fe4b6c9a2c31a51d11251913..5dd9d47292fad6b41517b3dfafbe64e088701899 100644 (file)
@@ -30,8 +30,7 @@ public:
   /*! engineIOR() should be a pure virtual method, to avoid logical errors!\n
    * Implementation in derived classes can return the following values:\n
    * module`s engine IOR - means that this is a standard SALOME module with a CORBA engine
-   * \li "" (empty string)   - means that this is a light module, default engine should be used for interaction with SALOMEDS persistence
-   * \li "-1"                - means that this is a light module, SALOMEDS persistence is not used at all\n
+   * \li "" (empty string)   - means that this not correct SALOME module
    */
   virtual QString                     engineIOR() const = 0;
   
index 97be8db880beb89c923cac1c3c1ce5b215e64bba..c7107f14c1f54034bd89a54ea1d5059a88eb8560 100644 (file)
@@ -2,11 +2,12 @@
 
 #include "SalomeApp_Module.h"
 #include "SalomeApp_DataModel.h"
-#include "LightApp_RootObject.h"
 #include "SalomeApp_DataObject.h"
 #include "SalomeApp_Application.h"
 #include "SalomeApp_Engine_i.hxx"
 
+#include "LightApp_RootObject.h"
+
 #include <OB_Browser.h>
 
 #include <SUIT_ResourceMgr.h>
@@ -72,7 +73,11 @@ void SalomeApp_Study::createDocument()
   setStudyDS( study );
   setStudyName( aName );
 
-  LightApp_Study::createDocument();
+  // create myRoot
+  setRoot( new LightApp_RootObject( this ) );
+
+  CAM_Study::createDocument();
+  emit created( this );
 }
 
 //=======================================================================
@@ -90,8 +95,22 @@ bool SalomeApp_Study::openDocument( const QString& theFileName )
 
   setStudyDS( study );
 
-  bool res = LightApp_Study::openDocument( theFileName );
-  
+  setRoot( new LightApp_RootObject( this ) ); // create myRoot
+
+  // update loaded data models: call open() and update() on them.
+  ModelList dm_s;
+  dataModels( dm_s );
+  for ( ModelListIterator it( dm_s ); it.current(); ++it )
+    openDataModel( studyName(), it.current() );
+
+  // this will build a SUIT_DataObject-s tree under myRoot member field
+  // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step
+  // but tree that corresponds to not-loaded data models will be updated any way. 
+  ((SalomeApp_Application*)application())->updateObjectBrowser( false ); 
+
+  bool res = CAM_Study::openDocument( theFileName );
+  emit opened( this );
+
   return res;
 }
 
@@ -110,7 +129,26 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName )
 
   setStudyDS( study );
 
-  bool res = LightApp_Study::loadDocument( theStudyName );
+  setRoot( new LightApp_RootObject( this ) ); // create myRoot
+
+  //SRN: BugID IPAL9021, put there the same code as in a method openDocument
+
+  // update loaded data models: call open() and update() on them.
+  ModelList dm_s;
+  dataModels( dm_s );
+
+  for ( ModelListIterator it( dm_s ); it.current(); ++it )
+    openDataModel( studyName(), it.current() );
+
+  // this will build a SUIT_DataObject-s tree under myRoot member field
+  // passing "false" in order NOT to rebuild existing data models' trees - it was done in previous step
+  // but tree that corresponds to not-loaded data models will be updated any way. 
+  ((SalomeApp_Application*)application())->updateObjectBrowser( false ); 
+
+  bool res = CAM_Study::openDocument( theStudyName );
+  emit opened( this );
+
+  //SRN: BugID IPAL9021: End
 
   return res;
 }
@@ -121,17 +159,32 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName )
 //=======================================================================
 bool SalomeApp_Study::saveDocumentAs( const QString& theFileName )
 {
+  ModelList list; dataModels( list );
+
+  SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first();
+  QStringList listOfFiles;
+  for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() ) {
+    listOfFiles.clear();
+    aModel->saveAs( theFileName, this, listOfFiles );
+    if ( !listOfFiles.isEmpty() )
+      saveModuleData(aModel->module()->name(), listOfFiles);
+  }
+
   // save SALOMEDS document
   SUIT_ResourceMgr* resMgr = application()->resourceMgr();
   if( !resMgr )
     return false;
-  bool res = LightApp_Study::saveDocumentAs( theFileName );  //SRN: BugID IPAL9377, removed usage of uninitialized variable <res>
 
   bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ),
        isAscii = resMgr->booleanValue( "Study", "ascii_file", true );
   isAscii ? SalomeApp_Application::studyMgr()->SaveAsASCII( theFileName.latin1(), studyDS(), isMultiFile ) :
             SalomeApp_Application::studyMgr()->SaveAs     ( theFileName.latin1(), studyDS(), isMultiFile );
 
+  bool res = CAM_Study::saveDocumentAs( theFileName );  //SRN: BugID IPAL9377, removed usage of uninitialized variable <res>
+  res = res && saveStudyData(theFileName);
+  if ( res )
+    emit saved( this );
+
   return res;
 }
 
@@ -139,18 +192,36 @@ bool SalomeApp_Study::saveDocumentAs( const QString& theFileName )
 // name    : saveDocument
 /*! Purpose : Save document*/
 //=======================================================================
-void SalomeApp_Study::saveDocument()
+bool SalomeApp_Study::saveDocument()
 {
+  ModelList list; dataModels( list );
+
+  SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first();
+  QStringList listOfFiles;
+  for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() ) {
+    listOfFiles.clear();
+    aModel->save(listOfFiles);
+    if ( !listOfFiles.isEmpty() )
+      saveModuleData(aModel->module()->name(), listOfFiles);
+  }
+
   // save SALOMEDS document
   SUIT_ResourceMgr* resMgr = application()->resourceMgr();
   if( !resMgr )
-    return;
-  LightApp_Study::saveDocument();
-  
+    return false;
+
   bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ),
        isAscii = resMgr->booleanValue( "Study", "ascii_file", true );
   isAscii ? SalomeApp_Application::studyMgr()->SaveASCII( studyDS(), isMultiFile ) :
             SalomeApp_Application::studyMgr()->Save     ( studyDS(), isMultiFile );
+
+  bool res = CAM_Study::saveDocument();
+
+  res = res && saveStudyData(studyName());
+  if ( res )
+    emit saved( this );  
+
+  return res;
 }
 
 //================================================================
@@ -197,6 +268,69 @@ bool SalomeApp_Study::isSaved() const
   return isAllSaved; 
 }
 
+//=======================================================================
+// name    : saveModuleData
+/*! Purpose : save list file for module 'theModuleName' */
+//=======================================================================
+void SalomeApp_Study::saveModuleData( QString theModuleName, QStringList theListOfFiles )
+{
+  int aNb = theListOfFiles.count();
+  if ( aNb == 0 )
+    return;
+
+  std::vector<std::string> aListOfFiles ( aNb );
+  int anIndex = 0;
+  for ( QStringList::Iterator it = theListOfFiles.begin(); it != theListOfFiles.end(); ++it ) {
+    if ( (*it).isEmpty() )
+      continue;
+    aListOfFiles[anIndex] = (*it).latin1();
+    anIndex++;
+  }
+  SetListOfFiles(theModuleName, aListOfFiles);
+}
+
+//=======================================================================
+// name    : openModuleData
+/*! Purpose : gets list of file for module 'theModuleNam' */
+//=======================================================================
+void SalomeApp_Study::openModuleData( QString theModuleName, QStringList& theListOfFiles )
+{
+  std::vector<std::string> aListOfFiles =  GetListOfFiles( theModuleName );
+
+  int i, aLength = aListOfFiles.size() - 1;
+  if ( aLength < 0 )
+    return;
+
+  //Get a temporary directory for saved a file
+  theListOfFiles.append(aListOfFiles[0].c_str());
+
+  for(i = 0; i < aLength; i++)
+    theListOfFiles.append(aListOfFiles[i+1].c_str());
+}
+
+//=======================================================================
+// name    : saveStudyData
+/*! Purpose : save data from study */
+//=======================================================================
+bool SalomeApp_Study::saveStudyData( const QString& theFileName )
+{
+  ModelList list; dataModels( list );
+  SalomeApp_DataModel* aModel = (SalomeApp_DataModel*)list.first();
+  std::vector<std::string> listOfFiles(0);
+  for ( ; aModel; aModel = (SalomeApp_DataModel*)list.next() )
+    SetListOfFiles(aModel->module()->name(), listOfFiles);
+  return true;
+}
+
+//=======================================================================
+// name    : openStudyData
+/*! Purpose : open data for study */
+//=======================================================================
+bool SalomeApp_Study::openStudyData( const QString& theFileName )
+{
+ return true;
+}
+
 /*!
   Set studyDS.
 */
@@ -214,12 +348,17 @@ void SalomeApp_Study::dataModelInserted (const CAM_DataModel* dm)
 
   CAM_Study::dataModelInserted(dm);
 
-  // Create SComponent for module, using default engine (CORBAless)
-  //  SalomeApp_Module* aModule = (SalomeApp_Module*)(dm->module());
+  //  addComponent(dm);
+}
+
+/*!
+ Create SComponent for module, using default engine (CORBAless)
+*/
+void SalomeApp_Study::addComponent(const CAM_DataModel* dm)
+{
   SalomeApp_Module* aModule = dynamic_cast<SalomeApp_Module*>( dm->module() );
   // 1. aModule == 0 means that this is a light module (no CORBA enigine)
-  // 2. engineIOR == "" means this is a full module but without CORBA engine
-  if (!aModule || aModule->engineIOR().isEmpty()) {
+  if (!aModule) {
     // Check SComponent existance
     _PTR(Study) aStudy = studyDS();
     if (!aStudy) 
@@ -227,11 +366,18 @@ void SalomeApp_Study::dataModelInserted (const CAM_DataModel* dm)
     _PTR(SComponent) aComp = aStudy->FindComponent(dm->module()->name());
     if (!aComp) {
       // Create SComponent
-      _PTR(StudyBuilder) aBuilder = studyDS()->NewBuilder();
+      _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
       aComp = aBuilder->NewComponent(dm->module()->name());
-      
+      aBuilder->SetName(aComp, dm->module()->moduleName());
+      QString anIconName = dm->module()->iconName();
+      if (!anIconName.isEmpty()) {
+        _PTR(AttributePixMap) anAttr = aBuilder->FindOrCreateAttribute(aComp, "AttributePixMap");
+        if (anAttr)
+          anAttr->SetPixMap(anIconName);
+      }
       // Set default engine IOR
       aBuilder->DefineComponentInstance(aComp, SalomeApp_Application::defaultEngineIOR().latin1());
+      SalomeApp_DataModel::BuildTree( aComp, root(), this, /*skipExisitng=*/true );
     }
   }
 }
@@ -250,8 +396,7 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm
   _PTR(SComponent)  aSComp;
   QString anEngine;
   // 1. aModule == 0 means that this is a light module (no CORBA enigine)
-  // 2. engineIOR == "" means this is a full module but without CORBA engine
-  if (!aModule || aModule->engineIOR().isEmpty()) {
+  if (!aModule) {
     anEngine = SalomeApp_Application::defaultEngineIOR();
     aSComp = aStudy->FindComponent(dm->module()->name());
   }
@@ -261,20 +406,9 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm
       QString anId = aDM->getRootEntry( this );
       if ( anId.isEmpty() )
         return true; // Probably nothing to load
-
-      if ( aDM ) {
-        anEngine = aDM->getModule()->engineIOR();
-        if ( anEngine == "-1" ) {
-          // Module doesn't have a CORBA engine and doesn't use
-          // a default one -> SALOMEDS persistence cannot be used
-          return false;
-        }
-      }
-      if ( anEngine.isEmpty() ) {
-        // Module use a default engine
-        //TODO: deside, if the below code has to be copyed in a light data model to avoid bulding of data tree twice
-        anEngine = SalomeApp_Application::defaultEngineIOR();
-      }
+      anEngine = aDM->getModule()->engineIOR();
+      if ( anEngine.isEmpty() )
+        return false;
       aSComp = aStudy->FindComponentID( std::string( anId.latin1() ) );
     }
   }
@@ -289,13 +423,21 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm
         return false;
       }
       // Something has been read -> create data model tree
+      //SalomeApp_DataModel* aDM = dynamic_cast<SalomeApp_DataModel*>( dm );
       // aDM->buildTree( aSComp, 0, this );
     }
   } else {
     // Don't return false here, for there might be no data
     // for a given component in the study yet
   }
-  if (dm && dm->open(studyName, this)) {
+  QStringList listOfFiles;
+  openModuleData(dm->module()->name(), listOfFiles);
+  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
+    RemoveTemporaryFiles( dm->module()->name(), isMultiFile );
+
     // Something has been read -> create data model tree
     LightApp_DataModel* aDM = dynamic_cast<LightApp_DataModel*>( dm );
     if ( aDM )
@@ -331,13 +473,11 @@ QString SalomeApp_Study::newStudyName() const
 // Function : GetListOfFiles
 /*! Purpose  : to be used by CORBAless modules*/
 //================================================================
-std::vector<std::string> SalomeApp_Study::GetListOfFiles() const
+std::vector<std::string> SalomeApp_Study::GetListOfFiles( const char* theModuleName  ) const
 {
   SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance();
-  if (aDefaultEngine) {
-    const char* aName = ((CAM_Application*)application())->activeModule()->name();
-    return aDefaultEngine->GetListOfFiles(id(), aName);
-  }
+  if (aDefaultEngine)
+    return aDefaultEngine->GetListOfFiles(id(), theModuleName);
 
   std::vector<std::string> aListOfFiles;
   return aListOfFiles;
@@ -347,21 +487,19 @@ std::vector<std::string> SalomeApp_Study::GetListOfFiles() const
 // Function : SetListOfFiles
 /*! Purpose  : to be used by CORBAless modules*/
 //================================================================
-void SalomeApp_Study::SetListOfFiles (const std::vector<std::string> theListOfFiles)
+void SalomeApp_Study::SetListOfFiles ( const char* theModuleName,
+                                       const std::vector<std::string> theListOfFiles )
 {
   SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance();
-  if (aDefaultEngine) {
-    const char* aName = ((CAM_Application*)application())->activeModule()->name();
-    aDefaultEngine->SetListOfFiles(theListOfFiles, id(), aName);
-  }
+  if (aDefaultEngine)
+    aDefaultEngine->SetListOfFiles(theListOfFiles, id(), theModuleName);
 }
 
 //================================================================
 // Function : GetTmpDir
 /*! Purpose  : to be used by CORBAless modules*/
 //================================================================
-std::string SalomeApp_Study::GetTmpDir (const char* theURL,
-                                            const bool  isMultiFile)
+std::string SalomeApp_Study::GetTmpDir ( const char* theURL, const bool  isMultiFile )
 {
   std::string anURLDir = SALOMEDS_Tool::GetDirFromPath(theURL);
   std::string aTmpDir = isMultiFile ? anURLDir : SALOMEDS_Tool::GetTmpDir();
@@ -372,12 +510,12 @@ std::string SalomeApp_Study::GetTmpDir (const char* theURL,
 // Function : RemoveTemporaryFiles
 /*! Purpose  : to be used by CORBAless modules*/
 //================================================================
-void SalomeApp_Study::RemoveTemporaryFiles (const bool isMultiFile) const
+void SalomeApp_Study::RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile ) const
 {
   if (isMultiFile)
     return;
 
-  std::vector<std::string> aListOfFiles = GetListOfFiles();
+  std::vector<std::string> aListOfFiles = GetListOfFiles( theModuleName );
   if (aListOfFiles.size() > 0) {
     std::string aTmpDir = aListOfFiles[0];
 
index b75dd4f084971fca6ada95691c6cd8e14745b0ce..79593ca52a296e17912d2159b3c6fafa36ec895b 100644 (file)
@@ -25,7 +25,7 @@ public:
   virtual bool        openDocument( const QString& );
   virtual bool        loadDocument( const QString& );
 
-  virtual void        saveDocument();
+  virtual bool        saveDocument();
   virtual bool        saveDocumentAs( const QString& );
 
   virtual void        closeDocument(bool permanently = true);
@@ -33,17 +33,26 @@ public:
   virtual bool        isSaved()  const;
   virtual bool        isModified() const;
 
+  virtual void        addComponent   ( const CAM_DataModel* dm);
+
   _PTR(Study)         studyDS() const;
 
-  virtual std::vector<std::string> GetListOfFiles () const;
-  virtual void        SetListOfFiles (const std::vector<std::string> theListOfFiles);
-  virtual std::string GetTmpDir (const char* theURL,
-                                 const bool  isMultiFile);
-  virtual void        RemoveTemporaryFiles (const bool isMultiFile) const;
+  virtual std::string GetTmpDir      ( const char* theURL, const bool  isMultiFile);
 
   // to delete all references to object, whose have the same component
   void                deleteReferencesTo( _PTR( SObject ) );
 
+protected:
+  virtual void        saveModuleData ( QString theModuleName, QStringList theListOfFiles );
+  virtual void        openModuleData ( QString theModuleName, QStringList& theListOfFiles );
+  virtual bool        saveStudyData  (  const QString& theFileName );
+  virtual bool        openStudyData  ( const QString& theFileName );
+
+  virtual std::vector<std::string> GetListOfFiles ( const char* theModuleName ) const;
+  virtual void        SetListOfFiles ( const char* theModuleName,
+                                       const std::vector<std::string> theListOfFiles);
+  virtual void        RemoveTemporaryFiles ( const char* theModuleName, const bool isMultiFile) const;
+
 protected:
   virtual void        dataModelInserted( const CAM_DataModel* );
   virtual bool        openDataModel( const QString&, CAM_DataModel* );
index 2dae6406e00a32cd30e3c1ef72056ceac40e19f2..5203919d1f9de1b4374dc336d405c9fcb168b484 100644 (file)
@@ -11,6 +11,7 @@ Plot2d = $(SUITRoot)/resources
 GLViewer = $(SUITRoot)/resources
 OCCViewer = $(SUITRoot)/resources
 VTKViewer = $(SUITRoot)/resources
+LightApp = $(SUITRoot)/resources
 SalomeApp = $(SUITRoot)/resources
 GEOM = $(GEOM_ROOT_DIR)/share/salome/resources
 SMESH = $(SMESH_ROOT_DIR)/share/salome/resources
index cd868f10759dafd3a319e83313d772af2eb56d91..5617a73527c4a8de3ddaf280338f4b28b58cfb6c 100644 (file)
@@ -16,7 +16,7 @@
     <parameter name="xterm"      value="no"/>
     <parameter name="portkill"   value="no"/>
     <parameter name="killall"    value="no"/>
-    <parameter name="modules"    value="GEOM,LIGHT,SMESH,VISU,SUPERV,MED,COMPONENT"/>
+    <parameter name="modules"    value="GEOM,LIGHT,SMESH,VISU,SUPERV,MED,COMPONENT,HELLO"/>
     <parameter name="pyModules"  value=""/>
     <parameter name="embedded"   value="SalomeAppEngine,study"/>
     <parameter name="standalone" value="pyContainer,cppContainer,registry,moduleCatalog"/>
     <parameter name="GLViewer"     value="${SUITRoot}/resources"/>
     <parameter name="OCCViewer"    value="${SUITRoot}/resources"/>
     <parameter name="VTKViewer"    value="${SUITRoot}/resources"/>
+    <parameter name="LightApp"     value="${SUITRoot}/resources"/>
     <parameter name="SalomeApp"    value="${SUITRoot}/resources"/>
     <parameter name="OB"           value="${SUITRoot}/resources"/>
     <parameter name="CAM"          value="${SUITRoot}/resources"/>
-    <parameter name="LightApp"     value="${SUITRoot}/resources"/>
     <parameter name="GEOM"         value="${GEOM_ROOT_DIR}/share/salome/resources"/>
     <parameter name="LIGHT"        value="${LIGHT_ROOT_DIR}/share/salome/resources"/>
     <parameter name="SMESH"        value="${SMESH_ROOT_DIR}/share/salome/resources"/>
@@ -45,6 +45,7 @@
     <parameter name="MED"          value="${MED_ROOT_DIR}/share/salome/resources"/>
     <parameter name="StdMeshers"   value="${SMESH_ROOT_DIR}/share/salome/resources"/>
     <parameter name="COMPONENT"    value="${COMPONENT_ROOT_DIR}/share/salome/resources"/>
+    <parameter name="HELLO"        value="${HELLO1_ROOT_DIR}/share/salome/resources"/>
     <parameter name="NETGENPlugin" value="${NETGENPLUGIN_ROOT_DIR}/share/salome/resources"/>
     <parameter name="GHS3DPlugin"  value="${GHS3DPLUGIN_ROOT_DIR}/share/salome/resources"/>
     <parameter name="ToolsGUI"     value="${SUITRoot}/resources"/>
     <parameter name="name"       value="Med"/>
     <parameter name="icon"       value="ModuleMed.png"/>
   </section>
+  <section name="HELLO">
+    <parameter name="name"       value="Hello"/>
+    <parameter name="icon"       value="HELLO.png"/>
+  </section>
 
 <!-- values below this line are just an example, they are not used  -->
   <section name="application">