From 3d0eb309497c05474d11912fc73e7cef3df9b61c Mon Sep 17 00:00:00 2001 From: akl Date: Thu, 1 Aug 2013 08:54:43 +0000 Subject: [PATCH] Insert SMESH object into use case builder according to the given entry (if it is) instead of simply append it at the end of list. --- src/SMESH_I/SMESH_Gen_i_1.cxx | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 562750c6c..0dfa3da68 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -262,11 +262,28 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); + SALOMEDS::SObject_var objAfter; if ( SO->_is_nil() ) { - if ( theTag == 0 ) + 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 + std::string anEntry; + int last2Pnt_pos = -1; + int tagAfter = -1; + SALOMEDS::UseCaseIterator_var anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); + for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { + anEntry = anUseCaseIter->Value()->GetID(); + last2Pnt_pos = anEntry.rfind( ":" ); + tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() ); + if ( tagAfter > theTag ) { + theFatherObject->FindSubObject( tagAfter, objAfter.inout() ); + break; + } + } + } } SALOMEDS::GenericAttribute_wrap anAttr; @@ -293,7 +310,11 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, // add object to the use case tree // (to support tree representation customization and drag-n-drop) - useCaseBuilder->AppendTo( SO->GetFather(), SO ); + if ( !CORBA::is_nil( objAfter ) ) { + useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag + } else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) { + useCaseBuilder->AppendTo( SO->GetFather(), SO ); // append to the end of list + } return SO._retn(); }