Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/visu.git] / src / VISU_I / VISU_ViewManager_i.cc
index 6639b6b6476c9a012c6fef0fb2836bd934826440..7168bb996b9948d17c89a2a56e7e01e58b3b374e 100644 (file)
@@ -1,23 +1,23 @@
 //  VISU OBJECT : interactive object for VISU entities implementation
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
 //
 //
 //  File   : VISU_ViewManager_i.cc
 //  Module : VISU
 
 #include "VISU_ViewManager_i.hh"
-
-#include "VISU_PrsObject_i.hh"
-#include "VISU_Result_i.hh"
-#include "VISU_Gen_i.hh"
-
+#include "VISU_View_i.hh"
 #include "VISU_Prs3d_i.hh"
-#include "VISU_Mesh_i.hh"
-#include "VISU_ScalarMap_i.hh"
-#include "VISU_IsoSurfaces_i.hh"
-#include "VISU_DeformedShape_i.hh"
-#include "VISU_CutPlanes_i.hh"
-#include "VISU_CutLines_i.hh"
-#include "VISU_Vectors_i.hh"
-#include "VISU_StreamLines_i.hh"
-
 #include "VISU_Table_i.hh"
-#include "VISU_ScalarBarActor.hxx"
+
 #include "VISU_Actor.h"
 
-#include "SALOME_Event.hxx"
+#include "SUIT_Tools.h"
+#include "SUIT_Session.h"
+#include "SUIT_ViewWindow.h"
+#include "SUIT_ViewManager.h"
 
-#include "QAD_Application.h"
-#include "QAD_Desktop.h"
-#include "QAD_Tools.h"
-#include "QAD_Study.h"
-#include "QAD_LeftFrame.h"
-#include "QAD_RightFrame.h"
-#include "QAD_StudyFrame.h"
-#include "QAD_PyEditor.h"
-
-#include "VTKViewer_ViewFrame.h"
-#include "VTKViewer_RenderWindow.h"
-#include "SALOMEGUI_TableDlg.h"
-#include "Plot2d_CurveContainer.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_ViewModel.h"
+#include "SPlot2d_Curve.h"
 #include "Plot2d_ViewFrame.h"
+#include "Plot2d_ViewWindow.h"
+#include "Plot2d_ViewModel.h"
 
-#include <memory>
+#include "SalomeApp_Study.h"
+#include "SalomeApp_Application.h"
+#include "LightApp_SelectionMgr.h"
 
-#include <qstring.h>
-#include <qfileinfo.h>
+#include "SALOME_Event.hxx"
+#include "SALOME_ListIO.hxx"
+#include "SALOME_ListIteratorOfListIO.hxx"
 
-#include <vtkRenderer.h>
 #include <vtkCamera.h>
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+
+#include <qapplication.h>
 
 using namespace std;
 
 #ifdef _DEBUG_
-static int MYDEBUG = 0;
+static int MYDEBUG = 1;
 #else
 static int MYDEBUG = 0;
 #endif
 
-static QFileInfo aFileInfo;
+namespace VISU {
 
-namespace VISU{
-  //===========================================================================
-  typedef TVoidMemFunEvent<QAD_StudyFrame> TFrameActionEvent;
+  struct TNewViewManagerEvent: public SALOME_Event
+  {
+    int myStudyId;
+    typedef SalomeApp_Application* TResult;
+    TResult myResult;
 
-  template<class TObject>
-  class TSetBackgroundEvent: public SALOME_Event{
-    TObject* myView;
-    const SALOMEDS::Color& myColor;
-  public:
-    TSetBackgroundEvent(TObject* theView, const SALOMEDS::Color& theColor):
-      myView(theView), myColor(theColor)
+    TNewViewManagerEvent (const int theStudyId):
+      myStudyId(theStudyId),
+      myResult(NULL)
     {}
-    virtual void Execute(){
-      int aColor[3];
-      aColor[0] = int(255.0*myColor.R);
-      aColor[1] = int(255.0*myColor.G);
-      aColor[2] = int(255.0*myColor.B);
-      QColor aNewColor(aColor[0],aColor[1],aColor[2]);
-      myView->setBackgroundColor(aNewColor);
+
+    virtual
+    void
+    Execute()
+    {
+      MESSAGE("Find application for study with id = : " << myStudyId);
+      SUIT_Session* aSession = SUIT_Session::session();
+      QPtrList<SUIT_Application> anApplications = aSession->applications();
+      QPtrListIterator<SUIT_Application> anIter (anApplications);
+      while (SUIT_Application* anApp = anIter.current()) {
+       ++anIter;
+       if (SUIT_Study* aSStudy = anApp->activeStudy()) {
+         if (SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(aSStudy)) {
+            if (_PTR(Study) aCStudy = aStudy->studyDS()) {
+              //if (myStudyName == aCStudy->Name()) {
+              if (myStudyId == aCStudy->StudyId()) {
+               myResult = dynamic_cast<SalomeApp_Application*>(anApp);
+               break;
+             }
+           }
+         }
+       }
+      }
+      if (!myResult) {
+        //MESSAGE("Error: application is not found for study : " << myStudyName);
+        MESSAGE("Error: application is not found for study with id = : " << myStudyId);
+      }
     }
   };
 
-  class TSetViewRepresentation: public SALOME_Event{
-    VISU::View::ViewRepresentation myViewRepr;
-    View_i*                        myView;
-    CORBA::Boolean                 myState;
- public:
-    TSetViewRepresentation( View_i*  aView, 
-                           VISU::View::ViewRepresentation ViewRepr,
-                           CORBA::Boolean State ):
-      SALOME_Event(), myViewRepr( ViewRepr ), myView( aView ), myState( State )
-    {}
-    virtual void Execute(){
+  //===========================================================================
+  ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy)
+  {
+    if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i - "<<this);
 
-  bool old = myView->IsPartShown( myViewRepr );
+    //CORBA::String_var aStudyName = theStudy->Name();
+    //myApplication = ProcessEvent(new TNewViewManagerEvent(aStudyName.in()));
+    int aStudyID = theStudy->StudyId();
+    myApplication = ProcessEvent(new TNewViewManagerEvent(aStudyID));
+  }
 
-  QAD_RightFrame* fr = myView->myStudyFrame->getRightFrame();
 
-  if( myView->myStudyFrame != NULL ){
-    switch( myViewRepr )
-      {
-      case VISU::View::OBJECTBROWSER:
-       if( myState!=old )
-         if( myState )
-           myView->myStudyFrame->unCompressLeft();
-         else
-           myView->myStudyFrame->compressLeft();
-       break;
-      case VISU::View::VIEWER:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressUp();
-         else
-           fr->compressUp();
-       break;
-      case VISU::View::PYTHON:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressLeft();
-         else
-           fr->compressLeft();
-       break;
-      case VISU::View::MESSAGES:
-       if( myState!=old )
-         if( myState )
-           fr->unCompressRight();
-         else
-           fr->compressRight();
-       break;
-      };
-    }
+  ViewManager_i::~ViewManager_i()
+  {
+    if(MYDEBUG) MESSAGE("ViewManager_i::~ViewManager_i - "<<this);
   }
-};
 
-  class TGetViewRepresentation: public SALOME_Event
+
+  struct TCurrentViewEvent: public SALOME_Event
   {
-  public:
-    typedef CORBA::Boolean TResult;
+    SalomeApp_Application* myApplication;
+    typedef VISU::View_ptr TResult;
     TResult myResult;
-    VISU::View::ViewRepresentation myPart;
-    View_i*  myView;
 
-    TGetViewRepresentation( View_i* aView, VISU::View::ViewRepresentation Part ):
-      SALOME_Event(), myResult( false ), myPart( Part ), myView( aView )
-       {
-       }
-      virtual void Execute(){
-       switch( myPart )
-         {
-         case VISU::View::OBJECTBROWSER:
-           myResult = !myView->myStudyFrame->isCompressedLeft();
-           break;
-         case VISU::View::VIEWER:
-           myResult = !myView->myStudyFrame->getRightFrame()->isCompressedViewFrame();
-           break;
-         case VISU::View::PYTHON:
-           myResult = !myView->myStudyFrame->getRightFrame()->isCompressedPython();
-           break;
-         case VISU::View::MESSAGES:
-           myResult = !myView->myStudyFrame->getRightFrame()->isCompressedMessage();
-         }
-      }
+    TCurrentViewEvent(SalomeApp_Application* theApplication):
+      myApplication(theApplication),
+      myResult(VISU::View::_nil())
+    {}
+
+    virtual
+    void
+    Execute()
+    {
+      VISU::View3D_i* aView = new View3D_i (myApplication);
+      if (aView->Create(0))
+       myResult = aView->_this();
+    }
   };
 
-  class TSetViewWidthHeight: public SALOME_Event{
-    CORBA::Long mySize;
-    bool myIsWidth;
-    View_i*  myView;
-  public:
-      TSetViewWidthHeight( View_i* aView, CORBA::Long Size, bool IsWidth ):
-       SALOME_Event(), mySize( Size ), myView( aView ), myIsWidth( IsWidth )
-         {}
-      virtual void Execute(){
-        if( myView->myStudyFrame != NULL ){
-         QWidget* aStudyParent = myView->myStudyFrame->parentWidget(true);
-         int aleft   = aStudyParent->frameGeometry().left();
-         int atop    = aStudyParent->frameGeometry().top();
-         int aheight = aStudyParent->frameGeometry().height();
-         int awidth  = aStudyParent->frameGeometry().width();
-         QRect aQRect;
-         if( myIsWidth )
-           aQRect = QRect( aleft, atop, mySize, aheight );
-         else
-           aQRect = QRect( aleft, atop, awidth, mySize );
+  VISU::View_ptr ViewManager_i::GetCurrentView(){
+    return ProcessEvent(new TCurrentViewEvent(myApplication));
+  }
 
-         aStudyParent->setGeometry(aQRect);
-       } 
-      }
-  };    
 
-  class TGetViewWidthHeight: public SALOME_Event{
-  public:
-    typedef CORBA::Long TResult;
+  template<class TViewFrame>
+  struct TCreateViewFrameEvent: public SALOME_Event
+  {
+    SalomeApp_Application* myApplication;
+    typedef typename TViewFrame::TInterface TInterface;
+    typedef typename TInterface::_ptr_type TResult;
     TResult myResult;
-    bool myIsWidth;
-    View_i*  myView;
-  public:
-      TGetViewWidthHeight( View_i* aView, bool IsWidth ):
-       SALOME_Event(), myView( aView ), myIsWidth( IsWidth )
-         {}
-
-         virtual void Execute()
-           {
-             if( myView ) {
-               QWidget* aStudyParent = myView->myStudyFrame->parentWidget(true);
-               if( myIsWidth )
-                 myResult = aStudyParent->frameGeometry().width();
-               else
-                 myResult = aStudyParent->frameGeometry().height();
-             }
-           }
-  };
 
-  class TSetViewPositionHorizontal: public SALOME_Event{
-    VISU::View::ViewPosition     myViewPos;
-    View_i*                      myView;   
-  public:
-     TSetViewPositionHorizontal ( View_i* aView,
-                                 VISU::View::ViewPosition ViewPos  ):
-       SALOME_Event(), myView( aView ), myViewPos(ViewPos)
+    TCreateViewFrameEvent (SalomeApp_Application* theApplication):
+      myApplication(theApplication),
+      myResult(TInterface::_nil())
     {}
-    virtual void Execute(){
-    QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
-    QWidget* aStudy = dynamic_cast <QWidget*> (myView->myStudyFrame);
-    QWidget* aStudyParent = aStudy->parentWidget(true);
-    if ( aStudyParent != 0 )
-      if ( aWorkspace!=NULL || aStudy != NULL )
-       switch(myViewPos){
-         case VISU::View::LEFT:
-         QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignLeft);
-           break;
-         case VISU::View::CENTER:
-           QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignHCenter);
-           break;
-         case VISU::View::RIGHT:
-           QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignRight);
-           break;
-       }
-    }
-  };
 
-  class TSetViewPositionVertical: public SALOME_Event{
-    VISU::View::ViewPosition     myViewPos;
-    View_i*                      myView;
-  public:
-      TSetViewPositionVertical ( View_i* aView,
-                                VISU::View::ViewPosition ViewPos  ):
-       SALOME_Event(), myView( aView ), myViewPos(ViewPos)
-    {}
-    virtual void Execute(){
-    QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
-    QWidget* aStudy = dynamic_cast <QWidget*>(myView->myStudyFrame);
-    QWidget* aStudyParent = aStudy->parentWidget(true);
-    if ( aStudyParent != 0 )
-      if ( aWorkspace!=NULL || aStudy != NULL )
-       switch(myViewPos){
-         case VISU::View::TOP:
-         QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignTop);
-           break;
-         case VISU::View::CENTER:
-           QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignVCenter);
-           break;
-         case VISU::View::BOTTOM:
-           QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignBottom);
-           break;
+    virtual
+    void
+    Execute()
+    {
+      //if (CheckStudy(myStudyDocument)) {
+      if (myApplication) {
+       TViewFrame* pView = new TViewFrame (myApplication);
+       if (pView->Create(1)) {
+         myResult = pView->_this();
+         qApp->processEvents(); // Fix for bug 9929
        }
+      }
     }
   };
 
-  class TSetRelativePosition : public SALOME_Event
+
+  VISU::View3D_ptr ViewManager_i::Create3DView()
+  {
+    if (MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
+    return ProcessEvent(new TCreateViewFrameEvent<View3D_i>(myApplication));
+  }
+
+  VISU::XYPlot_ptr ViewManager_i::CreateXYPlot()
+  {
+    if (MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
+    return ProcessEvent(new TCreateViewFrameEvent<XYPlot_i>(myApplication));
+  }
+
+  class TCreateViewEvent: public SALOME_Event
   {
-    View_i*                      myView;
-    CORBA::Double                myX, myY;
   public:
-    TSetRelativePosition ( View_i* aView, CORBA::Double X, CORBA::Double Y ):
-      SALOME_Event(), myView( aView ), myX( X ), myY( Y )
+    TCreateViewEvent (SalomeApp_Application* theApplication)
+      : myApplication(theApplication)
     {}
-    virtual void Execute(){
-      QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
-      if( aWorkspace )
-      {
-       QAD_StudyFrame* aFrame = myView->myStudyFrame;
-       QWidget* aStudyParent = aFrame->parentWidget(true);
-       aStudyParent->move( int( myX * aWorkspace->width() ), int( myY * aWorkspace->height() ) );
-      }
-    }
+  protected:
+    SalomeApp_Application* myApplication;
   };
 
-  class TSetRelativeSize : public SALOME_Event
+  class TCreateTableViewFrameEvent: public TCreateViewEvent
   {
-    View_i*                      myView;
-    CORBA::Double                myX, myY;
+    Table_ptr myTable;
   public:
-    TSetRelativeSize ( View_i* aView, CORBA::Double X, CORBA::Double Y ):
-      SALOME_Event(), myView( aView ), myX( X ), myY( Y )
+    TCreateTableViewFrameEvent (SalomeApp_Application* theApplication,
+                               Table_ptr theTable):
+      TCreateViewEvent(theApplication),
+      myTable(theTable),
+      myResult(VISU::TableView::_nil())
     {}
-    virtual void Execute(){
-      QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
-      if( aWorkspace )
-      {
-       QAD_StudyFrame* aFrame = myView->myStudyFrame;
-       QWidget* aStudyParent = aFrame->parentWidget(true);
-       aStudyParent->setGeometry( aStudyParent->x(), aStudyParent->y(),
-                            int( myX * aWorkspace->width() ), int( myY * aWorkspace->height() ) );
-      }
+
+    virtual void Execute()
+    {
+      //if (CheckStudy(myStudyDocument)) {
+       VISU::TableView_i* pView = new TableView_i (myApplication);
+       if (pView->Create(myTable) != NULL)
+         myResult = pView->_this();
+      //}
     }
+    typedef VISU::TableView_ptr TResult;
+    TResult myResult;
   };
 
+  VISU::TableView_ptr ViewManager_i::CreateTableView (VISU::Table_ptr theTable)
+  {
+    if (MYDEBUG) MESSAGE("ViewManager_i::CreateTableView");
+    //return ProcessEvent(new TCreateViewFrameEvent<TableView_i>(myApplication));
+    return ProcessEvent(new TCreateTableViewFrameEvent (myApplication, theTable));
+  }
 
-
-  class TSavePictureEvent: public SALOME_Event{
-    QWidget* myWidget;
-    const char* myFileName;
-  public:
-    typedef CORBA::Boolean TResult;
-    TResult myResult;
-    TSavePictureEvent(QWidget* theWidget, const char* theFileName):
-      myWidget(theWidget),
-      myFileName(theFileName),
-      myResult(false)
-    {}
-    virtual void Execute(){
-      if(myWidget){
-       QPixmap px = QPixmap::grabWindow(myWidget->winId());
-       if (!QString(myFileName).isNull()) {
-         QString fmt = QAD_Tools::getFileExtensionFromPath(myFileName).upper();
-         if (fmt.isEmpty())
-           fmt = QString("BMP"); // default format
-         if (fmt == "JPG")
-           fmt = "JPEG";
-         myResult = px.save(myFileName, fmt.latin1());
+  void ViewManager_i::Destroy (View_ptr theView)
+  {
+    class TEvent: public SALOME_Event {
+      View_ptr myView;
+    public:
+      TEvent(View_ptr theView):
+       myView(theView)
+      {}
+      virtual void Execute(){
+       if (!CORBA::is_nil(myView)) {
+         if (VISU::View_i* pView = dynamic_cast<VISU::View_i*>(VISU::GetServant(myView).in())) {
+           pView->Close();
+           pView->_remove_ref();
+         }
        }
       }
-    }
-  };
-
-
-  void RepaintView(QAD_StudyFrame* theStudyFrame);
-  class TRepaintViewEvent: public SALOME_Event{
-    QAD_StudyFrame* myStudyFrame;
-  public:
-    TRepaintViewEvent(QAD_StudyFrame* theStudyFrame):
-      myStudyFrame(theStudyFrame)
-    {}
-    virtual void Execute(){
-      RepaintView(myStudyFrame);
-    }
-  };
-  
+    };
 
-  VTKViewer_ViewFrame* GetViewFrame(QAD_StudyFrame* theStudyFrame){
-    return dynamic_cast<VTKViewer_ViewFrame*>(theStudyFrame->getRightFrame()->getViewFrame());
-  }
-  vtkRenderer* GetRenderer(QAD_StudyFrame* theStudyFrame){
-    return GetViewFrame(theStudyFrame)->getRenderer();
-  }
-  vtkCamera* GetCamera(QAD_StudyFrame* theStudyFrame){
-    return GetRenderer(theStudyFrame)->GetActiveCamera();
+    if (MYDEBUG) MESSAGE("ViewManager_i::Destroy - " << theView->_is_nil());
+    ProcessVoidEvent(new TEvent(theView));
   }
 
-
-  void RepaintView(VTKViewer_ViewFrame* theViewFrame){
-    theViewFrame->getRenderer()->ResetCameraClippingRange();
-    theViewFrame->getRW()->getRenderWindow()->Render();
-    //GetViewFrame(theStudyFrame)->Repaint();
+  //===========================================================================
+  // VISU namespace functions
+  //===========================================================================
+  vtkRenderer* GetRenderer (SUIT_ViewWindow* theViewWindow)
+  {
+    if (SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>(theViewWindow))
+      return vw->getRenderer();
+    return NULL;
   }
 
-  void RepaintView(QAD_StudyFrame* theStudyFrame){
-    RepaintView(GetViewFrame(theStudyFrame));
+  vtkCamera* GetCamera (SUIT_ViewWindow* theViewWindow)
+  {
+    return GetRenderer(theViewWindow)->GetActiveCamera();
   }
 
+  void RepaintView (SUIT_ViewWindow* theViewWindow)
+  {
+    if (SVTK_ViewWindow* vf = dynamic_cast<SVTK_ViewWindow*>(theViewWindow)) {
+      vf->getRenderer()->ResetCameraClippingRange();
+      vf->getRenderWindow()->Render();
+    }
+  }
 
-  VISU_Actor* UpdateViewer(QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs){
-    VTKViewer_ViewFrame* vf = GetViewFrame(theStudyFrame);
+  VISU_Actor* UpdateViewer (SUIT_ViewWindow* theViewWindow, int theDisplaing, Prs3d_i* thePrs)
+  {
+    SVTK_ViewWindow* vf = dynamic_cast<SVTK_ViewWindow*>(theViewWindow);
     if (!vf) return NULL;
     if(MYDEBUG) MESSAGE("UpdateViewer - theDisplaing = "<<theDisplaing<<"; thePrs = "<<thePrs);
     vtkRenderer *aRen = vf->getRenderer();
@@ -400,10 +287,10 @@ namespace VISU{
     vtkActor *anActor;
     VISU_Actor *anVISUActor = NULL, *aResActor = NULL;
     for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL;){
-      if(anActor->IsA("VISU_Actor")){ 
+      if(anActor->IsA("VISU_Actor")){
        anVISUActor = VISU_Actor::SafeDownCast(anActor);
        if (thePrs == anVISUActor->GetPrs3d()) {
-         aResActor = anVISUActor->GetParent();
+         aResActor = anVISUActor;
          if(theDisplaing < eErase)
            aResActor->VisibilityOn();
          else
@@ -413,1287 +300,399 @@ namespace VISU{
            anVISUActor->VisibilityOff();
          else
            anVISUActor->VisibilityOn();
-       } 
+       }
       }
     }
     if (aResActor) {
-      RepaintView(theStudyFrame);
+      RepaintView(theViewWindow);
       return aResActor;
     }
     if(thePrs != NULL && theDisplaing < eErase){
       try{
        anVISUActor = thePrs->CreateActor();
        vf->AddActor(anVISUActor);
-      }catch(std::runtime_error& exc){
-       INFOS(exc.what());
+      }catch(std::exception& exc){
+       if(MYDEBUG) INFOS(exc.what());
+       return NULL;
+      }catch(...){
+       if(MYDEBUG) INFOS("Unknown exception was occured!!!");
        return NULL;
       }
     }
-    RepaintView(theStudyFrame);
+    RepaintView(theViewWindow);
     return anVISUActor;
   }
-  void UpdatePlot2d(Plot2d_ViewFrame *theView,int theDisplaying, Curve_i* theCurve) {
-    if(MYDEBUG) MESSAGE("UpdatePlot2d - theDisplaying = "<<theDisplaying);
-    if ( !theView )
+
+  void UpdatePlot2d (Plot2d_ViewFrame *theView,int theDisplaying, Curve_i* theCurve)
+  {
+    if(MYDEBUG) MESSAGE("UpdatePlot2d - theDisplaying = " << theDisplaying);
+    if (!theView)
       return;
     QList<Plot2d_Curve> clist;
-    theView->getCurves( clist );
-    if ( theDisplaying == eEraseAll ) {
-      for ( int i = 0; i < clist.count(); i++ ) {
-       if(MYDEBUG) MESSAGE("UpdatePlot2d - erasing all : curve - "<<clist.at( i ));
-       theView->eraseCurve( clist.at( i ) );
+    theView->getCurves(clist);
+    if (theDisplaying == eEraseAll) {
+      for (int i = 0; i < clist.count(); i++) {
+       if(MYDEBUG) MESSAGE("UpdatePlot2d - erasing all : curve - " << clist.at(i));
+       theView->eraseCurve(clist.at(i));
       }
-    }
-    else if ( theDisplaying == eErase ) {
-      for ( int i = 0; i < clist.count(); i++ ) {
-       if ( theCurve && clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) ) {
-         if(MYDEBUG) MESSAGE("UpdatePlot2d - erasing : curve - "<<clist.at( i ) );
-         theView->eraseCurve( clist.at( i ) );
+    } else if (theDisplaying == eErase) {
+      if (theCurve) {
+       for (int i = 0; i < clist.count(); i++) {
+         SPlot2d_Curve* aSPlot2dC = dynamic_cast<SPlot2d_Curve*>(clist.at(i));
+         if (aSPlot2dC->hasIO() &&
+             !strcmp(aSPlot2dC->getIO()->getEntry(), theCurve->GetEntry())) {
+           if(MYDEBUG) MESSAGE("UpdatePlot2d - erasing : curve - " << aSPlot2dC);
+           theView->eraseCurve(aSPlot2dC);
+         }
        }
       }
-    }
-    else if ( theDisplaying == eDisplay ) {
-      bool bFound = false;
-      for ( int i = 0; i < clist.count(); i++ ) {
-       if ( theCurve && clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) ) {
-         if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve - "<<clist.at( i ) );
-         clist.at( i )->setHorTitle( theCurve->GetHorTitle().c_str() );
-         clist.at( i )->setVerTitle( theCurve->GetVerTitle().c_str() );
-         clist.at( i )->setHorUnits( theCurve->GetHorUnits().c_str() );
-         clist.at( i )->setVerUnits( theCurve->GetVerUnits().c_str() );
-         double* xList = 0;
-         double* yList = 0;
-         int     nbPoints = theCurve->GetData( xList, yList );
-         if ( nbPoints > 0 && xList && yList ) {
-           clist.at( i )->setData( xList, yList, nbPoints );
-         }
-         if ( !theCurve->IsAuto() ) {
-           clist.at( i )->setLine( (Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth() );
-           clist.at( i )->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() ); 
-           SALOMEDS::Color color = theCurve->GetColor();
-           clist.at( i )->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
+    } else if (theDisplaying == eDisplay) {
+      if (theCurve) {
+       bool bFound = false;
+       for (int i = 0; i < clist.count(); i++) {
+         SPlot2d_Curve* aSPlot2dC = dynamic_cast<SPlot2d_Curve*>(clist.at(i));
+         if (aSPlot2dC->hasIO() &&
+             !strcmp(aSPlot2dC->getIO()->getEntry(), theCurve->GetEntry())) {
+           if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve - " << aSPlot2dC);
+           aSPlot2dC->setHorTitle( theCurve->GetHorTitle().c_str() );
+           aSPlot2dC->setVerTitle( theCurve->GetVerTitle().c_str() );
+           aSPlot2dC->setHorUnits( theCurve->GetHorUnits().c_str() );
+           aSPlot2dC->setVerUnits( theCurve->GetVerUnits().c_str() );
+           double* xList = 0;
+           double* yList = 0;
+           int     nbPoints = theCurve->GetData( xList, yList );
+           if (nbPoints > 0 && xList && yList) {
+             aSPlot2dC->setData( xList, yList, nbPoints );
+           }
+           if (!theCurve->IsAuto()) {
+             aSPlot2dC->setLine((Plot2d_Curve::LineType)theCurve->GetLine(),
+                                theCurve->GetLineWidth());
+             aSPlot2dC->setMarker((Plot2d_Curve::MarkerType)theCurve->GetMarker());
+             SALOMEDS::Color color = theCurve->GetColor();
+             aSPlot2dC->setColor(QColor((int)(color.R*255.),
+                                        (int)(color.G*255.),
+                                        (int)(color.B*255.)));
+           }
+           aSPlot2dC->setAutoAssign(theCurve->IsAuto());
+           theView->displayCurve(aSPlot2dC);
+           bFound = true;
          }
-         clist.at( i )->setAutoAssign( theCurve->IsAuto() );
-         theView->displayCurve( clist.at( i ) );
-         bFound = true;
        }
-      }
-      if ( !bFound ) {
-       Plot2d_Curve* crv = theCurve->CreatePresentation();
-       if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve (new) - "<<crv );
-       if ( crv ) {
-         theView->displayCurve( crv );
-         theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
-         theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
-         SALOMEDS::Color newColor;
-         newColor.R = crv->getColor().red()/255.;
-         newColor.G = crv->getColor().green()/255.;
-         newColor.B = crv->getColor().blue()/255.;
-         theCurve->SetColor( newColor );
-         crv->setAutoAssign( theCurve->IsAuto() );
+       if (!bFound) {
+         Plot2d_Curve* crv = theCurve->CreatePresentation();
+         if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve (new) - "<<crv );
+         if (crv) {
+           theView->displayCurve( crv );
+           theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
+           theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
+           SALOMEDS::Color newColor;
+           newColor.R = crv->getColor().red()/255.;
+           newColor.G = crv->getColor().green()/255.;
+           newColor.B = crv->getColor().blue()/255.;
+           theCurve->SetColor( newColor );
+           crv->setAutoAssign( theCurve->IsAuto() );
+         }
        }
       }
-    }
-    else if ( theDisplaying == eDisplayOnly ) {
-      bool bFound = false;
-      for ( int i = 0; i < clist.count(); i++ ) {
-       if ( theCurve && clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) ) {
-         if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve - "<<clist.at( i ) );
-         clist.at( i )->setHorTitle( theCurve->GetHorTitle().c_str() );
-         clist.at( i )->setVerTitle( theCurve->GetVerTitle().c_str() );
-         clist.at( i )->setHorUnits( theCurve->GetHorUnits().c_str() );
-         clist.at( i )->setVerUnits( theCurve->GetVerUnits().c_str() );
-         double* xList = 0;
-         double* yList = 0;
-         int     nbPoints = theCurve->GetData( xList, yList );
-         if ( nbPoints > 0 && xList && yList ) {
-           clist.at( i )->setData( xList, yList, nbPoints );
-         }
-         if ( !theCurve->IsAuto() ) {
-           clist.at( i )->setLine( (Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth() );
-           clist.at( i )->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() ); 
-           SALOMEDS::Color color = theCurve->GetColor();
-           clist.at( i )->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
+    } else if (theDisplaying == eDisplayOnly) {
+      if (theCurve) {
+       bool bFound = false;
+       for (int i = 0; i < clist.count(); i++) {
+         SPlot2d_Curve* aSPlot2dC = dynamic_cast<SPlot2d_Curve*>(clist.at(i));
+         if (aSPlot2dC->hasIO() &&
+             !strcmp(aSPlot2dC->getIO()->getEntry(), theCurve->GetEntry())) {
+           if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve - " << aSPlot2dC);
+           aSPlot2dC->setHorTitle( theCurve->GetHorTitle().c_str() );
+           aSPlot2dC->setVerTitle( theCurve->GetVerTitle().c_str() );
+           aSPlot2dC->setHorUnits( theCurve->GetHorUnits().c_str() );
+           aSPlot2dC->setVerUnits( theCurve->GetVerUnits().c_str() );
+           double* xList = 0;
+           double* yList = 0;
+           int     nbPoints = theCurve->GetData( xList, yList );
+           if ( nbPoints > 0 && xList && yList ) {
+             aSPlot2dC->setData( xList, yList, nbPoints );
+           }
+           if ( !theCurve->IsAuto() ) {
+             aSPlot2dC->setLine((Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth());
+             aSPlot2dC->setMarker((Plot2d_Curve::MarkerType)theCurve->GetMarker());
+             SALOMEDS::Color color = theCurve->GetColor();
+             aSPlot2dC->setColor(QColor((int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.)));
+           }
+           aSPlot2dC->setAutoAssign(theCurve->IsAuto());
+           theView->displayCurve(aSPlot2dC);
+           bFound = true;
+         } else {
+           theView->eraseCurve(aSPlot2dC);
          }
-         clist.at( i )->setAutoAssign( theCurve->IsAuto() );
-         theView->displayCurve( clist.at( i ) );
-         bFound = true;
        }
-       else {
-         theView->eraseCurve( clist.at( i ) );
-       }
-      }
-      if ( !bFound ) {
-       Plot2d_Curve* crv = theCurve->CreatePresentation();
-       if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve (new) - "<<crv );
-       if ( crv ) {
-         theView->displayCurve( crv );
-         theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
-         theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
-         SALOMEDS::Color newColor;
-         newColor.R = crv->getColor().red()/255.;
-         newColor.G = crv->getColor().green()/255.;
-         newColor.B = crv->getColor().blue()/255.;
-         theCurve->SetColor( newColor );
-         crv->setAutoAssign( theCurve->IsAuto() );
+       if (!bFound) {
+         Plot2d_Curve* crv = theCurve->CreatePresentation();
+         if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve (new) - " << crv);
+         if (crv) {
+           theView->displayCurve(crv);
+           theCurve->SetLine((VISU::Curve::LineType)crv->getLine(), crv->getLineWidth());
+           theCurve->SetMarker((VISU::Curve::MarkerType)crv->getMarker());
+           SALOMEDS::Color newColor;
+           newColor.R = crv->getColor().red()/255.;
+           newColor.G = crv->getColor().green()/255.;
+           newColor.B = crv->getColor().blue()/255.;
+           theCurve->SetColor(newColor);
+           crv->setAutoAssign(theCurve->IsAuto());
+         }
        }
       }
     }
   }
 
-  QAD_Study* CheckStudy( SALOMEDS::Study_ptr theStudy ) {
-    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
-    QAD_Study* aStudy = aDesktop->findStudy(theStudy);
-    if(!aStudy){
-      CORBA::String_var aName = theStudy->Name();
-      aFileInfo.setFile(aName.in());
-      if (aFileInfo.exists()) 
-       aStudy = aDesktop->loadStudy(aFileInfo.baseName());
-      else 
-       aStudy = aDesktop->loadStudy(aName.in());
-      if (!aStudy) {
-       MESSAGE("CheckStudy()::ERROR: Can't load study");
-      }
-    }
-    return aStudy;
-  }
-  //===========================================================================
-  ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy) {
-    if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i");
-    myStudyDocument = SALOMEDS::Study::_duplicate(theStudy);
+  VISU_Actor* GetActor (VISU::Prs3d_i* thePrs3d, SVTK_ViewWindow* theVTKFrame)
+  {
+    vtkActorCollection *anActColl = theVTKFrame->getRenderer()->GetActors();
+    anActColl->InitTraversal();
+    while (vtkActor *anActor = anActColl->GetNextActor())
+      if (VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
+       if (thePrs3d == anVISUActor->GetPrs3d())
+         return anVISUActor;
+    return NULL;
   }
 
+  struct TDeleteActorsEvent: public SALOME_Event
+  {
+    VISU::Curve_i* myPrs;
 
-  class TGetCurrentViewEvent: public SALOME_Event{
-    SALOMEDS::Study_ptr myStudyDocument;
-  public:
-    TGetCurrentViewEvent( SALOMEDS::Study_ptr theStudy):
-      myStudyDocument(theStudy),
-      myResult(VISU::View::_nil())
+    TDeleteActorsEvent (VISU::Curve_i* thePrs):
+      myPrs(thePrs)
     {}
-    virtual void Execute(){
-      if(QAD_Study* aStudy = QAD_Application::getDesktop()->findStudy( myStudyDocument )){
-       if ( QAD_StudyFrame* aStudyFrame = aStudy->getActiveStudyFrame() ) {
-         if(MYDEBUG) 
-           MESSAGE("GetCurrentView::Execute - TypeView = "<<aStudyFrame->getTypeView());
-         if ( aStudyFrame->getTypeView() == VIEW_VTK ) {
-           VISU::View3D_i* pView = new View3D_i(myStudyDocument);
-           if(pView->Create(0)) 
-             myResult = pView->_this();
-         } else if ( aStudyFrame->getTypeView() == VIEW_PLOT2D ) {
-           VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
-           if(pView->Create(0)) 
-             myResult = pView->_this();
+
+    virtual
+    void
+    Execute()
+    {
+      if (!myPrs) return;
+
+      // 1. Find appropriate application (code like in TNewViewManagerEvent::Execute())
+      SALOMEDS::Study_var myStudyDocument = myPrs->GetStudyDocument();
+      SalomeApp_Application* anApp = NULL;
+      CORBA::String_var studyName = myStudyDocument->Name();
+      std::string aStudyName = studyName.in();
+      SUIT_Session* aSession = SUIT_Session::session();
+      QPtrList<SUIT_Application> anApplications = aSession->applications();
+      QPtrListIterator<SUIT_Application> anIter (anApplications);
+      while (SUIT_Application* aSUITApp = anIter.current()) {
+        ++anIter;
+       if (SUIT_Study* aSStudy = aSUITApp->activeStudy()) {
+          if (SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(aSStudy)) {
+            if (_PTR(Study) aCStudy = aStudy->studyDS()) {
+              if (aStudyName == aCStudy->Name()) {
+                anApp = dynamic_cast<SalomeApp_Application*>(aSUITApp);
+               break;
+             }
+           }
          }
-       }
+        }
+      }
+      if (!anApp)
+        return;
+
+      // 2. Remove corresponding IO from selection
+      SALOMEDS::SObject_var aSObject = myPrs->GetSObject();
+      CORBA::String_var anEntry = aSObject->GetID();
+
+      LightApp_SelectionMgr* aSelectionMgr = anApp->selectionMgr();
+      SALOME_ListIO aListIO, aNewListIO;
+      aSelectionMgr->selectedObjects(aListIO);
+
+      for (SALOME_ListIteratorOfListIO it (aListIO); it.More(); it.Next()) {
+        if (it.Value()->hasEntry()) {
+          std::string aCurEntry (it.Value()->getEntry());
+          if (aCurEntry != std::string( anEntry.in() ) ) {
+            aNewListIO.Append(it.Value());
+          }
+        }
       }
-    }
-    typedef VISU::View_ptr TResult;
-    TResult myResult;
-  };
-
-  VISU::View_ptr ViewManager_i::GetCurrentView(){
-    return ProcessEvent(new TGetCurrentViewEvent( myStudyDocument ));
-  }
-  
-  
-  class TCreateViewEvent: public SALOME_Event{
-  public:
-    TCreateViewEvent( SALOMEDS::Study_ptr theStudy):
-      myStudyDocument(theStudy)
-    {};
-  protected:
-    SALOMEDS::Study_ptr myStudyDocument;
-  };
-
 
-  template<class TViewFrame>
-  class TCreateViewFrameEvent: public TCreateViewEvent{
-  public:
-    typedef typename TViewFrame::TInterface TInterface;
-    typedef typename TInterface::_ptr_type TResult;
-    TResult myResult;
-    TCreateViewFrameEvent(SALOMEDS::Study_ptr theStudy):
-      TCreateViewEvent(theStudy),
-      myResult(TInterface::_nil())
-    {}
-    virtual void Execute(){
-      if(CheckStudy(myStudyDocument)){
-       TViewFrame* pView = new TViewFrame(myStudyDocument);
-       if(pView->Create(1)) 
-         myResult = pView->_this();
+      aSelectionMgr->setSelectedObjects(aNewListIO);
+
+      // 3. Remove Actors
+      ViewManagerList aViewManagerList;
+      anApp->viewManagers(SVTK_Viewer::Type(), aViewManagerList);
+      QPtrListIterator<SUIT_ViewManager> anVMIter (aViewManagerList);
+      for (; anVMIter.current(); ++anVMIter) {
+        SUIT_ViewManager* aViewManager = anVMIter.current();
+       QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
+       for (int i = 0, iEnd = aViews.size(); i < iEnd; i++) {
+         if (SUIT_ViewWindow* aViewWindow = aViews.at(i)) {
+           if (Plot2d_ViewWindow* vw = dynamic_cast<Plot2d_ViewWindow*>(aViewWindow)) {
+              Plot2d_ViewFrame* vf = vw->getViewFrame();
+             QList<Plot2d_Curve> clist;
+             vf->getCurves(clist);
+             for (int i = 0; i < clist.count(); i++) {
+                if (SPlot2d_Curve* cu = dynamic_cast<SPlot2d_Curve*>(clist.at(i))) {
+                 if (cu->hasIO() &&
+                     strcmp(cu->getIO()->getEntry(), myPrs->GetEntry()) == 0) {
+                   vf->eraseCurve(cu);
+                 }
+               }
+             }
+             vf->Repaint();
+             //jfa tmp:aViewFrame->unHighlightAll();
+            }
+          }
+        }
       }
     }
   };
 
+  void DeleteActors (VISU::Curve_i* thePrs)
+  {
+    if (!thePrs) return;
+    ProcessVoidEvent(new TDeleteActorsEvent (thePrs));
+
+/*    // 1. Find appropriate application (code like in TNewViewManagerEvent::Execute())
+    SALOMEDS::Study_var myStudyDocument = thePrs->GetStudyDocument();
+    SalomeApp_Application* anApp = NULL;
+    CORBA::String_var studyName = myStudyDocument->Name();
+    std::string aStudyName = studyName.in();
+    SUIT_Session* aSession = SUIT_Session::session();
+    QPtrList<SUIT_Application> anApplications = aSession->applications();
+    QPtrListIterator<SUIT_Application> anIter (anApplications);
+    while (SUIT_Application* aSUITApp = anIter.current()) {
+      ++anIter;
+      if (SUIT_Study* aSStudy = aSUITApp->activeStudy()) {
+        if (SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(aSStudy)) {
+          if (_PTR(Study) aCStudy = aStudy->studyDS()) {
+            if (aStudyName == aCStudy->Name()) {
+              anApp = dynamic_cast<SalomeApp_Application*>(aSUITApp);
+             break;
+           }
+         }
+       }
+      }
+    }
+    if (!anApp)
+      return;
 
-  VISU::View3D_ptr ViewManager_i::Create3DView(){
-    if(MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
-    return ProcessEvent(new TCreateViewFrameEvent<VISU::View3D_i>(myStudyDocument));
-  }
-
-  
-  VISU::XYPlot_ptr ViewManager_i::CreateXYPlot(){
-    if(MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
-    return ProcessEvent(new TCreateViewFrameEvent<VISU::XYPlot_i>(myStudyDocument));
-  }
+    // 2. Remove corresponding IO from selection
+    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
+    CORBA::String_var anEntry = aSObject->GetID();
 
+    LightApp_SelectionMgr* aSelectionMgr = anApp->selectionMgr();
+    SALOME_ListIO aListIO, aNewListIO;
+    aSelectionMgr->selectedObjects(aListIO);
 
-  class TCreateTableViewEvent: public TCreateViewEvent{
-    Table_ptr myTable;
-  public:
-    TCreateTableViewEvent(SALOMEDS::Study_ptr theStudy,
-                         Table_ptr theTable):
-      TCreateViewEvent(theStudy),
-      myTable(theTable),
-      myResult(VISU::TableView::_nil())
-    {}
-    virtual void Execute(){
-      if ( CheckStudy( myStudyDocument ) ) {
-       VISU::TableView_i* pView = new TableView_i(myStudyDocument);
-       if(pView->Create(myTable) != NULL) 
-         myResult = pView->_this();
+    for (SALOME_ListIteratorOfListIO it (aListIO); it.More(); it.Next()) {
+      if (it.Value()->hasEntry()) {
+        std::string aCurEntry (it.Value()->getEntry());
+        if (aCurEntry != std::string( anEntry.in() ) ) {
+          aNewListIO.Append(it.Value());
+        }
       }
     }
-    typedef VISU::TableView_ptr TResult;
-    TResult myResult;
-  };
 
-  VISU::TableView_ptr ViewManager_i::CreateTableView(VISU::Table_ptr theTable){
-    if(MYDEBUG) MESSAGE("ViewManager_i::CreateTableView");
-    return ProcessEvent(new TCreateTableViewEvent(myStudyDocument,theTable));
+    aSelectionMgr->setSelectedObjects(aNewListIO);
+
+    // 3. Remove Actors
+    ViewManagerList aViewManagerList;
+    anApp->viewManagers(SVTK_Viewer::Type(), aViewManagerList);
+    QPtrListIterator<SUIT_ViewManager> anVMIter (aViewManagerList);
+    for (; anVMIter.current(); ++anVMIter) {
+      SUIT_ViewManager* aViewManager = anVMIter.current();
+      QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
+      for (int i = 0, iEnd = aViews.size(); i < iEnd; i++) {
+       if (SUIT_ViewWindow* aViewWindow = aViews.at(i)) {
+         if (Plot2d_ViewWindow* vw = dynamic_cast<Plot2d_ViewWindow*>(aViewWindow)) {
+            Plot2d_ViewFrame* vf = vw->getViewFrame();
+            QList<Plot2d_Curve> clist;
+            vf->getCurves(clist);
+           for (int i = 0; i < clist.count(); i++) {
+              if (SPlot2d_Curve* cu = dynamic_cast<SPlot2d_Curve*>(clist.at(i))) {
+               if (cu->hasIO() &&
+                   strcmp(cu->getIO()->getEntry(), thePrs->GetEntry()) == 0) {
+                 vf->eraseCurve(cu);
+               }
+             }
+           }
+           vf->Repaint();
+           //jfa tmp:aViewFrame->unHighlightAll();
+          }
+        }
+      }
+}*/
   }
 
-
-  void ViewManager_i::Destroy(View_ptr theView){
-    class TEvent: public SALOME_Event{
-      View_ptr myView;
-    public:
-      TEvent(View_ptr theView):
-       myView(theView)
-      {}
-      virtual void Execute(){
-       if(!CORBA::is_nil(myView)){
-         if(VISU::View_i* pView = dynamic_cast<VISU::View_i*>(VISU::GetServant(myView).in())) {
-           pView->Close();
-           pView->_remove_ref();
+  void DeleteActors (VISU::Prs3d_i* thePrs)
+  {
+    if (!thePrs) return;
+
+    // 1. Find appropriate application (code like in TNewViewManagerEvent::Execute())
+    SALOMEDS::Study_var myStudyDocument = thePrs->GetStudyDocument();
+    SalomeApp_Application* anApp = NULL;
+    CORBA::String_var studyName = myStudyDocument->Name();
+    std::string aStudyName = studyName.in();
+    SUIT_Session* aSession = SUIT_Session::session();
+    QPtrList<SUIT_Application> anApplications = aSession->applications();
+    QPtrListIterator<SUIT_Application> anIter (anApplications);
+    while (SUIT_Application* aSUITApp = anIter.current()) {
+      ++anIter;
+      if (SUIT_Study* aSStudy = aSUITApp->activeStudy()) {
+        if (SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(aSStudy)) {
+          if (_PTR(Study) aCStudy = aStudy->studyDS()) {
+            if (aStudyName == aCStudy->Name()) {
+              anApp = dynamic_cast<SalomeApp_Application*>(aSUITApp);
+             break;
+           }
          }
        }
       }
-    };
-    if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
-    ProcessVoidEvent(new TEvent(theView));
-  }
-
-
-  //===========================================================================
-  View_i::View_i(SALOMEDS::Study_ptr theStudy) {
-    myStudyFrame =  NULL;
-    if(MYDEBUG) MESSAGE("View_i::View_i");
-    CORBA::String_var aName = theStudy->Name();
-    myStudy = CheckStudy(theStudy);
-    if(MYDEBUG) MESSAGE("View_i::View_i - isStudyOpened = "<<myStudy<<"; aName = "<<aName.in());
-  }
-
-  View_i::~View_i(){
-    if(MYDEBUG) MESSAGE("View_i::~View_i");
-  }
+    }
+    if (!anApp)
+      return;
 
-  void View_i::SetBackground(const SALOMEDS::Color& theColor) {}
-  SALOMEDS::Color View_i::GetBackground() { return SALOMEDS::Color();}
-  void View_i::Minimize() {}
-  void View_i::Restore() {}
-  void View_i::Maximize() {}
-  void View_i::EraseAll() {}
-  void View_i::DisplayAll() {}
-  void View_i::Erase(PrsObject_ptr thePrsObj) {}
-  void View_i::Display(PrsObject_ptr thePrsObj) {}
-  void View_i::DisplayOnly(PrsObject_ptr thePrsObj) {}
-  void View_i::Update() {}
-
-  CORBA::Boolean View_i::SavePicture(const char* theFileName) { return false; }
-
-  const char* View_i::GetComment() const { return "";}
-  void View_i::ToStream(std::ostringstream& theStr) {}
-
-  string View_i::GetEntry(){ 
-    SALOMEDS::SObject_var aSObject = myStudy->getStudyDocument()->FindObjectIOR(GetID());
+    // 2. Remove corresponding IO from selection
+    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
     CORBA::String_var anEntry = aSObject->GetID();
-    return string(anEntry.in());
-  }
-
-
-  //===========================================================================
-  XYPlot_i::XYPlot_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {
-    if(MYDEBUG) MESSAGE("XYPlot_i::XYPlot_i");
-  }
-
-  Storable* XYPlot_i::Create(int theNew){
-    if(theNew)
-      myStudyFrame = myStudy->newWindow3d("",VIEW_PLOT2D);
-    else
-      myStudyFrame = myStudy->getActiveStudyFrame();
-    myView = dynamic_cast<Plot2d_ViewFrame*>(myStudyFrame->getRightFrame()->getViewFrame());
-    myView->Repaint();
-    return this;
-  } 
-
-
-  void XYPlot_i::Update() {
-    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::Repaint));
-  }
-
-
-  void XYPlot_i::Close(){
-    myStudyFrame->close();
-  }
-
-  XYPlot_i::~XYPlot_i() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::~XYPlot_i");
-  }
 
+    LightApp_SelectionMgr* aSelectionMgr = anApp->selectionMgr();
+    SALOME_ListIO aListIO, aNewListIO;
+    aSelectionMgr->selectedObjects(aListIO);
 
-  void XYPlot_i::SetTitle(const char* theTitle){
-    ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
-                    (myStudyFrame,&QAD_StudyFrame::setCaption,QString(theTitle)));
-  }
-  char* XYPlot_i::GetTitle() {
-    return CORBA::string_dup(myStudyFrame->title().latin1());
-  }
-
-
-  void XYPlot_i::SetSubTitle(const char* theTitle){
-    ProcessVoidEvent(new TVoidMemFun1ArgEvent<Plot2d_ViewFrame,const QString&,QString>
-                    (myView,&Plot2d_ViewFrame::setTitle,QString(theTitle)));
-  }
-  char* XYPlot_i::GetSubTitle() {
-    return CORBA::string_dup(myView->getTitle());
-  }
-
-
-  void XYPlot_i::SetCurveType(VISU::XYPlot::CurveType theType){
-    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
-                    (myView,&Plot2d_ViewFrame::setCurveType,theType,true));
-  }
-  VISU::XYPlot::CurveType XYPlot_i::GetCurveType(){
-    return (VISU::XYPlot::CurveType)myView->getCurveType();
-  }
-
+    for (SALOME_ListIteratorOfListIO it (aListIO); it.More(); it.Next()) {
+      if (it.Value()->hasEntry()) {
+        std::string aCurEntry (it.Value()->getEntry());
+        if (aCurEntry != std::string( anEntry.in() ) ) {
+          aNewListIO.Append(it.Value());
+        }
+      }
+    }
 
-  void XYPlot_i::SetMarkerSize(CORBA::Long theSize){
-    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
-                    (myView,&Plot2d_ViewFrame::setMarkerSize,theSize,true));
-  }
-  CORBA::Long XYPlot_i::GetMarkerSize(){
-    return myView->getMarkerSize();
+    aSelectionMgr->setSelectedObjects(aNewListIO);
+
+    // 3. Remove Actors
+    ViewManagerList aViewManagerList;
+    anApp->viewManagers(SVTK_Viewer::Type(), aViewManagerList);
+    QPtrListIterator<SUIT_ViewManager> anVMIter (aViewManagerList);
+    for (; anVMIter.current(); ++anVMIter) {
+      SUIT_ViewManager* aViewManager = anVMIter.current();
+      QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
+      for (int i = 0, iEnd = aViews.size(); i < iEnd; i++) {
+       if (SUIT_ViewWindow* aViewWindow = aViews.at(i)) {
+         if (SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)) {
+            VISU_Actor* anActor = NULL;
+            vtkActorCollection *anActColl = vw->getRenderer()->GetActors();
+           anActColl->InitTraversal();
+            vtkActor *aVTKActor = anActColl->GetNextActor();
+           for (; !anActor && aVTKActor; aVTKActor = anActColl->GetNextActor()) {
+              if (VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(aVTKActor)) {
+               if (thePrs == anVISUActor->GetPrs3d()) {
+                 anActor = anVISUActor;
+                }
+              }
+            }
+            if (anActor) {
+             vw->RemoveActor(anActor);
+            }
+          }
+        }
+      }
+    }
   }
-
-
-  class TEnbleGridEvent: public SALOME_Event{
-  public:
-    typedef void (Plot2d_ViewFrame::* TFun)(bool, const int, bool, const int, bool = true);
-    TEnbleGridEvent(Plot2d_ViewFrame* theView, TFun theFun,
-                   CORBA::Boolean theMajor, CORBA::Long theNumMajor, 
-                   CORBA::Boolean theMinor, CORBA::Long theNumMinor):
-      myView(theView), myFun(theFun),
-      myMajor(theMajor), myNumMajor(theNumMajor),
-      myMinor(theMinor), myNumMinor(theNumMinor)
-    {}
-    virtual void Execute(){
-      (myView->*myFun)(myMajor,myNumMajor,myMinor,myNumMinor);
-    }
-  protected:
-    Plot2d_ViewFrame* myView;
-    TFun myFun;
-    CORBA::Boolean myMajor, myNumMajor;
-    CORBA::Boolean myMinor, myNumMinor;
-  };
-
-
-  void XYPlot_i::EnableXGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor, 
-                            CORBA::Boolean theMinor, CORBA::Long theNumMinor)
-  {
-    ProcessVoidEvent(new TEnbleGridEvent(myView,&Plot2d_ViewFrame::setXGrid,
-                                        theMajor,theNumMajor,theMinor,theNumMinor));
-  }
-  void XYPlot_i::EnableYGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor, 
-                            CORBA::Boolean theMinor, CORBA::Long theNumMinor)
-  {
-    ProcessVoidEvent(new TEnbleGridEvent(myView,&Plot2d_ViewFrame::setYGrid,
-                                        theMajor,theNumMajor,theMinor,theNumMinor));
-  }
-
-
-  class TSetScaleModeEvent: public SALOME_Event{
-  public:
-    typedef void (Plot2d_ViewFrame::* TFun)(const int, bool = true);
-    TSetScaleModeEvent(Plot2d_ViewFrame* theView, TFun theFun, int theScaling):
-      myView(theView), myFun(theFun), myScaling(theScaling)
-    {}
-    virtual void Execute(){
-      (myView->*myFun)(myScaling);
-    }
-  protected:
-    Plot2d_ViewFrame* myView;
-    TFun myFun;
-    int myScaling;
-  };
-
-
-  void XYPlot_i::SetHorScaling(VISU::Scaling theScaling){
-    ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setHorScaleMode,
-                                           theScaling == VISU::LOGARITHMIC));
-  }
-  VISU::Scaling XYPlot_i::GetHorScaling(){
-    return (VISU::Scaling)myView->getHorScaleMode();
-  }
-
-
-  void XYPlot_i::SetVerScaling(VISU::Scaling theScaling){
-    ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setVerScaleMode,
-                                           theScaling == VISU::LOGARITHMIC));
-  }
-  VISU::Scaling XYPlot_i::GetVerScaling(){
-    return (VISU::Scaling)myView->getVerScaleMode();
-  }
-
-
-  class TSetTitleEvent: public SALOME_Event{
-  public:
-    typedef void (Plot2d_ViewFrame::* TFun)(bool, const QString&, bool = true);
-    TSetTitleEvent(Plot2d_ViewFrame* theView, TFun theFun, const char* theTitle):
-      myView(theView), myFun(theFun), myTitle(theTitle)
-    {}
-    virtual void Execute(){
-      (myView->*myFun)(true,myTitle);
-    }
-  protected:
-    Plot2d_ViewFrame* myView;
-    TFun myFun;
-    const char* myTitle;
-  };
-
-
-  void XYPlot_i::SetXTitle(const char* theTitle){
-    ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setXTitle,theTitle));
-  }
-  char* XYPlot_i::GetXTitle() {
-    return CORBA::string_dup(myView->getXTitle());
-  }
-
-
-  void XYPlot_i::SetYTitle(const char* theTitle){
-    ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setYTitle,theTitle));
-  }
-  char* XYPlot_i::GetYTitle() {
-    return CORBA::string_dup(myView->getYTitle());
-  }
-
-
-  void XYPlot_i::ShowLegend(CORBA::Boolean theShowing){
-    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,bool,bool>
-                    (myView,&Plot2d_ViewFrame::showLegend,theShowing,true));
-  }
-
-
-  void XYPlot_i::SetBackground(const SALOMEDS::Color& theColor){
-    ProcessVoidEvent(new TSetBackgroundEvent<Plot2d_ViewFrame>(myView,theColor));
-  }
-  SALOMEDS::Color XYPlot_i::GetBackground() {
-    SALOMEDS::Color aColor;
-    aColor.R = myView->backgroundColor().red()/255.0;
-    aColor.G = myView->backgroundColor().green()/255.0;
-    aColor.B = myView->backgroundColor().blue()/255.0;
-    return aColor;
-  }
-
-  void XYPlot_i::Minimize() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
-  }
-
-  void XYPlot_i::Restore() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
-  }
-
-  void XYPlot_i::Maximize() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showMaximized));
-  }
-
-
-  class TXYPlotViewEvent: public SALOME_Event{
-    QAD_Study* myStudy;
-    Plot2d_ViewFrame* myView;
-    PrsObject_ptr myPrsObj;
-    int myDisplaing;
-  public:
-    TXYPlotViewEvent(QAD_Study* theStudy, 
-                    Plot2d_ViewFrame* theView, 
-                    PrsObject_ptr thePrsObj, 
-                    int theDisplaing):
-      myStudy(theStudy),
-      myView(theView), 
-      myPrsObj(thePrsObj), 
-      myDisplaing(theDisplaing)
-    {}
-    virtual void Execute(){
-      // is it Curve ?
-      if(Curve_i* aCurve =  dynamic_cast<Curve_i*>(VISU::GetServant(myPrsObj).in())) {
-       UpdatePlot2d(myView,myDisplaing,aCurve);
-      }
-      // is it Container ?
-      if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(myPrsObj).in())) {
-       int nbCurves = aContainer->GetNbCurves();
-       for ( int i = 1; i <= nbCurves; i++ ) {
-         VISU::Curve_i* aCurve = aContainer->GetCurve( i );
-         if ( aCurve && aCurve->IsValid() ) {
-           UpdatePlot2d(myView,myDisplaing,aCurve);
-         }
-       }
-       myView->Repaint();
-      }
-      // is it Table ?
-      if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(myPrsObj).in())) {
-       SALOMEDS::Study_var aStudy = myStudy->getStudyDocument();
-       SALOMEDS::SObject_var TableSO = aStudy->FindObjectID( aTable->GetEntry() );
-       if ( !TableSO->_is_nil() ) {
-         SALOMEDS::ChildIterator_var Iter = aStudy->NewChildIterator( TableSO );
-         for ( ; Iter->More(); Iter->Next() ) {
-           CORBA::Object_var childObject = VISU::SObjectToObject( Iter->Value() );
-           if( !CORBA::is_nil( childObject ) ) {
-             CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
-             if( !CORBA::is_nil( aCurve ) )
-               UpdatePlot2d(myView,myDisplaing,dynamic_cast<VISU::Curve_i*>( VISU::GetServant(aCurve).in()));
-           }
-         }
-         myView->Repaint();
-       }
-      }
-    }
-  };
-
-
-  void XYPlot_i::Display(PrsObject_ptr thePrsObj) {
-    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplay));
-  }
-
-
-  void XYPlot_i::Erase(PrsObject_ptr thePrsObj) {
-    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eErase));
-  }
-
-
-  void XYPlot_i::DisplayOnly(PrsObject_ptr thePrsObj) {
-    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplayOnly));
-  }
-
-
-  void XYPlot_i::EraseAll() {
-    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::EraseAll));
-  }
-
-
-  void XYPlot_i::FitAll() {
-    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::fitAll));
-  }
-
-
-  CORBA::Boolean XYPlot_i::SavePicture(const char* theFileName) {
-    return ProcessEvent(new TSavePictureEvent(myView->getViewWidget(),theFileName));
-  }
-
-
-  //===========================================================================
-  TableView_i::TableView_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {}
-  Storable* TableView_i::Create(VISU::Table_ptr theTable){
-    if(MYDEBUG) MESSAGE("TableView_i::Create - "<<(!theTable->_is_nil()));
-    if(!theTable->_is_nil()){
-      VISU::Table_i* table = dynamic_cast<VISU::Table_i*>(VISU::GetServant(theTable).in());
-      if(MYDEBUG) MESSAGE("TableView_i::Create - dynamic_cast = "<<table);
-      if(table != NULL) {
-       SALOMEDS::SObject_var aSObject = myStudy->getStudyDocument()->FindObjectID(table->GetObjectEntry());
-       if(!aSObject->_is_nil()) {
-         myView = new SALOMEGUI_TableDlg(QAD_Application::getDesktop(),
-                                         aSObject,
-                                         false, 
-                                         SALOMEGUI_TableDlg::ttAuto, 
-                                         Qt::Vertical);
-         myView->show();
-         return this;
-       }
-      }
-    }
-    return NULL;
-  }
-
-
-  TableView_i::~TableView_i() {
-    if(MYDEBUG) MESSAGE("TableView_i::~TableView_i");
-    delete myView;
-  }
-
-
-  void TableView_i::SetTitle(const char* theTitle){
-    ProcessVoidEvent(new TVoidMemFun1ArgEvent<SALOMEGUI_TableDlg,const QString&,QString>
-                    (myView,&SALOMEGUI_TableDlg::setCaption,QString(theTitle)));
-  }
-
-
-  char* TableView_i::GetTitle() {
-    return CORBA::string_dup(myView->caption().latin1());
-  }
-
-
-  void TableView_i::Close(){
-    myView->close();
-  }
-
-
-  //===========================================================================
-  int View3D_i::myNbViewParams = 0;
-  const string View3D_i::myComment = "VIEW3D";
-  const char* View3D_i::GetComment() const { return myComment.c_str();}
-  QString View3D_i::GenerateViewParamsName() { 
-    return VISU::GenerateName( "ViewParams", ++myNbViewParams ); 
-  }
-
-  View3D_i::View3D_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {
-    if(MYDEBUG) MESSAGE("View3D_i::View3D_i");
-  }
-
-  Storable* View3D_i::Create(int theNew){
-    if(MYDEBUG) MESSAGE("View3D_i::Create");
-    if(theNew)
-      myStudyFrame = myStudy->newWindow3d("",VIEW_VTK);
-    else
-      myStudyFrame = myStudy->getActiveStudyFrame();
-    return this;
-  }
-
-
-  void View3D_i::Update(){
-    class TEvent: public SALOME_Event{
-      QAD_StudyFrame* myStudyFrame;
-    public:
-      TEvent(QAD_StudyFrame* theStudyFrame):
-       myStudyFrame(theStudyFrame)
-      {}
-      virtual void Execute(){
-       VTKViewer_ViewFrame* vf =  GetViewFrame(myStudyFrame);
-       vtkRenderer* Renderer = vf->getRenderer();
-       vtkActorCollection* theActors = Renderer->GetActors();
-       theActors->InitTraversal();
-       while(vtkActor *anAct = theActors->GetNextActor()){
-         if(VISU_Actor* anActor = dynamic_cast<VISU_Actor*>(anAct)){
-           VISU::Prs3d_i* aPrs3d  = anActor->GetPrs3d();
-           if(anActor->GetVisibility() && aPrs3d){
-             aPrs3d->Update();
-             aPrs3d->UpdateActor(anActor);
-           }
-         }
-       }
-       RepaintView(myStudyFrame);
-      }
-    };
-    ProcessVoidEvent(new TEvent(myStudyFrame));
-  }
-
-
-  CORBA::Boolean View3D_i::SavePicture(const char* theFileName) {
-    return ProcessEvent(new TSavePictureEvent(myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget(),theFileName));
-  }
-
-
-  bool View3D_i::SaveViewParams(QAD_StudyFrame* theStudyFrame, const char* theName){
-    QAD_Study* aStudy = theStudyFrame->getStudy();
-    SALOMEDS::Study_var aStudyDoc = aStudy->getStudyDocument();
-    if ( theName ) {
-      SALOMEDS::Study::ListOfSObject_var aList = 
-       aStudyDoc->FindObjectByName(theName,"VISU");
-      SALOMEDS::GenericAttribute_var anAttr;
-      int iEnd = aList->length();
-      for(int i = 0; i < iEnd; i++){
-       SALOMEDS::SObject_var anObj = aList[i];
-       CORBA::String_var aString = anObj->GetID();
-       string anEntry(aString);
-       if(MYDEBUG)  MESSAGE("View3D_i::SaveViewParams - anEntry = "<<anEntry);
-       if(anObj->FindAttribute(anAttr, "AttributeComment")){
-         SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr);
-         aString = aCmnt->Value();
-         string aComm(aString);
-         if(MYDEBUG)  MESSAGE("View3D_i::SaveViewPoint - aComm = "<<aComm);
-         if(aComm.compare(View3D_i::myComment) >= 0){
-           aCmnt->SetValue(ToString(theStudyFrame).c_str());
-           return true;
-         }
-       }
-      }
-    }
-    SALOMEDS::SComponent_var aSComponent = FindOrCreateVisuComponent(aStudyDoc);
-    CORBA::String_var aSComponentEntry = aSComponent->GetID();
-    string anEntry = CreateAttributes(aStudyDoc,aSComponentEntry.in(),"","",theName,"",ToString(theStudyFrame).c_str());
-    return true;
-  }
-  CORBA::Boolean View3D_i::SaveViewParams(const char* theName){
-    return SaveViewParams(myStudyFrame,theName);
-  }
-
-
-  bool View3D_i::RestoreViewParams(QAD_StudyFrame* theStudyFrame, const char* theName){
-    SALOMEDS::Study::ListOfSObject_var aList = 
-      theStudyFrame->getStudy()->getStudyDocument()->FindObjectByName(theName,"VISU");
-    SALOMEDS::GenericAttribute_var anAttr;
-    int iEnd = aList->length();
-    if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - iEnd = "<<iEnd);
-    for(int i = 0; i < iEnd; i++){
-      SALOMEDS::SObject_var anObj = aList[i];
-      CORBA::String_var aString = anObj->GetID();
-      string anEntry(aString);
-      if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - anEntry = "<<anEntry);
-      if(anObj->FindAttribute(anAttr, "AttributeComment")){
-       SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr);
-       aString = aCmnt->Value();
-       QString strIn(aString);
-       Storable::TRestoringMap aMap;
-       Storable::StrToMap(strIn,aMap);
-       if ( Storable::FindValue( aMap,"myComment").compare( View3D_i::myComment.c_str() ) >= 0 ) {
-         if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - aComm = "<<strIn);
-         Restore(theStudyFrame,aMap);
-         return true;
-       }
-      }
-    }
-    return false;
-  }
-
-
-  class TRestoreViewParamsEvent: public SALOME_Event{
-    QAD_StudyFrame* myStudyFrame;
-    const char* myName;
-  public:
-    TRestoreViewParamsEvent(QAD_StudyFrame* theStudyFrame,
-                           const char* theName):
-      myStudyFrame(theStudyFrame),
-      myName(theName)
-    {}
-    virtual void Execute(){
-      myResult = View3D_i::RestoreViewParams(myStudyFrame,myName);
-    }
-    typedef CORBA::Boolean TResult;
-    TResult myResult;
-  };
-
-  CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
-    return ProcessEvent(new TRestoreViewParamsEvent(myStudyFrame,theName));
-  }
-
-
-  void View3D_i::Restore(QAD_StudyFrame* theStudyFrame, const Storable::TRestoringMap& theMap){
-    SALOMEDS::Color aColor;  
-    aColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble();
-    aColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble();
-    aColor.B = VISU::Storable::FindValue(theMap,"myColor.B").toDouble();
-    
-    double aPosition[3];
-    aPosition[0] = VISU::Storable::FindValue(theMap,"myPosition[0]").toDouble();
-    aPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble();
-    aPosition[2] = VISU::Storable::FindValue(theMap,"myPosition[2]").toDouble();
-    
-    double aFocalPnt[3];
-    aFocalPnt[0] = VISU::Storable::FindValue(theMap,"myFocalPnt[0]").toDouble();
-    aFocalPnt[1] = VISU::Storable::FindValue(theMap,"myFocalPnt[1]").toDouble();
-    aFocalPnt[2] = VISU::Storable::FindValue(theMap,"myFocalPnt[2]").toDouble();
-    
-    double aViewUp[3];
-    aViewUp[0] = VISU::Storable::FindValue(theMap,"myViewUp[0]").toDouble();
-    aViewUp[1] = VISU::Storable::FindValue(theMap,"myViewUp[1]").toDouble();
-    aViewUp[2] = VISU::Storable::FindValue(theMap,"myViewUp[2]").toDouble();
-    
-    double aParallelScale = VISU::Storable::FindValue(theMap,"myParallelScale").toDouble();
-     
-    double aScaleFactor[3];
-    aScaleFactor[0] = VISU::Storable::FindValue(theMap,"myScaleFactor[0]").toDouble();
-    aScaleFactor[1] = VISU::Storable::FindValue(theMap,"myScaleFactor[1]").toDouble();
-    aScaleFactor[2] = VISU::Storable::FindValue(theMap,"myScaleFactor[2]").toDouble();
-    
-    SetBackground(theStudyFrame,aColor);
-    SetPointOfView(theStudyFrame,aPosition);
-    SetViewUp(theStudyFrame,aViewUp);
-    SetFocalPoint(theStudyFrame,aFocalPnt);
-    SetParallelScale(theStudyFrame,aParallelScale);
-    ScaleView(theStudyFrame,VISU::View3D::XAxis,aScaleFactor[0]);
-    ScaleView(theStudyFrame,VISU::View3D::YAxis,aScaleFactor[1]);
-    ScaleView(theStudyFrame,VISU::View3D::ZAxis,aScaleFactor[2]);
-  }
-    
-
-  string View3D_i::ToString(QAD_StudyFrame* theStudyFrame){
-    ostringstream strOut;
-    Storable::DataToStream( strOut, "myComment", myComment.c_str() );
-    ToStream(theStudyFrame,strOut);
-    strOut<<ends;
-    if(MYDEBUG) MESSAGE("View3D_i::ToString - "<<strOut.str());
-    return strOut.str(); 
-  }
-  void View3D_i::ToStream(QAD_StudyFrame* theStudyFrame, std::ostringstream& theStr) {
-    Storable::DataToStream(theStr,"myType",VISU::TVIEW3D);
-    
-    float backint[3];  
-    GetRenderer(theStudyFrame)->GetBackground(backint);
-    Storable::DataToStream(theStr,"myColor.R",backint[0]);
-    Storable::DataToStream(theStr,"myColor.G",backint[1]);
-    Storable::DataToStream(theStr,"myColor.B",backint[2]);
-    
-    double aPosition[3];
-    GetPointOfView(theStudyFrame,aPosition);
-    Storable::DataToStream(theStr,"myPosition[0]",aPosition[0]);
-    Storable::DataToStream(theStr,"myPosition[1]",aPosition[1]);
-    Storable::DataToStream(theStr,"myPosition[2]",aPosition[2]);
-    
-    double aFocalPnt[3];
-    GetFocalPoint(theStudyFrame,aFocalPnt);
-    Storable::DataToStream(theStr,"myFocalPnt[0]",aFocalPnt[0]);
-    Storable::DataToStream(theStr,"myFocalPnt[1]",aFocalPnt[1]);
-    Storable::DataToStream(theStr,"myFocalPnt[2]",aFocalPnt[2]);
-    
-    double aViewUp[3];
-    GetCamera(theStudyFrame)->GetViewUp(aViewUp);
-    Storable::DataToStream(theStr,"myViewUp[0]",aViewUp[0]);
-    Storable::DataToStream(theStr,"myViewUp[1]",aViewUp[1]);
-    Storable::DataToStream(theStr,"myViewUp[2]",aViewUp[2]);
-    
-    Storable::DataToStream(theStr,"myParallelScale",GetParallelScale(theStudyFrame));
-    
-    double aScaleFactor[3];
-    GetViewFrame(theStudyFrame)->GetScale(aScaleFactor);
-    Storable::DataToStream(theStr,"myScaleFactor[0]",aScaleFactor[0]);
-    Storable::DataToStream(theStr,"myScaleFactor[1]",aScaleFactor[1]);
-    Storable::DataToStream(theStr,"myScaleFactor[2]",aScaleFactor[2]);
-  }
-  void View3D_i::ToStream(std::ostringstream& theStr) {
-    ToStream(myStudyFrame,theStr);
-  }
-
-
-  void View3D_i::Close(){
-    myStudyFrame->close();
-  }
-
-  View3D_i::~View3D_i() {
-    if(MYDEBUG) MESSAGE("View3D_i::~View3D_i");
-  }
-
-  //-------------------- View interface --------------------
-
-  void View_i::ShowPart( VISU::View::ViewRepresentation ViewRepr, CORBA::Boolean state  ) {
-    ProcessVoidEvent( new TSetViewRepresentation( this, ViewRepr, state ) );
-    Update();
-  }
-
-  CORBA::Boolean View_i::IsPartShown( VISU::View::ViewRepresentation Part )
-  {
-    return ProcessEvent( new TGetViewRepresentation( this, Part ) );
-  }
-
-  void View_i::SetViewWidth(CORBA::Long Width){
-    ProcessVoidEvent( new TSetViewWidthHeight( this, Width, true ) );
-     }
-  
-  void View_i::SetViewHeight(CORBA::Long Height){ 
-    ProcessVoidEvent( new TSetViewWidthHeight( this, Height, false ) );
-     }
-
-  CORBA::Long View_i::GetViewWidth() 
-  {
-    return ProcessEvent( new TGetViewWidthHeight( this, true ) );
-  }
-
-  CORBA::Long View_i::GetViewHeight()
-  {
-    return ProcessEvent( new TGetViewWidthHeight( this, false ) );
-  }
-
-  void View_i::SetViewPositionHorizontal( VISU::View::ViewPosition ViewPosHor ){
-    ProcessVoidEvent( new TSetViewPositionHorizontal( this, ViewPosHor ) );
-  }
-
-  void View_i::SetViewPositionVertical( VISU::View::ViewPosition ViewPosVer ){
-    ProcessVoidEvent( new TSetViewPositionVertical( this, ViewPosVer ) );
-  }
-
-  void View_i::SetRelativePosition( CORBA::Double x, CORBA::Double y )
-  {
-    ProcessVoidEvent( new TSetRelativePosition( this, x, y ) );
-  }
-
-  void View_i::SetRelativeSize( CORBA::Double x, CORBA::Double y )
-  {
-    ProcessVoidEvent( new TSetRelativeSize( this, x, y ) );
-  }
-
-
-
-
-  void View3D_i::SetTitle(const char* theTitle){
-    ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
-                    (myStudyFrame,&QAD_StudyFrame::setTitle,QString(theTitle)));
-  }
-  char* View3D_i::GetTitle() {
-    return CORBA::string_dup(myStudyFrame->title().latin1());
-  }
-
-
-  void View3D_i::SetBackground(QAD_StudyFrame* theStudyFrame, const SALOMEDS::Color& theColor) {
-    int aColor[3];
-    aColor[0] = int(255.0*theColor.R);
-    aColor[1] = int(255.0*theColor.G);
-    aColor[2] = int(255.0*theColor.B);
-    QColor aNewColor(aColor[0],aColor[1],aColor[2]);
-    GetViewFrame(theStudyFrame)->setBackgroundColor(aNewColor);
-  }
-  void View3D_i::SetBackground(const SALOMEDS::Color& theColor) {
-    ProcessVoidEvent(new TSetBackgroundEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),theColor));
-  }
-
-
-  SALOMEDS::Color View3D_i::GetBackground(QAD_StudyFrame* theStudyFrame) { 
-    SALOMEDS::Color aColor;
-    float backint[3];  
-    GetRenderer(theStudyFrame)->GetBackground(backint);
-    aColor.R = backint[0];  aColor.G = backint[1];  aColor.B = backint[2];
-    return aColor;
-  }
-  SALOMEDS::Color View3D_i::GetBackground() { 
-    return GetBackground(myStudyFrame);
-  }
-
-
-  void View3D_i::Minimize() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
-  }
-  void View3D_i::Restore() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
-  }
-  void View3D_i::Maximize() {
-    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showMaximized));
-  }
-
-
-  //===========================================================================
-  class TUpdateViewerEvent: public SALOME_Event{
-    QAD_StudyFrame* myStudyFrame;
-    Prs3d_i* myPrs3d;
-    int myDisplaing;
-  public:
-    TUpdateViewerEvent(QAD_StudyFrame* theStudyFrame,
-                      Prs3d_i* thePrs3d,
-                      int theDisplaing):
-      myStudyFrame(theStudyFrame),
-      myPrs3d(thePrs3d),
-      myDisplaing(theDisplaing)
-    {}
-    virtual void Execute(){
-      UpdateViewer(myStudyFrame,myDisplaing,myPrs3d);
-    }
-  };
-
-  void View3D_i::EraseAll() {
-    if(MYDEBUG) MESSAGE("View3D_i::EraseAll");
-    ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,eEraseAll));
-  }
-
-  void View3D_i::DisplayAll() {
-    if(MYDEBUG) MESSAGE("View3D_i::DisplayAll");
-    ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,eDisplayAll));
-  }
-
-  void View3D_i::Erase(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::Erase");
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
-      ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eErase));
-    }
-  }
-
-  void View3D_i::Display(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::Display"); 
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
-      ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eDisplay));
-    }
-  }
-
-  void View3D_i::DisplayOnly(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::DisplayOnly");
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
-      ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eDisplayOnly));
-    }
-  }
-
-  //-------------------- View3D interface --------------------
-  void View3D_i::FitAll() { 
-    ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewFitAll));
-    Update();
-  }
-
-
-  void View3D_i::SetView(VISU::View3D::ViewType theType) {
-    switch(theType){
-    case VISU::View3D::FRONT : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewFront));
-      break;
-    case VISU::View3D::BACK : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewBack));
-      break;
-    case VISU::View3D::LEFT : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewLeft));
-      break;
-    case VISU::View3D::RIGHT : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewRight));
-      break;
-    case VISU::View3D::TOP : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewTop));
-      break;
-    case VISU::View3D::BOTTOM : 
-      ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewBottom));
-      break;
-    }
-    Update();
-  }
-
-
-  class TSet3DViewParamEvent: public SALOME_Event{
-  public:
-    typedef void (*TFun)(QAD_StudyFrame* theStudyFrame, const CORBA::Double theParam[3]);
-    TSet3DViewParamEvent(TFun theFun,
-                        QAD_StudyFrame* theStudyFrame,
-                        const CORBA::Double theParam[3]):
-      myFun(theFun),
-      myStudyFrame(theStudyFrame),
-      myParam(theParam)
-    {}
-    virtual void Execute(){
-      myFun(myStudyFrame,myParam);
-    }
-  private:
-    TFun myFun;
-    QAD_StudyFrame* myStudyFrame;
-    const CORBA::Double* myParam;
-  };
-
-
-  void View3D_i::SetPointOfView(QAD_StudyFrame* theStudyFrame, const CORBA::Double thePosition[3]) {
-    GetCamera(theStudyFrame)->SetPosition(thePosition);
-  }
-  void View3D_i::SetPointOfView(const VISU::View3D::XYZ thePosition) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetPointOfView");
-    ProcessVoidEvent(new TSet3DViewParamEvent(&SetPointOfView,myStudyFrame,thePosition));
-  }
-
-
-  void View3D_i::GetPointOfView(QAD_StudyFrame* theStudyFrame, CORBA::Double thePosition[3]) { 
-    GetCamera(theStudyFrame)->GetPosition(thePosition);
-  }
-  VISU::View3D::XYZ_slice* View3D_i::GetPointOfView() { 
-    if(MYDEBUG) MESSAGE("View3D_i::GetPointOfView");
-    CORBA::Double aPosition[3];
-    GetPointOfView(myStudyFrame,aPosition);
-    return VISU::View3D::XYZ_dup(aPosition);
-  }
-
-
-  void View3D_i::SetViewUp(QAD_StudyFrame* theStudyFrame, const CORBA::Double theViewUp[3]) {
-    GetCamera(theStudyFrame)->SetViewUp(theViewUp);
-  }
-  void View3D_i::SetViewUp(const VISU::View3D::XYZ theViewUp) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetViewUp");
-    ProcessVoidEvent(new TSet3DViewParamEvent(&SetViewUp,myStudyFrame,theViewUp));
-  }
-
-
-  void View3D_i::GetViewUp(QAD_StudyFrame* theStudyFrame, CORBA::Double theViewUp[3]) { 
-    GetCamera(theStudyFrame)->GetViewUp(theViewUp);
-  }
-  VISU::View3D::XYZ_slice* View3D_i::GetViewUp() { 
-    if(MYDEBUG) MESSAGE("View3D_i::GetViewUp");
-    CORBA::Double aViewUp[3];
-    GetCamera(myStudyFrame)->GetViewUp(aViewUp);
-    return VISU::View3D::XYZ_dup(aViewUp);
-  }
-
-
-  void View3D_i::SetFocalPoint(QAD_StudyFrame* theStudyFrame, const CORBA::Double theFocalPnt[3]) {
-    GetCamera(theStudyFrame)->SetFocalPoint(theFocalPnt);
-  }
-  void View3D_i::SetFocalPoint(const VISU::View3D::XYZ theCoord) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetFocalPoint");
-    ProcessVoidEvent(new TSet3DViewParamEvent(&SetFocalPoint,myStudyFrame,theCoord));
-  }
-
-
-  void View3D_i::GetFocalPoint(QAD_StudyFrame* theStudyFrame, CORBA::Double theFocalPnt[3]) { 
-    GetCamera(theStudyFrame)->GetFocalPoint(theFocalPnt);
-  }
-  VISU::View3D::XYZ_slice* View3D_i::GetFocalPoint() { 
-    if(MYDEBUG) MESSAGE("View3D_i::GetFocalPoint");
-    CORBA::Double aFocalPnt[3];
-    GetFocalPoint(myStudyFrame,aFocalPnt);
-    return VISU::View3D::XYZ_dup(aFocalPnt);
-  }
-
-
-  class TSetViewParamEvent: public SALOME_Event{
-  public:
-    typedef void (*TFun)(QAD_StudyFrame* theStudyFrame, CORBA::Double theParam);
-    TSetViewParamEvent(TFun theFun,
-                      QAD_StudyFrame* theStudyFrame,
-                      CORBA::Double theParam):
-      myFun(theFun),
-      myStudyFrame(theStudyFrame),
-      myParam(theParam)
-    {}
-    virtual void Execute(){
-      myFun(myStudyFrame,myParam);
-    }
-  private:
-    TFun myFun;
-    QAD_StudyFrame* myStudyFrame;
-    CORBA::Double myParam;
-  };
-
-
-  void View3D_i::SetParallelScale(QAD_StudyFrame* theStudyFrame, CORBA::Double theScale) {
-    GetCamera(theStudyFrame)->SetParallelScale(theScale);
-  }
-  void View3D_i::SetParallelScale(CORBA::Double theScale) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetParallelScale");
-    ProcessVoidEvent(new TSetViewParamEvent(&SetParallelScale,myStudyFrame,theScale));
-  }
-
-
-  CORBA::Double View3D_i::GetParallelScale(QAD_StudyFrame* theStudyFrame) { 
-    return GetCamera(theStudyFrame)->GetParallelScale();
-  }
-  CORBA::Double View3D_i::GetParallelScale() { 
-    if(MYDEBUG) MESSAGE("View3D_i::GetParallelScale");
-    return GetParallelScale(myStudyFrame);
-  }
-
-  void View3D_i::ScaleView(QAD_StudyFrame* theStudyFrame, VISU::View3D::Axis theAxis, CORBA::Double theParam) {
-    VTKViewer_ViewFrame* aViewFrame =  GetViewFrame(theStudyFrame);
-    double aScaleFactor[3];
-    aViewFrame->GetScale(aScaleFactor);
-    aScaleFactor[theAxis] = theParam;
-    aViewFrame->SetScale(aScaleFactor);
-  }
-  
-  void SetScaleView(QAD_StudyFrame* theStudyFrame, const CORBA::Double theScale[3]){
-    double aScale[3] = {theScale[0], theScale[1], theScale[2]};
-    GetViewFrame(theStudyFrame)->SetScale(aScale);
-  }
-  void View3D_i::ScaleView(VISU::View3D::Axis theAxis, CORBA::Double theParam) {
-    if(MYDEBUG) MESSAGE("View3D_i::ScaleView");
-    double aScale[3];
-    GetViewFrame(myStudyFrame)->GetScale(aScale);
-    aScale[theAxis] = theParam;
-    ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myStudyFrame,aScale));
-  }
-  void View3D_i::RemoveScale() {
-    if(MYDEBUG) MESSAGE("View3D_i::RemoveScale");
-    double aScale[3] = {1.0, 1.0, 1.0};
-    ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myStudyFrame,aScale));
-  }
-  //===========================================================================
-
-
-  VISU_Actor* GetActor(VISU::Prs3d_i* thePrs3d, VTKViewer_ViewFrame* theVTKFrame){
-    vtkActorCollection *anActColl = theVTKFrame->getRenderer()->GetActors();
-    anActColl->InitTraversal();
-    while(vtkActor *anActor = anActColl->GetNextActor())
-      if(VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
-       if(thePrs3d == anVISUActor->GetPrs3d())
-         return anVISUActor->GetParent();
-    return NULL;
-  }
-
-
-  void DeletePrs3d(Prs3d_ptr thePrs3d){
-    if(Prs3d_i* aPrs3d = dynamic_cast<Prs3d_i*>(GetServant(thePrs3d).in())){
-      SALOMEDS::SObject_var aSObject = aPrs3d->GetSObject();
-      SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
-      if(QAD_Desktop* aDesktop = QAD_Application::getDesktop()){
-       if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument)){
-         aStudy->unHighlightAll();
-         int aNbStudyFrames = aStudy->getStudyFramesCount();
-         for(int aFrameId = 0; aFrameId < aNbStudyFrames; aFrameId++){
-           if(QAD_StudyFrame* aFrame = aStudy->getStudyFrame(aFrameId)){
-             QAD_ViewFrame* aViewFrame = aFrame->getRightFrame()->getViewFrame();
-             if(VTKViewer_ViewFrame* aVTKFrame = dynamic_cast<VTKViewer_ViewFrame*>(aViewFrame)){
-               if(VISU_Actor* anActor = VISU::GetActor(aPrs3d,aVTKFrame)){
-                 aVTKFrame->RemoveActor(anActor);
-                 anActor->Delete();
-               }
-               aVTKFrame->unHighlightAll();
-             }
-           }
-         }
-
-         aPrs3d->RemoveFromStudy(); 
-         aPrs3d->Destroy(); 
-
-         aStudy->updateObjBrowser(); //update Object browser
-       }
-      }
-    }
-  }
-
-
-  void VISU_Gen_i::DeleteResult(Result_ptr theResult)
-  {
-    class TEvent: public SALOME_Event{
-      Result_ptr myResult;
-    public:
-      TEvent(Result_ptr theResult): myResult(theResult) {}
-      virtual void Execute(){
-       if(Result_i* aResult = dynamic_cast<Result_i*>(GetServant(myResult).in())){
-         SALOMEDS::SObject_var aSObject = aResult->GetSObject();
-         SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
-         SALOMEDS::ChildIterator_var aChildIter = aStudyDocument->NewChildIterator(aSObject);
-         for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
-           SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
-           CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
-           if(CORBA::is_nil(aChildObj)) continue;
-           VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aChildObj);
-           if(CORBA::is_nil(aPrs3d)) continue;
-           VISU::DeletePrs3d(aPrs3d);
-         }
-
-         aResult->RemoveFromStudy(); 
-         aResult->Destroy(); 
-
-         if(QAD_Desktop* aDesktop = QAD_Application::getDesktop())
-           if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument))
-             aStudy->updateObjBrowser(); //update Object browser
-       }
-      }
-    };
-
-    ProcessVoidEvent(new TEvent(theResult));
-  }
-
-
-  void VISU_Gen_i::DeletePrs3d(Prs3d_ptr thePrs3d)
-  {
-    class TEvent: public SALOME_Event{
-      Prs3d_ptr myPrs3d;
-    public:
-      TEvent(Prs3d_ptr thePrs3d): myPrs3d(thePrs3d) {}
-      virtual void Execute(){
-       VISU::DeletePrs3d(myPrs3d);
-      }
-    };
-
-    ProcessVoidEvent(new TEvent(thePrs3d));
-  }
-
 }