1 #include "SalomeApp_VTKSelector.h"
2 #include "SalomeApp_DataOwner.h"
4 #include "SVTK_ViewModel.h"
5 #include "SVTK_Selector.h"
6 #include "SVTK_ViewWindow.h"
7 #include "SALOME_Actor.h"
9 #include "SALOME_ListIteratorOfListIO.hxx"
11 #include "utilities.h"
14 static int MYDEBUG = 1;
16 static int MYDEBUG = 0;
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 ),
25 mySelectionMode(theMode),
28 myIds = theIds; // workaround - there is no constructor copy for the container
31 SalomeApp_SVTKDataOwner
32 ::~SalomeApp_SVTKDataOwner()
37 SalomeApp_SVTKDataOwner
40 return myActor.GetPointer();
45 ::SalomeApp_VTKSelector( SVTK_Viewer* viewer,
46 SUIT_SelectionMgr* mgr ):
52 connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
56 ::~SalomeApp_VTKSelector()
71 return SVTK_Viewer::Type();
76 ::onSelectionChanged()
83 ::getSelection( SUIT_DataOwnerPtrList& aList ) const
86 if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
87 if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
88 if(SVTK_Selector* aSelector = aView->GetSelector()){
89 Selection_Mode aMode = aSelector->SelectionMode();
90 const SALOME_ListIO& aListIO = aSelector->StoredIObjects();
91 SALOME_ListIteratorOfListIO anIter(aListIO);
92 for(; anIter.More(); anIter.Next()){
93 Handle(SALOME_InteractiveObject) anIO = anIter.Value();
95 TColStd_IndexedMapOfInteger anIds;
96 aSelector->GetIndex(anIO,anIds);
97 SALOME_Actor* anActor = aSelector->GetActor(anIO);
98 aList.append(new SalomeApp_SVTKDataOwner(anIO,anIds,aMode,anActor));
99 if(MYDEBUG) MESSAGE("VTKSelector::getSelection - "<<anIO->getEntry());
109 SalomeApp_VTKSelector
110 ::setSelection( const SUIT_DataOwnerPtrList& theList )
113 if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
114 if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
115 if(SVTK_Selector* aSelector = aView->GetSelector()){
116 SALOME_ListIO anAppendList;
117 const SALOME_ListIO& aStoredList = aSelector->StoredIObjects();
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->IO();
124 aSelector->AddIObject(anIO);
125 anAppendList.Append(anIO);
126 aSelector->AddOrRemoveIndex(anIO,anOwner->GetIds(),false);
127 if(MYDEBUG) MESSAGE("VTKSelector::setSelection - SVTKDataOwner - "<<anIO->getEntry());
128 }else if(const SalomeApp_DataOwner* anOwner = dynamic_cast<const SalomeApp_DataOwner*>(aDataOwner)){
129 Handle(SALOME_InteractiveObject) anIO =
130 new SALOME_InteractiveObject(anOwner->entry().latin1(),"");
131 aSelector->AddIObject(anIO);
132 anAppendList.Append(anIO);
133 if(MYDEBUG) MESSAGE("VTKSelector::setSelection - DataOwner - "<<anIO->getEntry());
136 // To remove IOs, which is not selected.
137 QMap< QString, Handle( SALOME_InteractiveObject )> toRemove;
138 SALOME_ListIteratorOfListIO anIt( aStoredList );
139 for( ; anIt.More(); anIt.Next() )
140 if( !anIt.Value().IsNull() )
141 toRemove[ anIt.Value()->getEntry() ] = anIt.Value();
143 anIt = SALOME_ListIteratorOfListIO(anAppendList);
144 for( ; anIt.More(); anIt.Next() )
145 toRemove.remove( anIt.Value()->getEntry() );
148 /* SALOME_ListIO aRemoveList;
149 SALOME_ListIteratorOfListIO anAppendListIter(anAppendList);
150 for(; anAppendListIter.More(); anAppendListIter.Next()){
151 Handle(SALOME_InteractiveObject) anIO = anAppendListIter.Value();
152 SALOME_ListIteratorOfListIO aStoredListIter(aStoredList);
153 for(; aStoredListIter.More(); aStoredListIter.Next()){
154 if(anIO->isSame(aStoredListIter.Value())){
155 aRemoveList.Append(anIO);
159 SALOME_ListIteratorOfListIO aRemoveListIter(aRemoveList);*/
161 QMap< QString, Handle( SALOME_InteractiveObject )>::const_iterator RIt = toRemove.begin(),
162 REnd = toRemove.end();
163 for( ; RIt!=REnd; RIt++ )
164 aSelector->RemoveIObject( RIt.data() );
166 aView->onSelectionChanged();