]> SALOME platform Git repositories - modules/gui.git/blob - src/SalomeApp/SalomeApp_GLSelector.cxx
Salome HOME
debug IPAL9411: redefine virtual methods createEmptyStudy and activateModule
[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 ObjList& displayed = cont->getObjects();
63   for ( ObjList::const_iterator it = displayed.begin(); it != displayed.end(); ++it )
64   {
65     GLViewer_Object* obj = *it;
66     if ( obj && obj->getVisible() )
67     {
68       SALOME_GLOwner* owner = dynamic_cast< SALOME_GLOwner* >( obj->owner() );
69       if ( owner )
70         aDisplayed.insert( owner->entry(), obj );
71     }
72   }
73
74   int Nb = 0;
75   cont->clearSelected( false );
76   for ( SUIT_DataOwnerPtrList::const_iterator itr = aList.begin(); itr != aList.end(); ++itr )
77   {
78     const SalomeApp_DataOwner* owner = dynamic_cast<const SalomeApp_DataOwner*>( (*itr).operator->() );
79
80     if ( !owner )
81       continue;
82
83     if ( aDisplayed.contains( owner->entry() ) )
84     {
85       cont->setSelected( aDisplayed[owner->entry()], false );
86       Nb++;
87     }
88   }
89
90   if ( Nb > 0 )
91     myViewer->updateAll();
92 }