Salome HOME
*** empty log message ***
[modules/gui.git] / src / SalomeApp / SalomeApp_OBSelector.cxx
1 #include "SalomeApp_OBSelector.h"
2
3 #include "SalomeApp_DataOwner.h"
4 #include "SalomeApp_DataObject.h"
5
6 #include <OB_Browser.h>
7
8 #include <SUIT_DataObjectIterator.h>
9
10 SalomeApp_OBSelector::SalomeApp_OBSelector( OB_Browser* ob, SUIT_SelectionMgr* mgr )
11 : QObject( 0 ),
12 SUIT_Selector( mgr ),
13 myBrowser( ob )
14 {
15   if ( myBrowser )
16     connect( myBrowser, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
17 }
18
19 SalomeApp_OBSelector::~SalomeApp_OBSelector()
20 {
21 }
22
23 OB_Browser* SalomeApp_OBSelector::browser() const
24 {
25   return myBrowser;
26 }
27
28 void SalomeApp_OBSelector::getSelection( SUIT_DataOwnerPtrList& list ) const
29 {
30   if ( !myBrowser )
31     return;
32
33   DataObjectList objlist;
34   myBrowser->getSelected( objlist );
35   for ( DataObjectListIterator it( objlist ); it.current(); ++it )
36   {
37     SalomeApp_DataObject* obj = dynamic_cast<SalomeApp_DataObject*>( it.current() );
38     if ( obj )
39     {
40       Handle( SALOME_InteractiveObject ) aSObj = new SALOME_InteractiveObject
41         ( obj->entry(), obj->componentDataType(), obj->name() );
42       list.append( SUIT_DataOwnerPtr( new SalomeApp_DataOwner( aSObj  ) ) );
43     }
44   }
45 }
46
47 void SalomeApp_OBSelector::setSelection( const SUIT_DataOwnerPtrList& list )
48 {
49   if ( !myBrowser )
50     return;
51
52   QMap<QString, SalomeApp_DataObject*> map;
53   fillEntries( map );
54
55   DataObjectList objList;
56   for ( SUIT_DataOwnerPtrList::const_iterator it = list.begin(); it != list.end(); ++it )
57   {
58     const SalomeApp_DataOwner* owner = dynamic_cast<const SalomeApp_DataOwner*>( (*it).operator->() );
59     if ( owner && map.contains( owner->entry() ) )
60       objList.append( map[owner->entry()] );
61   }
62
63   myBrowser->setSelected( objList );
64 }
65
66 void SalomeApp_OBSelector::onSelectionChanged()
67 {
68   selectionChanged();
69 }
70
71 void SalomeApp_OBSelector::fillEntries( QMap<QString, SalomeApp_DataObject*>& entires )
72 {
73   entires.clear();
74
75   if ( !myBrowser )
76     return;
77
78   for ( SUIT_DataObjectIterator it( myBrowser->getRootObject(),
79                                     SUIT_DataObjectIterator::DepthLeft ); it.current(); ++it )
80   {
81     SalomeApp_DataObject* obj = dynamic_cast<SalomeApp_DataObject*>( it.current() );
82     if ( obj )
83       entires.insert( obj->entry(), obj );
84   }
85 }