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