Salome HOME
IPAL9182: linking to libSPlot2d.so added
[modules/gui.git] / src / SalomeApp / SalomeApp_VTKSelector.cxx
index 3b3a8a30478f454bb1b2d157dcbb7563b501b27d..b75f99b40c824f411444bdc73e9ede1562eed213 100644 (file)
@@ -11,7 +11,7 @@
 #include "utilities.h"
 
 #ifdef _DEBUG_
-static int MYDEBUG = 0;
+static int MYDEBUG = 1;
 #else
 static int MYDEBUG = 0;
 #endif
@@ -44,8 +44,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 )
@@ -121,7 +120,10 @@ 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());
@@ -134,21 +136,21 @@ SalomeApp_VTKSelector
            }
          }
          // To remove IOs, which is not selected.
-         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);
-         for(; aRemoveListIter.More(); aRemoveListIter.Next()){
-           aSelector->RemoveIObject(aRemoveListIter.Value());
-         }
+         QMap< QString, Handle( SALOME_InteractiveObject )> toRemove;
+         SALOME_ListIteratorOfListIO anIt( aStoredList );
+         for( ; anIt.More(); anIt.Next() )
+           if( !anIt.Value().IsNull() )
+             toRemove[ anIt.Value()->getEntry() ] = anIt.Value();
+
+         anIt = SALOME_ListIteratorOfListIO(anAppendList);
+         for( ; anIt.More(); anIt.Next() )
+           toRemove.remove( anIt.Value()->getEntry() );
+
+         QMap< QString, Handle( SALOME_InteractiveObject )>::const_iterator RIt = toRemove.begin(),
+                                                                            REnd = toRemove.end();
+         for( ; RIt!=REnd; RIt++ )
+           aSelector->RemoveIObject( RIt.data() );
+         
          aView->onSelectionChanged();
        }
       }