X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=a3bc1733171339e1d0f5e16efeb89cd3e41a892a;hb=dda95cb5b75a7f8a9e0521622a68b3f0d54a663e;hp=685bd953ed968c574f3707c4becb2e05adaeaa5e;hpb=7a89c829749d2e60c4fbf3cef3b2354bd9d42d54;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 685bd953e..a3bc17331 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -260,22 +260,25 @@ 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(); - SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); + SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); + SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); SALOMEDS::SObject_wrap objAfter; - if ( SO->_is_nil() ) { + if ( SO->_is_nil() ) + { if ( theTag == 0 ) { SO = aStudyBuilder->NewObject( theFatherObject ); - } else if ( !theFatherObject->FindSubObject( theTag, SO.inout() )) { + } + 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 SOobject + // 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_var anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); + SALOMEDS::UseCaseIterator_wrap anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { curObj = anUseCaseIter->Value(); entry = curObj->GetID(); @@ -283,7 +286,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, last2Pnt_pos = anEntry.rfind( ":" ); tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() ); if ( tagAfter > theTag ) { - objAfter = curObj; + objAfter = curObj; break; } } @@ -409,11 +412,14 @@ static void addReference (SALOMEDS::Study_ptr theStudy, theTag = tag; } if ( !theSObject->FindSubObject( theTag, aReferenceSO.inout() )) + { aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); + // 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 ); + } aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); - // add reference to the use case tree - // (to support tree representation customization and drag-n-drop) - theStudy->GetUseCaseBuilder()->AppendTo( aReferenceSO->GetFather(), aReferenceSO ); } } @@ -478,10 +484,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") ); @@ -492,8 +507,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::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); SALOMEDS::GenericAttribute_wrap anAttr; SALOMEDS::AttributePixMap_wrap aPixmap;