Salome HOME
Allow switching OFF C++0x/C++11 support
[modules/kernel.git] / idl / SALOMEDS.idl
index 79ce87142a4e4c5f9fa9d52f7d65d8f6ba449c0c..2195c19c24b9ea3ead6e95ef7c7baa3766c0d9ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -125,6 +125,8 @@ during each working session.
   interface Study
   {
 
+//! Invalid study reference
+    exception StudyInvalidReference {};
 //! Invalid study context
     exception StudyInvalidContext {};
 //! Invalid study component
@@ -137,7 +139,7 @@ during each working session.
     exception StudyObjectAlreadyExists {};
 //! Invalid name of the %study exception
     exception StudyNameError {};
-//! Invalid study comment 
+//! Invalid study comment
     exception StudyCommentError {};
 
 /*! \brief The name of the %Study
@@ -153,15 +155,15 @@ during each working session.
 //! Sequence containing %SObjects
     typedef sequence<SObject> ListOfSObject;
 //!  Get the persistent reference to the %Study.
-    PersistentReference  GetPersistentReference();
+    PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
 //! Get a transient reference to the %Study.
-    SalomeReference      GetTransientReference();
+    SalomeReference      GetTransientReference() raises(StudyInvalidReference);
 
 /*! \brief indicate whether the %Study is empty
 
     \return True if the %Study is empty
 */
-    boolean IsEmpty();
+    boolean IsEmpty() raises(StudyInvalidReference);
 /*! \brief  Find a %SComponent by its name.
 
    \param aComponentName    It's a string value in the Comment Attribute of the Component,
@@ -170,11 +172,11 @@ during each working session.
 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
-    SComponent FindComponent  (in string aComponentName);
+    SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
 
 /*! \brief  Find a %SComponent by ID of the according %SObject
 */
-    SComponent FindComponentID(in ID aComponentID);
+    SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
 /*! \brief  Find a %SObject by the Name Attribute of this %SObject
 
     \param anObjectName String parameter defining the name of the object
@@ -182,40 +184,40 @@ during each working session.
 
 <em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    SObject       FindObject      (in string anObjectName);
+    SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
 /*! \brief  Find a %SObject by its ID
 
     \param aObjectID This parameter defines the ID of the required object
     \return The obtained %SObject
 */
-    SObject       FindObjectID    (in ID aObjectID);
+    SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
 /*! \brief Create a %SObject by its ID
 
     \param aObjectID This parameter defines the ID of the required object
     \return The created %SObject
 */
-    SObject       CreateObjectID    (in ID aObjectID);
+    SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
 /*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
 
     \param anObjectName This parameter defines the IOR of the object
     \return The obtained %SObject
 */
-    SObject       FindObjectIOR   (in ID aObjectIOR);
+    SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
 /*! \brief  Find in the study all %SObjects produced by a given %Component.
 
     \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
     \param aComponentName The name of the component, which objects are searched for.
 */
-    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName);
+    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
 /*! \brief  Find a %SObject by the path to it.
 
     \param thePath The path to the required %SObject.
     \return The obtained %SObject.
 */
-    SObject FindObjectByPath(in string thePath);
+    SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
 /*! \brief Get the path to the %SObject.
 */
-    string  GetObjectPath(in Object theObject);
+    string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
 
 /*! \brief  Set the context of the %Study.
 
@@ -223,44 +225,44 @@ during each working session.
 
 <em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    void SetContext(in string thePath);
+    void SetContext(in string thePath) raises (StudyInvalidReference, StudyInvalidContext);
 /*!  \brief Get the context of the %Study.
-    
+
 <em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    string GetContext();
+    string GetContext() raises (StudyInvalidReference, StudyInvalidContext);
 /*!  \brief Get a list of names of objects corresponding to the context.
 
    \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
 */
-    ListOfStrings GetObjectNames(in string theContext);
+    ListOfStrings GetObjectNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
 /*! \brief Get a list of names of directories and subdirectories corresponding to the context.
 
    \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
 */
-    ListOfStrings GetDirectoryNames(in string theContext);
+    ListOfStrings GetDirectoryNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
 /*! \brief  Get a list of names of Files corresponding to the context.
 
     \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
 */
-    ListOfStrings GetFileNames(in string theContext);
+    ListOfStrings GetFileNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
 /*! \brief Get a list of names of Components corresponding to the context.
 
    \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
 */
-    ListOfStrings GetComponentNames(in string theContext);
+    ListOfStrings GetComponentNames(in string theContext) raises(StudyInvalidReference);
 /*!  \brief Create a new iterator of child levels of the given %SObject.
 
     \param aSO The given %SObject
     \return A new iterator of child levels of the given %SObject.
 */
-    ChildIterator      NewChildIterator(in SObject aSO);
+    ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
 
 /*!  \brief Create a new iterator of the %SComponents.
 
     \return A new iterator of the %SComponents.
 */
-    SComponentIterator NewComponentIterator();
+    SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
 
 /*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
 
@@ -268,12 +270,12 @@ during each working session.
 
 <em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    StudyBuilder NewBuilder() ;
+    StudyBuilder NewBuilder() raises(StudyInvalidReference);
 /*! \brief Labels dependency
 
     Updates the map with IOR attribute. It's an inner method used for optimization.
 */
-    void UpdateIORLabelMap(in string anIOR, in string anEntry);
+    void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
 
 /*! \brief Getting properties of the study
 
@@ -282,7 +284,7 @@ during each working session.
 <em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
-    AttributeStudyProperties GetProperties();
+    AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
 /*! \brief  Indicate whether the %study has been saved
 */
     attribute boolean IsSaved;
@@ -290,33 +292,33 @@ during each working session.
 
   Returns True if the %study has been modified and not saved.
 */
-    boolean IsModified();
+    boolean IsModified() raises(StudyInvalidReference);
 
 /*! \brief  Mark the %study as being modified and not saved.
 */
-    void Modified();
+    void Modified() raises(StudyInvalidReference);
 
 /*! \brief  Indicate the file where the %study has been saved
 */
-    attribute string  URL;
+    attribute string URL;
 
 /*! \brief List of %SObjects
 
     Returns the list of %SObjects which refers to %anObject.
 */
-    ListOfSObject FindDependances(in SObject anObject);
+    ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
 
 /*! \brief The date of the last saving of the study
 
     Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
 */
-    string GetLastModificationDate();
+    string GetLastModificationDate() raises(StudyInvalidReference);
 /*! \brief The list of modification dates of the study
 
     Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
       Note : the first modification begins the list.
 */
-    ListOfDates GetModificationsDate();
+    ListOfDates GetModificationsDate() raises(StudyInvalidReference);
 /*! \brief Object conversion.
 
     Converts an object into IOR.
@@ -332,38 +334,38 @@ during each working session.
 
 /*!  \brief Get a new %UseCaseBuilder.
 */
-    UseCaseBuilder  GetUseCaseBuilder();
+    UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
 
 /*! \brief  Close the components in the study, remove itself from the %StudyManager.
 */
-    void Close();
+    void Close() raises(StudyInvalidReference);
 
 /*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
 */
-    void EnableUseCaseAutoFilling(in boolean isEnabled);
+    void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
 
 /*!
     Functions for internal usage only
 */
-    void AddPostponed(in string theIOR);
+    void AddPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    void AddCreatedPostponed(in string theIOR);
+    void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    void RemovePostponed(in long theUndoLimit);
+    void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
 
-    void UndoPostponed(in long theWay);
+    void UndoPostponed(in long theWay) raises(StudyInvalidReference);
 
     boolean DumpStudy(in string thePath,
                       in string theBaseName,
                       in boolean isPublished,
-                      in boolean isMultiFile);
+                      in boolean isMultiFile) raises(StudyInvalidReference);
 
 /*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
 
     \param theID identifies a common parameters set (Example: "Interface Applicative")
     \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint);
+    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
 
 /*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
 
@@ -371,7 +373,7 @@ during each working session.
     \param theModuleName is a name of the module (Example: "Geometry")
     \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint);
+    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
 
 
 /*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
@@ -379,7 +381,7 @@ during each working session.
     \param theModuleName is a name of the module (Example: "Geometry")
     \param indent is a string to use for script indentation
 */
-    string GetDefaultScript(in string theModuleName, in string indent);
+    string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
 
 /*!
     Private method, returns an implementation of this Study.
@@ -390,117 +392,117 @@ during each working session.
     long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
 
 
-/*! \brief  Mark this Study as being locked by the given locker. 
+/*! \brief  Mark this Study as being locked by the given locker.
 
     The lock status can be checked by method IsStudyLocked
     \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
 */
-    void SetStudyLock(in string theLockerID);
+    void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
 
 /*! \brief Indicate if the Study is locked
 
-   Returns True if the Study was marked locked. 
+   Returns True if the Study was marked locked.
 */
-    boolean IsStudyLocked();
+    boolean IsStudyLocked() raises(StudyInvalidReference);
 
-/*! \brief  Mark this Study as being unlocked by the given locker. 
+/*! \brief  Mark this Study as being unlocked by the given locker.
 
      The lock status can be checked by method IsStudyLocked
     \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
 */
-    void UnLockStudy(in string theLockerID);
+    void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
 
-/*! \brief  Get the list of IDs of the Study's lockers. 
+/*! \brief  Get the list of IDs of the Study's lockers.
 */
-    ListOfStrings GetLockerID();
+    ListOfStrings GetLockerID() raises(StudyInvalidReference);
 
-/*! \brief  Create real variable with Name theVarName and value theValue 
+/*! \brief  Create real variable with Name theVarName and value theValue
 
     (or set if variable value into theValue already exists)
     \param theVarName is a name of the variable
     \param theVarName is a value of the variable.
 */
-    void SetReal( in string theVarName, in double theValue );
+    void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
-/*! \brief  Create integer variable with Name theVarName and value theValue 
+/*! \brief  Create integer variable with Name theVarName and value theValue
 
     (or set if variable value into theValue already exists)
     \param theVarName is a name of the variable
     \param theVarName is a value of the variable.
 */
-    void SetInteger( in string theVarName, in long theValue );
-/*! \brief  Create boolean variable with Name theVarName and value theValue 
+    void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
+/*! \brief  Create boolean variable with Name theVarName and value theValue
 
     (or set if variable value into theValue already exists)
     \param theVarName is a name of the variable
     \param theVarName is a value of the variable.
 */
-    void SetBoolean( in string theVarName, in boolean theValue );
+    void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
 
-/*! \brief  Create string variable with Name theVarName and value theValue 
+/*! \brief  Create string variable with Name theVarName and value theValue
 
     (or set if variable value into theValue already exists)
     \param theVarName is a name of the variable
     \param theVarName is a value of the variable.
 */
-    void SetString( in string theVarName, in string theValue );
+    void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
 
 /*! \brief  Set current value as double for string variable
 */
-    void SetStringAsDouble( in string theVarName, in double theValue );
+    void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
 /*! \brief Get value of a real variable
 
     \param theVarName is a name of the variable.
 */
-    double GetReal( in string theVarName );
+    double GetReal( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Get value of an integer variable
 
     \param theVarName is a name of the variable.
 */
-    long GetInteger( in string theVarName );
+    long GetInteger( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Get value of a boolean variable
 
     \param theVarName is a name of the variable.
 */
-    boolean GetBoolean( in string theVarName );
+    boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Get value of a string variable
 
     \param theVarName is a name of the variable.
 */
-    string GetString( in string theVarName );
-    
+    string GetString( in string theVarName ) raises(StudyInvalidReference);
+
 
 /*! \brief Indicate if a variable is real
 
     Return true if variable is real otherwise return false.
     \param theVarName is a name of the variable.
 */
-    boolean IsReal( in string theVarName );
+    boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Indicate if a variable is integer
 
     Return true if variable is integer otherwise return false.
     \param theVarName is a name of the variable.
 */
-    boolean IsInteger( in string theVarName );
+    boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Indicate if a variable is boolean
 
     Return true if variable is boolean otherwise return false.
     \param theVarName is a name of the variable.
 */
-    boolean IsBoolean( in string theVarName );
+    boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Indicate if a variable is string
 
     Return true if variable is string otherwise return false.
     \param theVarName is a name of the variable.
 */
-    boolean IsString( in string theVarName );
+    boolean IsString( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Indicate if a variable exists in the study
 
@@ -508,11 +510,11 @@ during each working session.
     otherwise return false.
     \param theVarName is a name of the variable.
 */
-    boolean IsVariable( in string theVarName );
+    boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Get names of all variables from the study.
 */
-    ListOfStrings GetVariableNames();
+    ListOfStrings GetVariableNames() raises(StudyInvalidReference);
 
 /*! \brief Remove a variable
 
@@ -521,7 +523,7 @@ during each working session.
    \param theVarName Name of the variable.
    \return Status of operation.
 */
-    boolean RemoveVariable( in string theVarName );
+    boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Rename a variable
 
@@ -531,7 +533,7 @@ during each working session.
    \param theNewVarName New name for the variable.
    \return Status of operation.
 */
-    boolean RenameVariable( in string theVarName, in string theNewVarName );
+    boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
 
 /*! \brief Indicate whether variable is used
 
@@ -540,21 +542,29 @@ during each working session.
    \param theVarName Name of the variable.
    \return Variable usage.
 */
-    boolean IsVariableUsed( in string theVarName );
+    boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
 
 /*! \brief Parse variables used for object creation
 
-   \param string with variables, separated by special symbol. 
+   \param string with variables, separated by special symbol.
    \return Variables list.
 */
-    ListOfListOfStrings ParseVariables( in string theVars );
+    ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
 
 /*!
      Attach an observer to the Study
 
-    \param theObserver
+    \param theObserver observer being attached
+    \param modify when \c true, observer receives any object's modification events;
+           otherwise observer receives object's creation events only
+*/
+     void attach(in SALOMEDS::Observer theObserver, in boolean modify);
+/*!
+     Detach an observer from the Study
+
+    \param theObserver observer to be detached
 */
-     void attach(in SALOMEDS::Observer theObserver, in boolean modify);   
+     void detach(in SALOMEDS::Observer theObserver);
   };
 
   //==========================================================================
@@ -591,7 +601,7 @@ during each working session.
     Defines the instance to the %SComponent.
 */
     void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
-        
+
 /*! \brief Deletion of a %SComponent
 
   Removes a %SComponent.
@@ -659,7 +669,7 @@ during each working session.
 */
 
     GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
-                                        in  string         aTypeOfAttribute) raises(LockProtection);
+                                         in  string         aTypeOfAttribute) raises(LockProtection);
 
 /*! \brief Looking for an attribute assigned to a %SObject
 
@@ -671,8 +681,8 @@ during each working session.
  */
 
     boolean FindAttribute(in  SObject        anObject,
-                                out GenericAttribute anAttribute,
-                                in  string         aTypeOfAttribute);
+                                 out GenericAttribute anAttribute,
+                                 in  string         aTypeOfAttribute);
 /*! \brief Deleting the attribute assigned to the %SObject
 
     Removes the attribute of a specific type which is assigned to the object.
@@ -682,7 +692,7 @@ during each working session.
 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
     void RemoveAttribute(in  SObject        anObject,
-                        in  string         aTypeOfAttribute) raises(LockProtection);
+                         in  string         aTypeOfAttribute) raises(LockProtection);
 /*!
     Adds a reference between %anObject and %theReferencedObject.
     \param anObject The %SObject which will get a reference
@@ -690,7 +700,7 @@ during each working session.
 */
 
     void Addreference(in SObject anObject,
-                     in SObject theReferencedObject) ;
+                      in SObject theReferencedObject) ;
 
 /*!
     Removes a reference from %anObject to another object.
@@ -729,7 +739,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
 /*! \brief Creation of a new command
 
    Creates a new command which can contain several different actions.
-   
+
 <em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
@@ -751,7 +761,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
 /*! \brief Cancelation of the command
 
     Cancels all actions declared within the command.
-    
+
 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
     void AbortCommand(); // command management
@@ -782,7 +792,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
     void Redo() raises (LockProtection);
 /*!
     Returns True if at this moment there are any actions which can be canceled.
-    
+
 <em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
@@ -846,7 +856,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
 
 /*!
     Shutdown the StudyManager process.
-*/    
+*/
     oneway void ShutdownWithExit();
 
 /*! \brief Creation of a new study
@@ -858,7 +868,7 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
-    Study NewStudy(in string study_name);
+    Study NewStudy(in string study_name) raises (SALOME::SALOME_Exception);
 
 /*! \brief Open a study
 
@@ -901,8 +911,8 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 */
     boolean  SaveAs(in URL   aUrl, // if the file already exists
-               in Study aStudy,
-               in boolean theMultiFile); // overwrite (as option)
+                in Study aStudy,
+                in boolean theMultiFile); // overwrite (as option)
 /*! \brief Saving the study in a specified ASCII file (or files).
 
     Saves the study in a specified ASCII file (or files).
@@ -912,8 +922,8 @@ Searches for a definite %SObject with a definite GUID and returns True if it fin
     \param theMultiFile If this parameter is True the study will be saved in several files.
 */
     boolean  SaveAsASCII(in URL   aUrl, // if the file already exists
-                     in Study aStudy,
-                     in boolean theMultiFile); // overwrite (as option)
+                      in Study aStudy,
+                      in boolean theMultiFile); // overwrite (as option)
 
 
 /*! \brief List of open studies.
@@ -971,11 +981,11 @@ Gets the list of open studies
 */
     string ConvertObjectToIOR(in Object theObject);
 /*! \brief Object conversion.
-           
+
     Converts IOR into an object.
     \return    An object
 */
-    Object ConvertIORToObject(in string theIOR); 
+    Object ConvertIORToObject(in string theIOR);
 
 /*!
     Private method, returns an implementation of this StudyManager.
@@ -983,8 +993,7 @@ Gets the list of open studies
    \param thePID is a process ID of the caller
    \param isLocal is set True if the StudyManager is launched locally with the caller
 */
-    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal); 
-
+    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
 
   };
 
@@ -995,7 +1004,7 @@ Gets the list of open studies
    The objects in the %study are built by the %StudyBuilder. The %SObject interface
    provides methods for elementary inquiries, like getting an object %ID or its attribuites.
  \note
+
    <BR><VAR>Tag</VAR> of an item in %SALOME application is an integer value uniquely defining an item
    in the tree-type data structure.
    <BR><VAR>ID</VAR> of an item is a description of item's position in the tree-type data structure.
@@ -1014,69 +1023,71 @@ Gets the list of open studies
     boolean IsNull();
 
 /*! Gets an object %ID
-
    \return ID of the %SObject.
 */
     ID GetID();
-/*!  Acquisition of the father %Component of the %SObject
 
+/*!  Acquisition of the father %Component of the %SObject
   \return The father %Component of the %SObject.
 */
     SComponent GetFatherComponent();
-/*! Acquisition of the father %SObject of the %SObject
 
+/*! Acquisition of the father %SObject of the %SObject
    \return the father %SObject of the given %SObject.
 */
     SObject    GetFather();
-/*! Gets the %tag of a %SObject
 
+/*! Gets the %tag of a %SObject
     \return the %tag of a %SObject.
 */
     short      Tag();
-/*! Gets the depth of a %SObject
 
+/*! Returns a tag of the last child %SObject (if any) of this %SObject.
+    Returns zero if this %SObject has no children.
+*/
+    short      GetLastChildTag();
+
+/*! Gets the depth of a %SObject
     \return the depth of a %SObject.
 */
     short      Depth();
-/*! Looks for subobjects of a given %SObject.
 
+/*! Looks for subobjects of a given %SObject.
     \param atag Tag of the given %SObject
     \return True if it finds a subobject of the %SObject with a definite tag as well as the required subobject.
 */
-
     boolean FindSubObject (in long atag, out SObject obj);
-/*! Looks for attributes of a given %SObject
 
+/*! Looks for attributes of a given %SObject
    \param aTypeOfAttribute String value defining the type of the required attribute of the given %SObject.
    \return True if it finds an attribute of a definite type of the given %SObject as well as the discovered attribute.
 
 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 */
     boolean FindAttribute(out GenericAttribute anAttribute,
-                                 in  string         aTypeOfAttribute);
-/*! Looks for a %SObject which the given %SObject refers to.
+                                  in  string         aTypeOfAttribute);
 
+/*! Looks for a %SObject which the given %SObject refers to.
     \return The object which the given %SObject refers to as well as True if it finds
     this object.
 */
     boolean ReferencedObject(out SObject obj); // A REVOIR
-/*! Gets all attributes of a given %SObject
 
+/*! Gets all attributes of a given %SObject
     \return The list of all attributes of the given %SObject.
 
 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
     ListOfAttributes     GetAllAttributes();
-/*! Gets the study of a given %SObject.
 
+/*! Gets the study of a given %SObject.
     \return The study containing the given %SObject.
 */
     Study GetStudy();
 
 /*! Gets the CORBA object by its own IOR attribute.
     Returns nil, if can't.
-
     \return The CORBA object of the %SObject.
 */
     Object GetObject();
@@ -1141,8 +1152,8 @@ Gets the list of open studies
     string Type();
 
     //! Get the class type
-    string GetClassType();     
-       
+    string GetClassType();
+
     //! Get SObject
     SObject GetSObject();
 
@@ -1455,9 +1466,9 @@ study is saved these references are transformed into persintent IDs.
 
 */
     string IORToLocalPersistentID (in SObject theSObject,
-                                  in string IORString,
-                                  in boolean isMultiFile,
-                                  in boolean isASCII);
+                                   in string IORString,
+                                   in boolean isMultiFile,
+                                   in boolean isASCII);
 /*!
   Transforms PersistentID into IOR of the object. It is called for each
    object in the %study.
@@ -1474,9 +1485,9 @@ study is open, these references are transformed into persintent IORs.
 
 */
     string LocalPersistentIDToIOR (in SObject theSObject,
-                                  in string aLocalPersistentID,
-                                  in boolean isMultiFile,
-                                  in boolean isASCII)
+                                   in string aLocalPersistentID,
+                                   in boolean isMultiFile,
+                                   in boolean isASCII)
       raises (SALOME::SALOME_Exception);
 
     // Publishing in the study