Salome HOME
Merge from BR_V5_DEV 16Feb09
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i_1.cxx
index 515de42180c5845bc4bfcaab57d4719c2682749e..b0701ea596b22275ba4b38fcc0def7b32aea948f 100644 (file)
@@ -1,31 +1,31 @@
-//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
+//  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.
 //
-//  Copyright (C) 2003  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
+//  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
+//
+//  SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
 // File      : SMESH_Gen_i_1.cxx
 // Created   : Thu Oct 21 17:24:06 2004
 // Author    : Edward AGAPOV (eap)
 // Module    : SMESH
 // $Header: 
-
+//
 #include "SMESH_Gen_i.hxx"
 
 #include "SMESH_Mesh_i.hxx"
 
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
+static int VARIABLE_DEBUG = 0;
 #else
 static int MYDEBUG = 0;
+static int VARIABLE_DEBUG = 0;
 #endif
 
 //=============================================================================
@@ -714,6 +716,10 @@ SALOMEDS::SObject_ptr
     // Add New Hypothesis
     string aPmName = isAlgo ? "ICON_SMESH_TREE_ALGO_" : "ICON_SMESH_TREE_HYPO_";
     aPmName += theHyp->GetName();
+    // prepend plugin name to pixmap name
+    string pluginName = myHypCreatorMap[string(theHyp->GetName())]->GetModuleName();
+    if ( pluginName != "StdMeshers" )
+      aPmName = pluginName + "::" + aPmName;
     aHypSO = publish( theStudy, theHyp, aRootSO, 0, aPmName.c_str() );
   }
 
@@ -859,3 +865,100 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
   return true;
 }
 
+//=======================================================================
+//function : UpdateParameters
+//purpose  : 
+//=======================================================================
+void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters)
+{
+
+  if(VARIABLE_DEBUG)
+    cout<<"UpdateParameters : "<<theParameters<<endl;
+  SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
+  if(aStudy->_is_nil() || CORBA::is_nil(theObject)) 
+    return;
+
+  SALOMEDS::SObject_var aSObj =  ObjectToSObject(aStudy,theObject);
+  if(aSObj->_is_nil())  
+    return;
+  
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  
+  SALOMEDS::GenericAttribute_var aFindAttr;
+  bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString");
+  if(VARIABLE_DEBUG)
+    cout<<"Find Attribute "<<hasAttr<<endl;
+
+  SALOMEDS::GenericAttribute_var anAttr;
+  anAttr = aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString");
+  SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr);
+
+  TCollection_AsciiString aNewParams;
+  TCollection_AsciiString aOldParameters(aStringAttr->Value());
+  TCollection_AsciiString anInputParams(ParseParameters(theParameters));
+  
+  if(!hasAttr)
+    aNewParams = anInputParams;
+  else 
+    aNewParams = aOldParameters+"|"+anInputParams;
+
+  if(VARIABLE_DEBUG)
+    {
+      cout<<"Input Parameters : "<<anInputParams<<endl;
+      cout<<"Old Parameters : "<<aOldParameters<<endl;
+      cout<<"New Parameters : "<<aNewParams<<endl;
+    }
+  
+  
+  aStringAttr->SetValue( aNewParams.ToCString() );
+}
+
+//=======================================================================
+//function : ParseParameters
+//purpose  : 
+//=======================================================================
+char* SMESH_Gen_i::ParseParameters(const char* theParameters)
+{
+  const char* aParameters = CORBA::string_dup(theParameters);
+  TCollection_AsciiString anInputParams;
+  SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
+  if( !aStudy->_is_nil() ) {
+    SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
+    for(int j=0;j<aSections->length();j++) {
+      SALOMEDS::ListOfStrings aVars= aSections[j];
+      for(int i=0;i<aVars.length();i++ ) {
+        anInputParams += aStudy->IsVariable(aVars[i].in()) ? 
+          TCollection_AsciiString(aVars[i].in()) : TCollection_AsciiString("");
+        if(i != aVars.length()-1)
+          anInputParams+=":";
+      }
+      if(j!=aSections->length()-1)
+        anInputParams+="|";
+    }
+  }
+  return CORBA::string_dup(anInputParams.ToCString());
+}
+
+//=======================================================================
+//function : GetParameters
+//purpose  : 
+//=======================================================================
+char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject)
+{
+  TCollection_AsciiString aResult;
+
+  SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
+  SALOMEDS::SObject_var aSObj =  ObjectToSObject(aStudy,theObject);
+
+  if(!aStudy->_is_nil() && 
+     !CORBA::is_nil(theObject) && 
+     !aSObj->_is_nil()){
+    
+    SALOMEDS::GenericAttribute_var anAttr;
+    if ( aSObj->FindAttribute(anAttr, "AttributeString")) {
+      aResult = TCollection_AsciiString(SALOMEDS::AttributeString::_narrow(anAttr)->Value());
+    }
+  }
+  
+  return CORBA::string_dup( aResult.ToCString() );
+}