Salome HOME
studyActivated() virtual method has been added
[modules/gui.git] / src / SalomeApp / SalomeApp_VTKSelector.cxx
index 21e0bfa80c304f43d93315d700c2a4f1e7357da5..a23a150ad548b1d7500e6a44c443d4b480a5365f 100644 (file)
@@ -4,17 +4,22 @@
 #include "SVTK_ViewModel.h"
 #include "SVTK_Selector.h"
 #include "SVTK_ViewWindow.h"
-#include "SALOME_Actor.h"
+#include "SVTK_Functor.h"
 
+#include "SALOME_Actor.h"
 #include "SALOME_ListIteratorOfListIO.hxx"
 
+#include "VTKViewer_Algorithm.h"
+
+#include <vtkRenderer.h>
+
 #include "utilities.h"
 
-//#ifdef _DEBUG_
+#ifdef _DEBUG_
 static int MYDEBUG = 1;
-/*#else
+#else
 static int MYDEBUG = 0;
-#endif*/
+#endif
 
 SalomeApp_SVTKDataOwner
 ::SalomeApp_SVTKDataOwner( const Handle(SALOME_InteractiveObject)& theIO,
@@ -44,8 +49,7 @@ SalomeApp_SVTKDataOwner
 SalomeApp_VTKSelector
 ::SalomeApp_VTKSelector( SVTK_Viewer* viewer, 
                         SUIT_SelectionMgr* mgr ): 
-  QObject( 0 ),
-  SUIT_Selector( mgr ),
+  SUIT_Selector( mgr, viewer ),
   myViewer( viewer )
 {
   if ( myViewer )
@@ -95,6 +99,9 @@ SalomeApp_VTKSelector
              TColStd_IndexedMapOfInteger anIds;
              aSelector->GetIndex(anIO,anIds);
              SALOME_Actor* anActor = aSelector->GetActor(anIO);
+             if( !anActor )
+               anActor = VTK::Find<SALOME_Actor>(aView->getRenderer()->GetActors(),VTK::TIsSameIObject<SALOME_Actor>(anIO));
+
              aList.append(new SalomeApp_SVTKDataOwner(anIO,anIds,aMode,anActor));
              if(MYDEBUG) MESSAGE("VTKSelector::getSelection - "<<anIO->getEntry());
            }
@@ -121,7 +128,12 @@ SalomeApp_VTKSelector
            if(const SalomeApp_SVTKDataOwner* anOwner = dynamic_cast<const SalomeApp_SVTKDataOwner*>(aDataOwner)){
              aSelector->SetSelectionMode(anOwner->GetMode());
              Handle(SALOME_InteractiveObject) anIO = anOwner->IO();
-             aSelector->AddIObject(anIO);
+
+             if( anOwner->GetActor() )
+               aSelector->AddIObject( anOwner->GetActor() );
+             else
+               aSelector->AddIObject(anIO);
+
              anAppendList.Append(anIO);
              aSelector->AddOrRemoveIndex(anIO,anOwner->GetIds(),false);
              if(MYDEBUG) MESSAGE("VTKSelector::setSelection - SVTKDataOwner - "<<anIO->getEntry());
@@ -144,20 +156,6 @@ SalomeApp_VTKSelector
          for( ; anIt.More(); anIt.Next() )
            toRemove.remove( anIt.Value()->getEntry() );
 
-
-/*       SALOME_ListIO aRemoveList;
-         SALOME_ListIteratorOfListIO anAppendListIter(anAppendList);
-         for(; anAppendListIter.More(); anAppendListIter.Next()){
-           Handle(SALOME_InteractiveObject) anIO = anAppendListIter.Value();
-           SALOME_ListIteratorOfListIO aStoredListIter(aStoredList);
-           for(; aStoredListIter.More(); aStoredListIter.Next()){
-             if(anIO->isSame(aStoredListIter.Value())){
-               aRemoveList.Append(anIO);
-             }
-           }
-         }
-         SALOME_ListIteratorOfListIO aRemoveListIter(aRemoveList);*/
-
          QMap< QString, Handle( SALOME_InteractiveObject )>::const_iterator RIt = toRemove.begin(),
                                                                             REnd = toRemove.end();
          for( ; RIt!=REnd; RIt++ )