Salome HOME
Remove obsolete code
[modules/gui.git] / src / SalomeApp / SalomeApp_OCCSelector.cxx
1
2 #include "SalomeApp_DataOwner.h"
3 #include "SalomeApp_OCCSelector.h"
4
5 #include <SALOME_InteractiveObject.hxx>
6
7 #include <AIS_ListOfInteractive.hxx>
8 #include <AIS_ListIteratorOfListOfInteractive.hxx>
9
10
11 SalomeApp_OCCSelector::SalomeApp_OCCSelector( OCCViewer_Viewer* viewer, SUIT_SelectionMgr* mgr )
12 : SUIT_Selector( mgr, viewer ),
13   myViewer( viewer )
14 {
15   if ( myViewer )
16     connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
17 }
18
19 SalomeApp_OCCSelector::~SalomeApp_OCCSelector()
20 {
21 }
22
23 OCCViewer_Viewer* SalomeApp_OCCSelector::viewer() const
24 {
25   return myViewer;
26 }
27
28 void SalomeApp_OCCSelector::onSelectionChanged()
29 {
30   selectionChanged();
31 }
32
33 void SalomeApp_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const
34 {
35   if ( !myViewer )
36     return;
37
38   AIS_ListOfInteractive aSelList;
39   myViewer->getSelectedObjects( aSelList );
40   for ( AIS_ListIteratorOfListOfInteractive anIt( aSelList ); anIt.More(); anIt.Next() )
41     if ( !anIt.Value().IsNull() )
42     {
43       Handle(SALOME_InteractiveObject) anObj = Handle(SALOME_InteractiveObject)::DownCast(anIt.Value()->GetOwner());
44       if( !anObj.IsNull() )
45         aList.append( SUIT_DataOwnerPtr( new SalomeApp_DataOwner( anObj ) ) );
46     }
47 }
48
49 void SalomeApp_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
50 {
51   if ( !myViewer )
52     return;
53
54   QMap<QString, Handle(AIS_InteractiveObject)> aDisplayed;
55   Handle(AIS_InteractiveContext) aContext = myViewer->getAISContext();
56   if ( aContext.IsNull() )
57     return;
58     
59   AIS_ListOfInteractive aDispList, aSelList;
60   aContext->DisplayedObjects( aDispList );
61
62   for ( AIS_ListIteratorOfListOfInteractive it( aDispList ); it.More(); it.Next() )
63   {
64     QString entryStr = entry( it.Value() );
65     if ( !entryStr.isEmpty() )
66       aDisplayed.insert( entryStr, it.Value() );
67   }
68
69   for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
70   {
71     const SalomeApp_DataOwner* owner = dynamic_cast<const SalomeApp_DataOwner*>( (*itr).operator->() );
72     if ( owner && aDisplayed.contains( owner->entry() ) )
73       aSelList.Append( aDisplayed[owner->entry()] );
74   }
75
76   myViewer->unHighlightAll( false );
77   myViewer->setObjectsSelected( aSelList );
78 }
79
80 QString SalomeApp_OCCSelector::entry( const Handle(AIS_InteractiveObject)& anAIS ) const
81 {
82   if ( anAIS.IsNull() || !anAIS->HasOwner() )
83     return QString::null;
84
85   Handle(SALOME_InteractiveObject) anObj = Handle(SALOME_InteractiveObject)::DownCast(anAIS->GetOwner());
86
87   QString res;
88   if ( !anObj.IsNull() )
89     res = QString( anObj->getEntry() );
90   return res;
91 }