Salome HOME
Remove obsolete code
[modules/gui.git] / src / SalomeApp / SalomeApp_GLSelector.cxx
1 #include "SalomeApp_GLSelector.h"
2
3 #include "SalomeApp_DataOwner.h"
4
5 #include <SALOME_GLOwner.h>
6
7 #include <GLViewer_Context.h>
8
9 SalomeApp_GLSelector::SalomeApp_GLSelector( GLViewer_Viewer2d* viewer, SUIT_SelectionMgr* mgr )
10 : SUIT_Selector( mgr, viewer ),
11   myViewer( viewer )
12 {
13   if ( myViewer )
14     connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
15 }
16
17 SalomeApp_GLSelector::~SalomeApp_GLSelector()
18 {
19 }
20
21 GLViewer_Viewer2d* SalomeApp_GLSelector::viewer() const
22 {
23   return myViewer;
24 }
25
26 void SalomeApp_GLSelector::onSelectionChanged()
27 {
28   selectionChanged();
29 }
30
31 void SalomeApp_GLSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const
32 {
33   if ( !myViewer )
34     return;
35
36   GLViewer_Context* cont = myViewer->getGLContext();
37   if ( !cont )
38     return;
39
40   for ( cont->InitSelected(); cont->MoreSelected(); cont->NextSelected() )
41   {
42     GLViewer_Object* obj = cont->SelectedObject();
43     if ( obj )
44     {
45       SALOME_GLOwner* owner = dynamic_cast< SALOME_GLOwner* >( obj->owner() );
46       if( owner )
47         aList.append( SUIT_DataOwnerPtr( new SalomeApp_DataOwner( owner->entry() ) ) );
48     }
49   }
50 }
51
52 void SalomeApp_GLSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
53 {
54   if ( !myViewer )
55     return;
56
57   GLViewer_Context* cont = myViewer->getGLContext();
58   if ( !cont )
59     return;
60
61   QMap<QString, GLViewer_Object*> aDisplayed;
62   const ObjectMap& displayed = cont->getObjects();
63   for ( ObjectMap::const_iterator it = displayed.begin(); it != displayed.end(); ++it )
64   {
65     if ( it.key()->getVisible() )
66     {
67       GLViewer_Object* obj = it.key();
68       if ( obj )
69       {
70         SALOME_GLOwner* owner = dynamic_cast< SALOME_GLOwner* >( obj->owner() );
71             if ( owner )
72           aDisplayed.insert( owner->entry(), obj );
73       }
74     }
75   }
76
77   int Nb = 0;
78   cont->clearSelected( false );
79   for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
80   {
81     const SalomeApp_DataOwner* owner = dynamic_cast<const SalomeApp_DataOwner*>( (*itr).operator->() );
82
83     if ( !owner )
84       continue;
85
86     if ( aDisplayed.contains( owner->entry() ) )
87     {
88       cont->setSelected( aDisplayed[owner->entry()], false );
89       Nb++;
90     }
91   }
92
93   if ( Nb > 0 )
94     myViewer->updateAll();
95 }