X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_OCCSelector.cxx;h=432306627ff08164ce644a83d348cb9dca394d77;hb=ca264f577959390521d4a56c950904992d64a4ac;hp=24d8975b400479ec392eba562dd2b6658f671015;hpb=f67a557992493d2ec9508689e3cb8fa3b2227cf1;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_OCCSelector.cxx b/src/HYDROGUI/HYDROGUI_OCCSelector.cxx index 24d8975b..43230662 100644 --- a/src/HYDROGUI/HYDROGUI_OCCSelector.cxx +++ b/src/HYDROGUI/HYDROGUI_OCCSelector.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,6 +20,7 @@ #include "HYDROGUI_DataModel.h" #include "HYDROGUI_DataObject.h" +#include "HYDROGUI_DataOwner.h" #include "HYDROGUI_Module.h" #include @@ -49,12 +46,22 @@ void HYDROGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const if ( !aViewer ) return; + Handle(AIS_InteractiveContext) aContext = aViewer->getAISContext(); + bool isLocalContext = aContext->HasOpenedContext(); + AIS_ListOfInteractive aSelList; aViewer->getSelectedObjects( aSelList ); for ( AIS_ListIteratorOfListOfInteractive anIt( aSelList ); anIt.More(); anIt.Next() ) if ( !anIt.Value().IsNull() ) { - aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( entry( anIt.Value() ) ) ) ); + if ( !isLocalContext ) { + QString anEntry = entry( anIt.Value() ); + if ( !anEntry.isEmpty() ) { + aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( entry( anIt.Value() ) ) ) ); + } else { + aList.append( SUIT_DataOwnerPtr( new HYDROGUI_DataOwner( anIt.Value() ) ) ); + } + } } // add externally selected objects SUIT_DataOwnerPtrList::const_iterator anExtIter; @@ -63,6 +70,48 @@ void HYDROGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const } } +void HYDROGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList ) +{ + OCCViewer_Viewer* aViewer = viewer(); + if ( !aViewer ) + return; + + Handle(AIS_InteractiveContext) aContext = aViewer->getAISContext(); + if ( aContext.IsNull() || aContext->HasOpenedContext() ) { + return; + } + + QMap aDisplayed; + AIS_ListOfInteractive aDispList, aSelList; + aContext->DisplayedObjects( aDispList ); + + for ( AIS_ListIteratorOfListOfInteractive it( aDispList ); it.More(); it.Next() ) + { + QString entryStr = entry( it.Value() ); + if ( !entryStr.isEmpty() ) + aDisplayed.insert( entryStr, it.Value() ); + } + + mySelectedExternals.clear(); + + for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr ) + { + const LightApp_DataOwner* owner = dynamic_cast( (*itr).operator->() ); + if ( owner && aDisplayed.contains( owner->entry() ) ) + aSelList.Append( aDisplayed[owner->entry()] ); + else { + const HYDROGUI_DataOwner* hydroOwner = dynamic_cast( (*itr).operator->() ); + if ( hydroOwner && !hydroOwner->IO().IsNull() ) { + aSelList.Append( hydroOwner->IO() ); + } else + mySelectedExternals.append(*itr); + } + } + + aViewer->unHighlightAll( false ); + aViewer->setObjectsSelected( aSelList ); +} + QString HYDROGUI_OCCSelector::entry( const Handle(AIS_InteractiveObject)& anAIS ) const { QString aRes; @@ -70,8 +119,8 @@ QString HYDROGUI_OCCSelector::entry( const Handle(AIS_InteractiveObject)& anAIS if ( anAIS.IsNull() || !anAIS->HasOwner() ) return aRes; - Handle(HYDROData_Object) anObj = - Handle(HYDROData_Object)::DownCast( anAIS->GetOwner() ); + Handle(HYDROData_Entity) anObj = + Handle(HYDROData_Entity)::DownCast( anAIS->GetOwner() ); if ( !anObj.IsNull() ) aRes = HYDROGUI_DataObject::dataObjectEntry( anObj );