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 ):
47 SUIT_Selector( mgr, viewer ),
51 connect( myViewer, SIGNAL( selectionChanged() ), this, SLOT( onSelectionChanged() ) );
55 ::~SalomeApp_VTKSelector()
70 return SVTK_Viewer::Type();
75 ::onSelectionChanged()
82 ::getSelection( SUIT_DataOwnerPtrList& aList ) const
85 if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
86 if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
87 if(SVTK_Selector* aSelector = aView->GetSelector()){
88 Selection_Mode aMode = aSelector->SelectionMode();
89 const SALOME_ListIO& aListIO = aSelector->StoredIObjects();
90 SALOME_ListIteratorOfListIO anIter(aListIO);
91 for(; anIter.More(); anIter.Next()){
92 Handle(SALOME_InteractiveObject) anIO = anIter.Value();
94 TColStd_IndexedMapOfInteger anIds;
95 aSelector->GetIndex(anIO,anIds);
96 SALOME_Actor* anActor = aSelector->GetActor(anIO);
97 aList.append(new SalomeApp_SVTKDataOwner(anIO,anIds,aMode,anActor));
98 if(MYDEBUG) MESSAGE("VTKSelector::getSelection - "<<anIO->getEntry());
108 SalomeApp_VTKSelector
109 ::setSelection( const SUIT_DataOwnerPtrList& theList )
112 if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
113 if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
114 if(SVTK_Selector* aSelector = aView->GetSelector()){
115 SALOME_ListIO anAppendList;
116 const SALOME_ListIO& aStoredList = aSelector->StoredIObjects();
117 SUIT_DataOwnerPtrList::const_iterator anIter = theList.begin();
118 for(; anIter != theList.end(); ++anIter){
119 const SUIT_DataOwner* aDataOwner = (*anIter).get();
120 if(const SalomeApp_SVTKDataOwner* anOwner = dynamic_cast<const SalomeApp_SVTKDataOwner*>(aDataOwner)){
121 aSelector->SetSelectionMode(anOwner->GetMode());
122 Handle(SALOME_InteractiveObject) anIO = anOwner->IO();
123 if( anOwner->GetActor() )
124 aSelector->AddIObject( anOwner->GetActor() );
126 aSelector->AddIObject(anIO);
127 anAppendList.Append(anIO);
128 aSelector->AddOrRemoveIndex(anIO,anOwner->GetIds(),false);
129 if(MYDEBUG) MESSAGE("VTKSelector::setSelection - SVTKDataOwner - "<<anIO->getEntry());
130 }else if(const SalomeApp_DataOwner* anOwner = dynamic_cast<const SalomeApp_DataOwner*>(aDataOwner)){
131 Handle(SALOME_InteractiveObject) anIO =
132 new SALOME_InteractiveObject(anOwner->entry().latin1(),"");
133 aSelector->AddIObject(anIO);
134 anAppendList.Append(anIO);
135 if(MYDEBUG) MESSAGE("VTKSelector::setSelection - DataOwner - "<<anIO->getEntry());
138 // To remove IOs, which is not selected.
139 QMap< QString, Handle( SALOME_InteractiveObject )> toRemove;
140 SALOME_ListIteratorOfListIO anIt( aStoredList );
141 for( ; anIt.More(); anIt.Next() )
142 if( !anIt.Value().IsNull() )
143 toRemove[ anIt.Value()->getEntry() ] = anIt.Value();
145 anIt = SALOME_ListIteratorOfListIO(anAppendList);
146 for( ; anIt.More(); anIt.Next() )
147 toRemove.remove( anIt.Value()->getEntry() );
149 QMap< QString, Handle( SALOME_InteractiveObject )>::const_iterator RIt = toRemove.begin(),
150 REnd = toRemove.end();
151 for( ; RIt!=REnd; RIt++ )
152 aSelector->RemoveIObject( RIt.data() );
154 aView->onSelectionChanged();