X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=2dc8b31bbea2c7c8902fb5c69e48a96c503e12b5;hp=4ac7ad8d3e6fe9d878dd5b06091924abf34d47a0;hb=bbcc474cc233788b6dfec02b134e5f0ec3710fb8;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 4ac7ad8d3..2dc8b31bb 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -260,12 +260,37 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, const bool theSelectable = true) { SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); - if ( SO->_is_nil() ) { - if ( theTag == 0 ) + SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); + SALOMEDS::SObject_wrap objAfter; + if ( SO->_is_nil() ) + { + if ( theTag == 0 ) { SO = aStudyBuilder->NewObject( theFatherObject ); + } else if ( !theFatherObject->FindSubObject( theTag, SO.inout() )) + { SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag ); + + // define the next tag after given one in the data tree to insert SObject + std::string anEntry; + int last2Pnt_pos = -1; + int tagAfter = -1; + CORBA::String_var entry; + SALOMEDS::SObject_wrap curObj; + SALOMEDS::UseCaseIterator_wrap anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); + for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { + curObj = anUseCaseIter->Value(); + entry = curObj->GetID(); + anEntry = entry.in(); + last2Pnt_pos = anEntry.rfind( ":" ); + tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() ); + if ( tagAfter > theTag ) { + objAfter = curObj; + break; + } + } + } } SALOMEDS::GenericAttribute_wrap anAttr; @@ -274,6 +299,10 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR ); SALOMEDS::AttributeIOR_wrap iorAttr = anAttr; iorAttr->SetValue( objStr.in() ); + // UnRegister() !!! + SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR ); + if ( !genObj->_is_nil() ) + genObj->UnRegister(); } if ( thePixMap ) { anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" ); @@ -286,6 +315,14 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, selAttr->SetSelectable( false ); } + // add object to the use case tree + // (to support tree representation customization and drag-n-drop) + if ( !CORBA::is_nil( objAfter ) ) { + useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag + } else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) { + useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list + } + return SO._retn(); } @@ -377,6 +414,10 @@ static void addReference (SALOMEDS::Study_ptr theStudy, if ( !theSObject->FindSubObject( theTag, aReferenceSO.inout() )) aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); + // add reference to the use case tree + // (to support tree representation customization and drag-n-drop) + SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); + useCaseBuilder->AppendTo( aReferenceSO->GetFather(), aReferenceSO ); } } @@ -441,10 +482,19 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt return SALOMEDS::SComponent::_nil(); if(MYDEBUG) MESSAGE("PublishComponent"); + SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); + CORBA::String_var compDataType = ComponentDataType(); SALOMEDS::SComponent_wrap father = theStudy->FindComponent( compDataType.in() ); - if ( !CORBA::is_nil( father ) ) + if ( !CORBA::is_nil( father ) ) { + // check that the component is added to the use case browser + if ( !useCaseBuilder->IsUseCaseNode( father ) ) { + useCaseBuilder->SetRootCurrent(); + useCaseBuilder->Append( father ); // component object is added as the top level item + } return father._retn(); + } SALOME_ModuleCatalog::ModuleCatalog_var aCat = SALOME_ModuleCatalog::ModuleCatalog::_narrow( GetNS()->Resolve("/Kernel/ModulCatalog") ); @@ -455,7 +505,6 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt if ( CORBA::is_nil( aComp ) ) return father._retn(); - SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::GenericAttribute_wrap anAttr; SALOMEDS::AttributePixMap_wrap aPixmap; @@ -466,6 +515,10 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); CORBA::String_var userName = aComp->componentusername(); SetName( father, userName.in(), "MESH" ); + // add component to the use case tree + // (to support tree representation customization and drag-n-drop) + useCaseBuilder->SetRootCurrent(); + useCaseBuilder->Append( father ); // component object is added as the top level item if(MYDEBUG) MESSAGE("PublishComponent--END"); return father._retn(); @@ -1166,7 +1219,7 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject) { CORBA::String_var aResult(""); - SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy,theObject); + SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy, theObject ); if ( !aSObj->_is_nil() ) { SALOMEDS::GenericAttribute_wrap attr; @@ -1176,6 +1229,5 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject) aResult = strAttr->Value(); } } - - return CORBA::string_dup( aResult.in() ); + return aResult._retn(); }