]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Implementation of object remove on deactivation
authorasl <asl@opencascade.com>
Tue, 15 Dec 2009 13:17:31 +0000 (13:17 +0000)
committerasl <asl@opencascade.com>
Tue, 15 Dec 2009 13:17:31 +0000 (13:17 +0000)
src/Notebook/Makefile.am
src/Notebook/SALOME_Notebook.cxx
src/Notebook/SALOME_Notebook.hxx
src/Notebook/SALOME_ParameterizedObject.cxx [new file with mode: 0644]
src/Notebook/SALOME_ParameterizedObject.hxx [new file with mode: 0644]

index 5db33dd75010f2f9e1ba48b95d0f27eb84e30b72..8eeba1cae867474d4fed4ac9791c885db9485276 100644 (file)
@@ -39,7 +39,8 @@ salomeinclude_HEADERS = \
     SALOME_EvalExpr.hxx    \
     SALOME_EvalParser.hxx  \
     SALOME_EvalSet.hxx     \
-    SALOME_EvalVariant.hxx   
+    SALOME_EvalVariant.hxx \
+    SALOME_ParameterizedObject.hxx
     
 # Scripts to be installed
 dist_salomescript_PYTHON=
@@ -79,7 +80,8 @@ libSalomeNotebook_la_SOURCES = \
     SALOME_EvalExpr.cxx  \
     SALOME_EvalParser.cxx  \
     SALOME_EvalSet.cxx  \
-    SALOME_EvalVariant.cxx  
+    SALOME_EvalVariant.cxx \
+    SALOME_ParameterizedObject.cxx
 
 libSalomeNotebook_la_CPPFLAGS = $(COMMON_CPPFLAGS)
 libSalomeNotebook_la_LDFLAGS  = -Wl,-E -no-undefined -version-info=0:0:0 @LDEXPDYNFLAGS@
index ac661163e3e862a395b091978a008f1ee8513eb3..23fffd52bbc181007d0a911982f78185dc0c5f56 100644 (file)
@@ -264,7 +264,7 @@ void SALOME_Notebook::SetToUpdate( SALOME::ParameterizedObject_ptr theObj )
 
 bool SALOME_Notebook::CanUpdate( SALOME::ParameterizedObject_ptr theObj ) const
 {
-  if( CORBA::is_nil( theObj ) )
+  if( CORBA::is_nil( theObj ) || theObj->_non_existent() )
     return false;
 
   SALOME::Parameter_var aParam = SALOME::Parameter::_narrow( theObj );
@@ -282,7 +282,7 @@ void SALOME_Notebook::Update( bool theOnlyParameters )
   //Utils_Locker lock( &myMutex );
 
   //1. Simple recompute
-  std::list< KeyHelper > aPostponedUpdate;
+  std::list<KeyHelper> aPostponedUpdate;
   std::list<KeyHelper>::const_iterator it = myToUpdate.begin(), last = myToUpdate.end();
   for( ; it!=last; it++ )
   {
@@ -482,6 +482,32 @@ void SALOME_Notebook::Rename( const char* theOldName, const char* theNewName )
     ThrowError( aMsg );
 }
 
+void SALOME_Notebook::RemoveObject( SALOME::ParameterizedObject_ptr theObject )
+{
+  if( theObject->GetComponent()==PARAM_COMPONENT )
+    Remove( theObject->GetEntry() );
+
+  std::list<std::string> anObjToRemove;
+  std::string aKey = GetKey( theObject );
+
+  std::map< std::string, std::list<std::string> >::iterator it = myDependencies.begin(), last = myDependencies.end();
+  for( ; it!=last; it++ )
+  {
+    it->second.remove( aKey );
+    if( it->second.size()==0 )
+      anObjToRemove.push_back( it->first );
+  }
+
+  std::list<std::string>::const_iterator rit = anObjToRemove.begin(), rlast = anObjToRemove.end();
+  for( ; rit!=rlast; rit++ )
+    myDependencies.erase( *rit );
+
+  std::list<KeyHelper>::iterator uit = myToUpdate.begin(), ulast = myToUpdate.end();
+  for( ; uit!=ulast; uit++ )
+    if( uit->key()==aKey )
+      myToUpdate.erase( uit );
+}  
+
 void SALOME_Notebook::Remove( const char* theParamName )
 {
   SALOME_Parameter* aParam = GetParameterPtr( theParamName );
index b69b5c0fa96cd933817a912a010679479781d547..fc8ec47bfca6f5e94546aef1b28b4282f8a94926 100644 (file)
@@ -64,6 +64,7 @@ public:
   virtual void AddInteger( const char* theName, CORBA::Long theValue );
   virtual void AddReal( const char* theName, CORBA::Double theValue );
   virtual void AddString( const char* theName, const char* theValue );
+  virtual void RemoveObject( SALOME::ParameterizedObject_ptr theObject );
   virtual void Remove( const char* theParamName );
   virtual void Rename( const char* theOldName, const char* theNewName );
   virtual SALOME::Parameter_ptr GetParameter( const char* theParamName );
diff --git a/src/Notebook/SALOME_ParameterizedObject.cxx b/src/Notebook/SALOME_ParameterizedObject.cxx
new file mode 100644 (file)
index 0000000..1754271
--- /dev/null
@@ -0,0 +1,37 @@
+//  Copyright (C) 2007-2008  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
+//
+//  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SALOME_ParameterizedObject.cxx
+//  Author : Alexandre SOLOVYOV
+//  Module : SALOME
+
+#include <SALOME_ParameterizedObject.hxx>
+
+SALOME_ParameterizedObject::SALOME_ParameterizedObject( SALOME::Notebook_ptr theNotebook )
+{
+  myNotebook = theNotebook;
+}
+
+void SALOME_ParameterizedObject::BeforeDeactivate()
+{
+  if( !CORBA::is_nil( myNotebook ) )
+    myNotebook->RemoveObject( _this() );
+}
diff --git a/src/Notebook/SALOME_ParameterizedObject.hxx b/src/Notebook/SALOME_ParameterizedObject.hxx
new file mode 100644 (file)
index 0000000..6a1c904
--- /dev/null
@@ -0,0 +1,44 @@
+//  Copyright (C) 2007-2008  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
+//
+//  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File   : SALOME_ParameterizedObject.hxx
+//  Author : Alexandre SOLOVYOV
+//  Module : SALOME
+//
+#ifndef __SALOME_PARAMETERIZED_OBJECT_H__
+#define __SALOME_PARAMETERIZED_OBJECT_H__
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SALOME_Notebook)
+#include <SALOME_GenericObj_i.hh>
+
+class SALOME_ParameterizedObject : public virtual POA_SALOME::ParameterizedObject, public virtual SALOME::GenericObj_i
+{
+public:
+  SALOME_ParameterizedObject( SALOME::Notebook_ptr theNotebook );
+
+  virtual void BeforeDeactivate();
+
+private:
+  SALOME::Notebook_var myNotebook;
+};
+
+#endif