Salome HOME
compilation error (afterCloseDoc() - twice) is fixed.
[modules/gui.git] / src / SalomeApp / SalomeApp_VTKSelector.cxx
1 #include "SalomeApp_VTKSelector.h"
2 #include "SalomeApp_DataOwner.h"
3
4 #include "SVTK_ViewModel.h"
5 #include "SVTK_Selector.h"
6 #include "SVTK_ViewWindow.h"
7 #include "SALOME_Actor.h"
8
9 #include "SALOME_ListIteratorOfListIO.hxx"
10
11 #include "utilities.h"
12
13 #ifdef _DEBUG_
14 static int MYDEBUG = 0;
15 #else
16 static int MYDEBUG = 0;
17 #endif
18
19 SalomeApp_SVTKDataOwner
20 ::SalomeApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO,
21                            const TColStd_IndexedMapOfInteger& theIds,
22                            Selection_Mode theMode,
23                            SALOME_Actor* theActor):
24   SalomeApp_DataOwner(theIO->getEntry()),
25   myIO(theIO),
26   mySelectionMode(theMode),
27   myActor(theActor)
28 {
29   myIds = theIds; // workaround - there is no constructor copy for the container
30 }
31
32 SalomeApp_SVTKDataOwner
33 ::~SalomeApp_SVTKDataOwner()
34 {
35 }
36
37 SALOME_Actor* 
38 SalomeApp_SVTKDataOwner
39 ::GetActor() const
40 {
41   return myActor.GetPointer();
42 }
43
44
45 SalomeApp_VTKSelector
46 ::SalomeApp_VTKSelector( SVTK_Viewer* viewer, 
47                          SUIT_SelectionMgr* mgr ): 
48   QObject( 0 ),
49   SUIT_Selector( mgr ),
50   myViewer( viewer )
51 {
52   if ( myViewer )
53     connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
54 }
55
56 SalomeApp_VTKSelector
57 ::~SalomeApp_VTKSelector()
58 {
59 }
60
61 SVTK_Viewer* 
62 SalomeApp_VTKSelector
63 ::viewer() const
64 {
65   return myViewer;
66 }
67
68 QString
69 SalomeApp_VTKSelector
70 ::type() const
71
72   return SVTK_Viewer::Type(); 
73 }
74
75 void
76 SalomeApp_VTKSelector
77 ::onSelectionChanged()
78 {
79   selectionChanged();
80 }
81
82 void
83 SalomeApp_VTKSelector
84 ::getSelection( SUIT_DataOwnerPtrList& aList ) const
85 {
86   if(myViewer){
87     if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
88       if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
89         if(SVTK_Selector* aSelector = aView->GetSelector()){
90           Selection_Mode aMode = aSelector->SelectionMode();
91           const SALOME_ListIO& aListIO = aSelector->StoredIObjects();
92           SALOME_ListIteratorOfListIO anIter(aListIO);
93           for(; anIter.More(); anIter.Next()){
94             Handle(SALOME_InteractiveObject) anIO = anIter.Value();
95             if(anIO->hasEntry()){
96               TColStd_IndexedMapOfInteger anIds;
97               aSelector->GetIndex(anIO,anIds);
98               SALOME_Actor* anActor = aSelector->GetActor(anIO);
99               aList.append(new SalomeApp_SVTKDataOwner(anIO,anIds,aMode,anActor));
100               if(MYDEBUG) MESSAGE("VTKSelector::getSelection - "<<anIO->getEntry());
101             }
102           }
103         }
104       }
105     }
106   }
107 }
108
109 void 
110 SalomeApp_VTKSelector
111 ::setSelection( const SUIT_DataOwnerPtrList& theList )
112 {
113   if(myViewer){
114     if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
115       if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
116         if(SVTK_Selector* aSelector = aView->GetSelector()){
117           aSelector->ClearIObjects();
118           SUIT_DataOwnerPtrList::const_iterator anIter = theList.begin();
119           for(; anIter != theList.end(); ++anIter){
120             const SUIT_DataOwner* aDataOwner = (*anIter).get();
121             if(const SalomeApp_SVTKDataOwner* anOwner = dynamic_cast<const SalomeApp_SVTKDataOwner*>(aDataOwner)){
122               aSelector->SetSelectionMode(anOwner->GetMode());
123               Handle(SALOME_InteractiveObject) anIO = anOwner->GetIO();
124               aSelector->AddIObject(anIO);
125               aSelector->AddOrRemoveIndex(anIO,anOwner->GetIds(),false);
126               if(MYDEBUG) MESSAGE("VTKSelector::setSelection - SVTKDataOwner - "<<anIO->getEntry());
127             }else if(const SalomeApp_DataOwner* anOwner = dynamic_cast<const SalomeApp_DataOwner*>(aDataOwner)){
128               Handle(SALOME_InteractiveObject) anIO = 
129                 new SALOME_InteractiveObject(anOwner->entry().latin1(),"");
130               aSelector->AddIObject(anIO);
131               if(MYDEBUG) MESSAGE("VTKSelector::setSelection - DataOwner - "<<anIO->getEntry());
132             }
133           }
134           aView->onSelectionChanged();
135         }
136       }
137     }
138   }
139 }