Salome HOME
getViewManager() correction
[modules/gui.git] / src / SalomeApp / SalomeApp_VTKSelector.cxx
index a8832913d4353e9e40329912b85a2209bf0e98a6..f70d906c262f56e271ed99a2c5ffb98afbf30754 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
@@ -21,8 +21,7 @@ SalomeApp_SVTKDataOwner
                           const TColStd_IndexedMapOfInteger& theIds,
                           Selection_Mode theMode,
                           SALOME_Actor* theActor):
-  SalomeApp_DataOwner(theIO->getEntry()),
-  myIO(theIO),
+  SalomeApp_DataOwner( theIO ),
   mySelectionMode(theMode),
   myActor(theActor)
 {
@@ -45,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 )
@@ -114,23 +112,42 @@ SalomeApp_VTKSelector
     if(SUIT_ViewManager* aViewMgr = myViewer->getViewManager()){
       if(SVTK_ViewWindow* aView = dynamic_cast<SVTK_ViewWindow*>(aViewMgr->getActiveView())){
        if(SVTK_Selector* aSelector = aView->GetSelector()){
-         aSelector->ClearIObjects();
+         SALOME_ListIO anAppendList;
+         const SALOME_ListIO& aStoredList = aSelector->StoredIObjects();
          SUIT_DataOwnerPtrList::const_iterator anIter = theList.begin();
          for(; anIter != theList.end(); ++anIter){
            const SUIT_DataOwner* aDataOwner = (*anIter).get();
            if(const SalomeApp_SVTKDataOwner* anOwner = dynamic_cast<const SalomeApp_SVTKDataOwner*>(aDataOwner)){
              aSelector->SetSelectionMode(anOwner->GetMode());
-             Handle(SALOME_InteractiveObject) anIO = anOwner->GetIO();
+             Handle(SALOME_InteractiveObject) anIO = anOwner->IO();
              aSelector->AddIObject(anIO);
+             anAppendList.Append(anIO);
              aSelector->AddOrRemoveIndex(anIO,anOwner->GetIds(),false);
              if(MYDEBUG) MESSAGE("VTKSelector::setSelection - SVTKDataOwner - "<<anIO->getEntry());
            }else if(const SalomeApp_DataOwner* anOwner = dynamic_cast<const SalomeApp_DataOwner*>(aDataOwner)){
              Handle(SALOME_InteractiveObject) anIO = 
                new SALOME_InteractiveObject(anOwner->entry().latin1(),"");
              aSelector->AddIObject(anIO);
+             anAppendList.Append(anIO);
              if(MYDEBUG) MESSAGE("VTKSelector::setSelection - DataOwner - "<<anIO->getEntry());
            }
          }
+         // To remove IOs, which is not selected.
+         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();
        }
       }