X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FHYDROGUI%2FHYDROGUI_Tool.cxx;h=29d053f046bb210563677941224d417d9c8f979d;hb=dc73e2b2e8db52dbea7aab9ade159daef696d95f;hp=d98db72a4eaea477352a23a6442de3d30d7930f8;hpb=94ce56d6f7ffc055c2409af2c48d1278fe42d90e;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Tool.cxx b/src/HYDROGUI/HYDROGUI_Tool.cxx index d98db72a..29d053f0 100644 --- a/src/HYDROGUI/HYDROGUI_Tool.cxx +++ b/src/HYDROGUI/HYDROGUI_Tool.cxx @@ -44,6 +44,7 @@ #include #include +#include // Definition of this id allows to use 'latin1' (Qt alias for 'ISO-8859-1') // encoding instead of default 'System' @@ -152,6 +153,14 @@ void HYDROGUI_Tool::DoubleToLambert( const double theCoord, theSeconds = aRemainder - theMinutes * 60; } +bool HYDROGUI_Tool::IsEqual( const Handle(HYDROData_Object)& theObj1, + const Handle(HYDROData_Object)& theObj2 ) +{ + if( !theObj1.IsNull() && !theObj2.IsNull() ) + return theObj1->Label() == theObj2->Label(); //ouv: check that the names can be used here + return false; +} + void HYDROGUI_Tool::SetActiveViewManager( HYDROGUI_Module* theModule, SUIT_ViewManager* theViewManager ) { @@ -197,7 +206,7 @@ HYDROGUI_Prs* HYDROGUI_Tool::GetPresentation( const Handle(HYDROData_Object)& th if( HYDROGUI_Prs* aPrs = dynamic_cast( anIter.next() ) ) { Handle(HYDROData_Object) anObj = aPrs->getObject(); - if( !anObj.IsNull() && anObj->Label() == theObj->Label() ) + if( IsEqual( anObj, theObj ) ) return aPrs; } } @@ -228,13 +237,21 @@ HYDROData_SequenceOfObjects HYDROGUI_Tool::GetSelectedObjects( HYDROGUI_Module* SUIT_DataOwnerPtrList anOwners; aSelectionMgr->selected( anOwners ); + QStringList aCollectedNameList; // to avoid duplication foreach( SUIT_DataOwner* aSUITOwner, anOwners ) { if( LightApp_DataOwner* anOwner = dynamic_cast( aSUITOwner ) ) { - Handle(HYDROData_Object) anObject = aModel->objectByEntry( anOwner->entry(), KIND_UNKNOWN ); + Handle(HYDROData_Object) anObject = aModel->objectByEntry( anOwner->entry() ); if( !anObject.IsNull() ) - aSeq.Append( anObject ); + { + QString aName = anObject->GetName(); + if( !aCollectedNameList.contains( aName ) ) + { + aSeq.Append( anObject ); + aCollectedNameList.append( aName ); + } + } } } return aSeq; @@ -316,3 +333,79 @@ QList HYDROGUI_Tool::GetGraphicsViewIdList( HYDROGUI_Module* theModule ) } return aList; } + +void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage, + HYDROData_SequenceOfObjects& theRefObjects, + QStringList& theRefNames ) +{ + if( theImage.IsNull() ) + return; + + for( int anIndex = 0, aNbRef = theImage->NbReferences(); anIndex < aNbRef; anIndex++ ) + { + Handle(HYDROData_Object) aRefObj = theImage->Reference( anIndex ); + if( !aRefObj.IsNull() && !aRefObj->IsRemoved() ) + { + QString aName = aRefObj->GetName(); + if( !theRefNames.contains( aName ) ) + { + theRefObjects.Append( aRefObj ); + theRefNames.append( aRefObj->GetName() ); + if( aRefObj->GetKind() == KIND_IMAGE ) + { + Handle(HYDROData_Image) aRefImage = Handle(HYDROData_Image)::DownCast( aRefObj ); + if( !aRefImage.IsNull() ) + GetObjectReferences( aRefImage, theRefObjects, theRefNames ); + } + } + } + } +} + +void HYDROGUI_Tool::GetObjectBackReferences( HYDROGUI_Module* theModule, + const Handle(HYDROData_Object)& theObj, + HYDROData_SequenceOfObjects& theBackRefObjects, + QStringList& theBackRefNames ) +{ + if( theObj.IsNull() ) + return; + + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); + if( aDocument.IsNull() ) + return; + + QString aName = theObj->GetName(); + + HYDROData_Iterator anIterator( aDocument, KIND_IMAGE ); + for( ; anIterator.More(); anIterator.Next() ) + { + Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anIterator.Current() ); + if( !anImage.IsNull() ) + { + HYDROData_SequenceOfObjects aRefObjects; + QStringList aRefNames; + GetObjectReferences( anImage, aRefObjects, aRefNames ); + if( aRefNames.contains( aName ) ) + { + theBackRefObjects.Append( anImage ); + theBackRefNames.append( anImage->GetName() ); + } + } + } +} + + +QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid ) +{ + if ( !wid ) + return 0; + + QDockWidget* dock = 0; + QWidget* w = wid->parentWidget(); + while ( w && !dock ) + { + dock = ::qobject_cast( w ); + w = w->parentWidget(); + } + return dock; +}