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