Salome HOME
PAL10237. Add a button assigning a set of hypotheses
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Swig.cxx
index 0af98fb7243727a6f9c5931661ecdcdd2d417327..d8a0805e3da46398c16a278d572ded7f16cc79a3 100644 (file)
@@ -21,7 +21,7 @@
 //
 //
 //
-//  File   : SMESHGUI_Swig.cxx
+//  File   : SMESH_Swig.cxx
 //  Author : Nicolas REJNERI
 //  Module : SMESH
 //  $Header$
@@ -32,10 +32,17 @@ using namespace std;
 #include "Utils_ORB_INIT.hxx"
 #include "Utils_SINGLETON.hxx"
 
+#include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_GEOMGenUtils.h"
+
 // SALOME Includes
-#include "QAD_Application.h"
-#include "QAD_Desktop.h"
-#include "QAD_ResourceMgr.h"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_Session.h"
+
+#include "SALOMEDS_SObject.hxx"
+
+#include "SalomeApp_Application.h"
 
 #include "utilities.h"
 
@@ -47,59 +54,78 @@ using namespace std;
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
-#include CORBA_SERVER_HEADER(GEOM_Shape)
 
 static CORBA::ORB_var _orb;
 
-static char* ObjectToString (CORBA::Object_ptr obj)
-{
-  return _orb->object_to_string(obj);
-}
-
 static CORBA::Object_ptr StringToObject (const char* ior)
 {
   return _orb->string_to_object(ior);
 }
 
-SMESHGUI_Swig::SMESHGUI_Swig()
+SMESH_Swig::SMESH_Swig()
 {
   MESSAGE("Constructeur");
   setOrb();
 }
 
-void SMESHGUI_Swig::Init(int studyID)
+void SMESH_Swig::Init(int studyID)
 {
   MESSAGE("Init");
-  Engines::Component_var comp = QAD_Application::getDesktop()->getEngine("FactoryServer", "SMESH");
-  SMESH::SMESH_Gen_var CompMesh = SMESH::SMESH_Gen::_narrow(comp);
+  SMESH::SMESH_Gen_var CompMesh = SMESHGUI::GetSMESHGen();
+  GEOM::GEOM_Gen_var CompGeom = SMESH::GetGEOMGen();
 
-  QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
+  SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr();
   if ( resMgr ) {
-    QString msg;
-    if (!resMgr->loadResources( "SMESHGUI", msg ))
-      MESSAGE ( msg )
+    resMgr->loadLanguage( QString::null, "en" );
+    /*QString msg;
+    if (!resMgr->loadResources( "SMESH", msg ))
+      MESSAGE ( msg )*/
   }
 
-  CORBA::Object_var obj = QAD_Application::getDesktop()->getNameService()->Resolve("/myStudyManager");
+  SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+  if( !app )
+    return;
+
+  CORBA::Object_var obj = app->namingService()->Resolve("/myStudyManager");
   SALOMEDS::StudyManager_var myStudyMgr = SALOMEDS::StudyManager::_narrow(obj);
   myStudy = myStudyMgr->GetStudyByID(studyID);
+
+  CompMesh->SetCurrentStudy( myStudy.in() ); 
+
   myStudyBuilder = myStudy->NewBuilder();
   SALOMEDS::GenericAttribute_var anAttr;
   SALOMEDS::AttributeName_var    aName;
   SALOMEDS::AttributePixMap_var  aPixmap;
 
-  SALOMEDS::SComponent_var father = myStudy->FindComponent("MESH");
-  
+  // See return value of SMESH::SMESH_Gen::ComponentDataType()
+  SALOMEDS::SComponent_var father = myStudy->FindComponent("SMESH");
+
   if (father->_is_nil()) {
-    father = myStudyBuilder->NewComponent("MESH");
+    bool aLocked = myStudy->GetProperties()->IsLocked();
+    if (aLocked) myStudy->GetProperties()->SetLocked(false);
+    father = myStudyBuilder->NewComponent("SMESH");
     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributeName");
     aName = SALOMEDS::AttributeName::_narrow(anAttr);
-    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
+    //NRI    aName->SetValue(QObject::tr("SMESH_MEN_COMPONENT"));
+    SMESHGUI* gui = SMESHGUI::GetSMESHGUI(); //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded
+    if(!gui) {
+      SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication()); 
+      if(app) {
+        CAM_Module* module = app->module( "Mesh" );
+       if(!module) module = app->loadModule("Mesh");
+       gui = dynamic_cast<SMESHGUI*>( module ); 
+      }
+      else {
+        MESSAGE("Can't find the application");
+      }
+    }  //SRN: BugID IPAL9186: end of a fix
+    aName->SetValue( gui->moduleName() );
     anAttr = myStudyBuilder->FindOrCreateAttribute(father, "AttributePixMap");
     aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
     aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
+    myStudyBuilder->DefineComponentInstance(father, CompMesh );
+    if (aLocked) myStudy->GetProperties()->SetLocked(true);
   }
-  myStudyBuilder->DefineComponentInstance(father, CompMesh );
   mySComponentMesh = SALOMEDS::SComponent::_narrow( father );
 
   // Tags definition 
@@ -117,15 +143,20 @@ void SMESHGUI_Swig::Init(int studyID)
   Tag_SubMeshOnCompound = 8;
 }
 
-SMESHGUI_Swig::~SMESHGUI_Swig()
+SMESH_Swig::~SMESH_Swig()
 {
   MESSAGE("Destructeur");
 }
 
-
-const char* SMESHGUI_Swig::AddNewMesh(const char* IOR)
+const char* SMESH_Swig::AddNewMesh(const char* IOR)
 {
   MESSAGE("AddNewMesh");
+
+  // VSR: added temporarily - to be removed - objects are published automatically by engine
+  SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
+  if ( !SO->_is_nil() )
+    return SO->GetID();
+
   //Find or Create Hypothesis root
   SALOMEDS::GenericAttribute_var    anAttr;
   SALOMEDS::AttributeName_var       aName;
@@ -172,9 +203,15 @@ const char* SMESHGUI_Swig::AddNewMesh(const char* IOR)
   return SALOMEDS::SObject::_narrow( newMesh )->GetID();
 }
 
-const char* SMESHGUI_Swig::AddNewHypothesis(const char* IOR)
+const char* SMESH_Swig::AddNewHypothesis(const char* IOR)
 {
   MESSAGE("AddNewHypothesis");
+
+  // VSR: added temporarily - to be removed - objects are published automatically by engine
+  SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
+  if ( !SO->_is_nil() )
+    return SO->GetID();
+
   //Find or Create Hypothesis root
   SALOMEDS::SObject_var             HypothesisRoot;
   SALOMEDS::GenericAttribute_var    anAttr;
@@ -216,9 +253,15 @@ const char* SMESHGUI_Swig::AddNewHypothesis(const char* IOR)
   return SALOMEDS::SObject::_narrow(newHypo)->GetID();
 }
 
-const char* SMESHGUI_Swig::AddNewAlgorithms(const char* IOR)
+const char* SMESH_Swig::AddNewAlgorithms(const char* IOR)
 {
   MESSAGE("AddNewAlgorithms");
+
+  // VSR: added temporarily - to be removed - objects are published automatically by engine
+  SALOMEDS::SObject_var SO = myStudy->FindObjectIOR( IOR );
+  if ( !SO->_is_nil() )
+    return SO->GetID();
+
   //Find or Create Algorithms root
   SALOMEDS::SObject_var             AlgorithmsRoot;
   SALOMEDS::GenericAttribute_var    anAttr;
@@ -260,7 +303,7 @@ const char* SMESHGUI_Swig::AddNewAlgorithms(const char* IOR)
   return SALOMEDS::SObject::_narrow(newHypo)->GetID();
 }
 
-void SMESHGUI_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
+void SMESH_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
 {
   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( MeshEntry );
   SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( ShapeEntry );
@@ -271,7 +314,7 @@ void SMESHGUI_Swig::SetShape(const char* ShapeEntry, const char* MeshEntry)
   }
 }
 
-void SMESHGUI_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
+void SMESH_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char* Hypothesis_Entry)
 {
   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
   SALOMEDS::SObject_var SO_Hypothesis = myStudy->FindObjectID( Hypothesis_Entry );
@@ -300,7 +343,8 @@ void SMESHGUI_Swig::SetHypothesis(const char* Mesh_Or_SubMesh_Entry, const char*
     myStudyBuilder->Addreference (SO,SO_Hypothesis);
   }
 }
-void SMESHGUI_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
+
+void SMESH_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char* Algorithms_Entry)
 {
   SALOMEDS::SObject_var SO_MorSM = myStudy->FindObjectID( Mesh_Or_SubMesh_Entry );
   SALOMEDS::SObject_var SO_Algorithms = myStudy->FindObjectID( Algorithms_Entry );
@@ -329,15 +373,14 @@ void SMESHGUI_Swig::SetAlgorithms(const char* Mesh_Or_SubMesh_Entry, const char*
   }
 }
 
-void SMESHGUI_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
+void SMESH_Swig::UnSetHypothesis(const char* Applied_Hypothesis_Entry )
 {
   SALOMEDS::SObject_var SO_Applied_Hypothesis = myStudy->FindObjectID( Applied_Hypothesis_Entry );
   if ( !SO_Applied_Hypothesis->_is_nil() )
     myStudyBuilder->RemoveObject(SO_Applied_Hypothesis);
 }
 
-
-const char* SMESHGUI_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
+const char* SMESH_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_IOR, int ST)
 {
   SALOMEDS::SObject_var SO_Mesh = myStudy->FindObjectID( SO_Mesh_Entry );
   if ( !SO_Mesh->_is_nil() ) {
@@ -366,6 +409,9 @@ const char* SMESHGUI_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_
       aSelAttr = SALOMEDS::AttributeSelectable::_narrow(anAttr);
       aSelAttr->SetSelectable(false);
     }
+
+    free(Name);
+
     SALOMEDS::SObject_var SO = myStudyBuilder->NewObject (SubmeshesRoot);
     anAttr = myStudyBuilder->FindOrCreateAttribute(SO, "AttributeIOR");
     anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
@@ -375,7 +421,7 @@ const char* SMESHGUI_Swig::AddSubMesh(const char* SO_Mesh_Entry, const char* SM_
   return "";
 }
 
-const char* SMESHGUI_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, 
+const char* SMESH_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char* GeomShape_Entry, 
                                             const char* SM_IOR, int ST)
 {
   SALOMEDS::SObject_var SO_GeomShape = myStudy->FindObjectID( GeomShape_Entry );
@@ -390,12 +436,12 @@ const char* SMESHGUI_Swig::AddSubMeshOnShape(const char* Mesh_Entry, const char*
   return "";
 }
 
-void SMESHGUI_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
+void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
 {
   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
 }
 
-void SMESHGUI_Swig::SetName(const char* Entry, const char* Name)
+void SMESH_Swig::SetName(const char* Entry, const char* Name)
 {
   SALOMEDS::SObject_var SO = myStudy->FindObjectID( Entry );
   SALOMEDS::GenericAttribute_var anAttr;
@@ -407,8 +453,7 @@ void SMESHGUI_Swig::SetName(const char* Entry, const char* Name)
   }
 }
 
-
-void SMESHGUI_Swig::setOrb()
+void SMESH_Swig::setOrb()
 {
   try {
     ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
@@ -420,3 +465,21 @@ void SMESHGUI_Swig::setOrb()
   }
   ASSERT(! CORBA::is_nil(_orb));
 }
+
+//================================================================================
+/*!
+ * \brief Set mesh icon according to compute status
+  * \param Mesh_Entry - entry of a mesh
+  * \param isComputed - is mesh computed or not
+ */
+//================================================================================
+
+void SMESH_Swig::SetMeshIcon(const char* Mesh_Entry, const bool isComputed)
+{
+  SALOMEDS::SObject_var mesh_var = myStudy->FindObjectID( Mesh_Entry );
+  if ( !mesh_var->_is_nil() ) {
+    _PTR(SObject) mesh = _PTR(SObject)(new SALOMEDS_SObject( mesh_var ));
+    if ( mesh )
+      SMESH::ModifiedMesh( mesh, isComputed );
+  }
+}