Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/visu.git] / src / VISU_I / VISU_ViewManager_i.cc
index 1035f51fbacc903f6230498966482ff7f912a986..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_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 "QAD_Application.h"
-#include "QAD_Desktop.h"
-#include "QAD_Tools.h"
-#include "QAD_Study.h"
-#include "QAD_RightFrame.h"
-#include "QAD_StudyFrame.h"
+#include "SUIT_Tools.h"
+#include "SUIT_Session.h"
+#include "SUIT_ViewWindow.h"
+#include "SUIT_ViewManager.h"
 
-#include "VTKViewer_ViewFrame.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 <vtkTransformPolyDataFilter.h>
-#include <vtkDataSetMapper.h>
-#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;
-static int MYDELAY = 1;
+namespace VISU {
+
+  struct TNewViewManagerEvent: public SALOME_Event
+  {
+    int myStudyId;
+    typedef SalomeApp_Application* TResult;
+    TResult myResult;
+
+    TNewViewManagerEvent (const int theStudyId):
+      myStudyId(theStudyId),
+      myResult(NULL)
+    {}
+
+    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);
+      }
+    }
+  };
 
-namespace VISU{
   //===========================================================================
-  VTKViewer_ViewFrame* GetViewFrame(QAD_StudyFrame* theStudyFrame){
-    return dynamic_cast<VTKViewer_ViewFrame*>(theStudyFrame->getRightFrame()->getViewFrame());
+  ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy)
+  {
+    if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i - "<<this);
+
+    //CORBA::String_var aStudyName = theStudy->Name();
+    //myApplication = ProcessEvent(new TNewViewManagerEvent(aStudyName.in()));
+    int aStudyID = theStudy->StudyId();
+    myApplication = ProcessEvent(new TNewViewManagerEvent(aStudyID));
+  }
+
+
+  ViewManager_i::~ViewManager_i()
+  {
+    if(MYDEBUG) MESSAGE("ViewManager_i::~ViewManager_i - "<<this);
+  }
+
+
+  struct TCurrentViewEvent: public SALOME_Event
+  {
+    SalomeApp_Application* myApplication;
+    typedef VISU::View_ptr TResult;
+    TResult myResult;
+
+    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();
+    }
+  };
+
+  VISU::View_ptr ViewManager_i::GetCurrentView(){
+    return ProcessEvent(new TCurrentViewEvent(myApplication));
+  }
+
+
+  template<class TViewFrame>
+  struct TCreateViewFrameEvent: public SALOME_Event
+  {
+    SalomeApp_Application* myApplication;
+    typedef typename TViewFrame::TInterface TInterface;
+    typedef typename TInterface::_ptr_type TResult;
+    TResult myResult;
+
+    TCreateViewFrameEvent (SalomeApp_Application* theApplication):
+      myApplication(theApplication),
+      myResult(TInterface::_nil())
+    {}
+
+    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
+       }
+      }
+    }
+  };
+
+
+  VISU::View3D_ptr ViewManager_i::Create3DView()
+  {
+    if (MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
+    return ProcessEvent(new TCreateViewFrameEvent<View3D_i>(myApplication));
   }
-  vtkRenderer* GetRenderer(QAD_StudyFrame* theStudyFrame){
-    return GetViewFrame(theStudyFrame)->getRenderer();
+
+  VISU::XYPlot_ptr ViewManager_i::CreateXYPlot()
+  {
+    if (MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
+    return ProcessEvent(new TCreateViewFrameEvent<XYPlot_i>(myApplication));
   }
-  vtkCamera* GetCamera(QAD_StudyFrame* theStudyFrame){
-    return GetRenderer(theStudyFrame)->GetActiveCamera();
+
+  class TCreateViewEvent: public SALOME_Event
+  {
+  public:
+    TCreateViewEvent (SalomeApp_Application* theApplication)
+      : myApplication(theApplication)
+    {}
+  protected:
+    SalomeApp_Application* myApplication;
+  };
+
+  class TCreateTableViewFrameEvent: public TCreateViewEvent
+  {
+    Table_ptr myTable;
+  public:
+    TCreateTableViewFrameEvent (SalomeApp_Application* theApplication,
+                               Table_ptr theTable):
+      TCreateViewEvent(theApplication),
+      myTable(theTable),
+      myResult(VISU::TableView::_nil())
+    {}
+
+    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));
+  }
+
+  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();
+         }
+       }
+      }
+    };
+
+    if (MYDEBUG) MESSAGE("ViewManager_i::Destroy - " << theView->_is_nil());
+    ProcessVoidEvent(new TEvent(theView));
   }
-  void RepaintView(QAD_StudyFrame* theStudyFrame){
-    GetRenderer(theStudyFrame)->ResetCameraClippingRange();
-    GetViewFrame(theStudyFrame)->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;
+  }
+
+  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();
@@ -101,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
@@ -114,1123 +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("Null actor is created");
+      }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( strdup( theCurve->GetHorTitle().c_str() ) );
-         clist.at( i )->setVerTitle( strdup( theCurve->GetVerTitle().c_str() ) );
-         clist.at( i )->setHorUnits( strdup( theCurve->GetHorUnits().c_str() ) );
-         clist.at( i )->setVerUnits( strdup( theCurve->GetVerUnits().c_str() ) );
-         /* - DATA NOT UPDATED */
-         if ( !clist.at( i )->isAutoAssign() ) {
-           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.) ) );
-           clist.at( i )->setAutoAssign( theCurve->IsAuto() );
+    } 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;
+         }
+       }
+       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() );
          }
-         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 );
-      }
-    }
-    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( strdup( theCurve->GetHorTitle().c_str() ) );
-         clist.at( i )->setVerTitle( strdup( theCurve->GetVerTitle().c_str() ) );
-         clist.at( i )->setHorUnits( strdup( theCurve->GetHorUnits().c_str() ) );
-         clist.at( i )->setVerUnits( strdup( theCurve->GetVerUnits().c_str() ) );
-         /* - DATA NOT UPDATED */
-         if ( !clist.at( i )->isAutoAssign() ) {
-           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.) ) );
-           clist.at( i )->setAutoAssign( theCurve->IsAuto() );
+    } 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);
          }
-         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 );
-      }
-    }
-  }
-  //===========================================================================
-  /*
-  #include <qthread.h> 
-  class TViewManager: public QThread{
-  public:
-    TViewManager(SALOMEDS::Study_ptr theStudy) : myStudyDocument(theStudy) {};
-    virtual void run(){
-      qApp->lock();
-      QAD_Desktop* aDesktop = QAD_Application::getDesktop();
-      QAD_Study* aStudy = aDesktop->findStudy(myStudyDocument);
-      if(!aStudy){
-       CORBA::String_var aName = myStudyDocument->Name();
-       aFileInfo.setFile(aName.in());
-       aStudy = aDesktop->loadStudy(aFileInfo.baseName());
-      }
-      qApp->unlock();
-    }
-    SALOMEDS::Study_ptr myStudyDocument;
-  };
-  */
-  ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy) {
-    if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyDocument = SALOMEDS::Study::_duplicate(theStudy);
-    //TViewManager* aTViewManager = new TViewManager(theStudy);
-    //aTViewManager->start();
-    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
-    QAD_Study* aStudy = aDesktop->findStudy(theStudy);
-    if(!aStudy){
-       CORBA::String_var aName = theStudy->Name();
-       aFileInfo.setFile(aName.in());
-       aStudy = aDesktop->loadStudy(aFileInfo.baseName());
-       if (!aStudy)
-         MESSAGE("ViewManager_i::ERROR: Can't load study");
     }
   }
 
-
-  VISU::View3D_ptr ViewManager_i::Create3DView(){
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if(MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
-    VISU::View3D_i* pView = new View3D_i(myStudyDocument);
-    if(pView->Create(1) != NULL) 
-      return VISU::View3D::_duplicate(pView->_this());
-    return VISU::View3D::_nil();
+  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;
   }
 
-
-  VISU::View_ptr ViewManager_i::GetCurrentView(){
-    Mutex mt(myMutex,qApp,MYDELAY);
-    QAD_Study* Study = QAD_Application::getDesktop()->findStudy( myStudyDocument );
-    if(MYDEBUG) MESSAGE("ViewManager_i::GetCurrent3DView - Study = "<<Study);
-    QAD_StudyFrame* StudyFrame;
-    if ( Study && ( StudyFrame = Study->getActiveStudyFrame() ) ) {
-      if(MYDEBUG) 
-       MESSAGE("ViewManager_i::GetCurrent3DView - TypeView = "<<StudyFrame->getTypeView());
-      if ( StudyFrame->getTypeView() == VIEW_VTK ) {
-       VISU::View3D_i* pView = new View3D_i(myStudyDocument);
-       if(pView->Create(0) != NULL) 
-         return VISU::View3D::_duplicate(pView->_this());
+  struct TDeleteActorsEvent: public SALOME_Event
+  {
+    VISU::Curve_i* myPrs;
+
+    TDeleteActorsEvent (VISU::Curve_i* thePrs):
+      myPrs(thePrs)
+    {}
+
+    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;
+             }
+           }
+         }
+        }
       }
-      else if ( StudyFrame->getTypeView() == VIEW_PLOT2D ) {
-       VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
-       if(pView->Create(0) != NULL) 
-         return VISU::XYPlot::_duplicate(pView->_this());
+      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());
+          }
+        }
       }
-    }
-    return VISU::View::_nil();
-  }
-
-
-  VISU::XYPlot_ptr ViewManager_i::CreateXYPlot(){
-    if(MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
-    if(pView->Create(1) != NULL) 
-      return VISU::XYPlot::_duplicate(pView->_this());
-    return VISU::XYPlot::_nil();
-  }
-
-
-  VISU::TableView_ptr ViewManager_i::CreateTableView(VISU::Table_ptr theTable){
-    if(MYDEBUG) MESSAGE("ViewManager_i::CreateTableView");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    VISU::TableView_i* pView = new TableView_i(myStudyDocument);
-    if(pView->Create(VISU::Table::_duplicate(theTable)) != NULL) 
-      return VISU::TableView::_duplicate(pView->_this());
-    return VISU::TableView::_nil();
-  }
-
 
-  void ViewManager_i::Destroy(View_ptr theView){
-    if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
-    if(theView->_is_nil()) return;
-    CORBA::Object_var aView = VISU::View::_narrow(theView);
-    if(!CORBA::is_nil(aView)){
-      if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - VISU::View"<<(!CORBA::is_nil(aView)));
-      VISU::View_i* pView = dynamic_cast<VISU::View_i*>(VISU::GetServant(aView));
-      if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - dynamic_cast"<<pView);
-      if(pView) {
-       pView->Close();
-       pView->_remove_ref();
+      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();
+            }
+          }
+        }
       }
-      //if(pView) delete pView;
-      return;
-    }
-  }
-
-
-  void ViewManager_i::ProcessEvents() {
-    while (true) {
-      qApp->lock();
-      qApp->syncX();
-      qApp->flushX(); 
-      qApp->processEvents();
-      qApp->unlock();
-      //sleep(1);
     }
-  }
-
+  };
 
-  //===========================================================================
-  View_i::View_i(SALOMEDS::Study_ptr theStudy) {
-    if(MYDEBUG) MESSAGE("View_i::View_i");
-    CORBA::String_var aName = theStudy->Name();
-    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
-    myStudy = aDesktop->findStudy(theStudy);
-    if(!myStudy){
-      aFileInfo.setFile(aName.in());
-      myStudy = aDesktop->loadStudy(aFileInfo.baseName());
+  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(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) {}
-
-  const char* 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();
-    string aString(anEntry);
-    if(MYDEBUG) MESSAGE("Result_i::GetEntry - "<<aString);
-    return aString.c_str();
-  }
-  //===========================================================================
-  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(MYDEBUG) MESSAGE("XYPlot_i::Create");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if(theNew)
-      myStudyFrame = myStudy->newWindow3d("",VIEW_PLOT2D);
-    else
-      myStudyFrame = myStudy->getActiveStudyFrame();
-    myView = dynamic_cast<Plot2d_ViewFrame*>(myStudyFrame->getRightFrame()->getViewFrame());
-    Update();
-    return this;
-  } 
-  void XYPlot_i::Update() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Update");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = (const char*)(myStudyFrame->title());
-    myView->Repaint();
-  }
-  void XYPlot_i::Close(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::Close");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->close();
-  }
-  XYPlot_i::~XYPlot_i() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::~XYPlot_i");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->close();
-  }
-  void XYPlot_i::SetTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = theTitle;
-    myStudyFrame->setCaption(myName.c_str());
-  }
-  char* XYPlot_i::GetTitle() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetTitle");
-    Mutex mt(myMutex,qApp);
-    myName = (const char*)(myStudyFrame->title());
-    return CORBA::string_dup(myName.c_str());
-  }
-
-  void XYPlot_i::SetSubTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetSubTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setTitle(theTitle);
-  }
-  char* XYPlot_i::GetSubTitle() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetSubTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    return CORBA::string_dup(myView->getTitle());
-  }
-
-  void XYPlot_i::SetCurveType(VISU::XYPlot::CurveType theType){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetCurveType");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setCurveType(theType);
-  }
-  VISU::XYPlot::CurveType XYPlot_i::GetCurveType(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetCurveType");
-    Mutex mt(myMutex,qApp);
-    return (VISU::XYPlot::CurveType)myView->getCurveType();
-  }
-
-  void XYPlot_i::SetMarkerSize(CORBA::Long theSize){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetMarkerSize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setMarkerSize(theSize);
-  }
-  CORBA::Long XYPlot_i::GetMarkerSize(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetMarkerSize");
-    Mutex mt(myMutex,qApp);
-    return myView->getMarkerSize();
-  }
-
-  void XYPlot_i::EnableXGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor, 
-                            CORBA::Boolean theMinor, CORBA::Long theNumMinor){
-    if(MYDEBUG) MESSAGE("XYPlot_i::EnableXGrid");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setXGrid(theMajor,theNumMajor,theMinor,theNumMinor);
-  }
-  void XYPlot_i::EnableYGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor, 
-                            CORBA::Boolean theMinor, CORBA::Long theNumMinor){
-    if(MYDEBUG) MESSAGE("XYPlot_i::EnableYGrid");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setYGrid(theMajor,theNumMajor,theMinor,theNumMinor);
-  }
 
-  void XYPlot_i::SetHorScaling(VISU::Scaling theScaling){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetHorScaling");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if(theScaling == VISU::LOGARITHMIC)
-      myView->setHorScaleMode(1);
-    else
-      myView->setHorScaleMode(0);
-  }
-  VISU::Scaling XYPlot_i::GetHorScaling(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetHorScaling");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    return (VISU::Scaling)myView->getHorScaleMode();
-  }
+    LightApp_SelectionMgr* aSelectionMgr = anApp->selectionMgr();
+    SALOME_ListIO aListIO, aNewListIO;
+    aSelectionMgr->selectedObjects(aListIO);
 
-  void XYPlot_i::SetVerScaling(VISU::Scaling theScaling){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetVerScaling");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if(theScaling == VISU::LOGARITHMIC)
-      myView->setVerScaleMode(1);
-    else
-      myView->setVerScaleMode(0);
-  }
-  VISU::Scaling XYPlot_i::GetVerScaling(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetVerScaling");
-    Mutex mt(myMutex,qApp);
-    return (VISU::Scaling)myView->getVerScaleMode();
-  }
-
-  void XYPlot_i::SetXTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetXTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setXTitle(true,theTitle);
-  }
-  char* XYPlot_i::GetXTitle() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetXTitle");
-    Mutex mt(myMutex,qApp);
-    return CORBA::string_dup(myView->getXTitle());
-  }
-
-  void XYPlot_i::SetYTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetYTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setYTitle(true,theTitle);
-  }
-  char* XYPlot_i::GetYTitle() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetYTitle");
-    Mutex mt(myMutex,qApp);
-    return CORBA::string_dup(myView->getYTitle());
-  }
-
-  void XYPlot_i::ShowLegend(CORBA::Boolean theShowing){
-    if(MYDEBUG) MESSAGE("XYPlot_i::ShowLegend");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->showLegend(theShowing);
-  }
-
-  void XYPlot_i::SetBackground(const SALOMEDS::Color& theColor){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetBackground");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    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]);
-    myView->setBackgroundColor(aNewColor);
-  }
-  SALOMEDS::Color XYPlot_i::GetBackground() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetBackground");
-    Mutex mt(myMutex,qApp);
-    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() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Minimize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMinimized();
-  }
-  void XYPlot_i::Restore() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Restore");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showNormal();
-  }
-  void XYPlot_i::Maximize() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Maximize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMaximized();
-  }
-  void XYPlot_i::Display(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Display"); 
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    // is it Curve ?
-    if(Curve_i* aCurve =  dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
-      UpdatePlot2d(myView,eDisplay,aCurve);
-    }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
-      int nbCurves = aContainer->GetNbCurves();
-      for ( int i = 1; i <= nbCurves; i++ ) {
-       VISU::Curve_i* aCurve = aContainer->GetCurve( i );
-       if ( aCurve && aCurve->IsValid() ) {
-         UpdatePlot2d(myView,eDisplay,aCurve);
-       }
+    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());
+        }
       }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
-      SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
-      if ( !TableSO->_is_nil() ) {
-       SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->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,eDisplay,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
-         }
-       }
-       myView->Repaint();
-      }
-    }
-  }
-  void XYPlot_i::Erase(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Erase"); 
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    // is it Curve ?
-    if(Curve_i* aCurve =  dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
-      UpdatePlot2d(myView,eErase,aCurve);
-    }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
-      int nbCurves = aContainer->GetNbCurves();
-      for ( int i = 1; i <= nbCurves; i++ ) {
-       VISU::Curve_i* aCurve = aContainer->GetCurve( i );
-       if ( aCurve && aCurve->IsValid() ) {
-         UpdatePlot2d(myView,eErase,aCurve);
-       }
-      }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
-      SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
-      if ( !TableSO->_is_nil() ) {
-       SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->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,eErase,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
-         }
-       }
-       myView->Repaint();
-      }
-    }
-  }
-  void XYPlot_i::EraseAll() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::EraseAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->EraseAll();
-  }
-  void XYPlot_i::DisplayOnly(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("XYPlot_i::DisplayOnly"); 
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    // is it Curve ?
-    if(Curve_i* aCurve =  dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
-      UpdatePlot2d(myView,eDisplayOnly,aCurve);
     }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
-      int nbCurves = aContainer->GetNbCurves();
-      for ( int i = 1; i <= nbCurves; i++ ) {
-       VISU::Curve_i* aCurve = aContainer->GetCurve( i );
-       if ( aCurve && aCurve->IsValid() ) {
-         UpdatePlot2d(myView,eDisplayOnly,aCurve);
-       }
+
+    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();
+          }
+        }
       }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
-      SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
-      if ( !TableSO->_is_nil() ) {
-       SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->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,eDisplayOnly,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
+}*/
+  }
+
+  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;
+           }
          }
        }
-       myView->Repaint();
       }
     }
-  }
-  void XYPlot_i::FitAll() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::FitAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->fitAll();
-  }
-  CORBA::Boolean XYPlot_i::SavePicture(const char* theFileName) {
-    if(MYDEBUG) MESSAGE("XYPlot_i::SavePicture");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if (!myView->getViewWidget())
-      return false;
-
-    QApplication::setOverrideCursor( Qt::waitCursor );
-    QPixmap px = QPixmap::grabWindow(myView->getViewWidget()->winId());
-    QApplication::restoreOverrideCursor();
-    
-    if (!QString(theFileName).isNull()) {
-      QApplication::setOverrideCursor( Qt::waitCursor );
-      QString fmt = QAD_Tools::getFileExtensionFromPath(theFileName).upper();
-      if (fmt.isEmpty())
-       fmt = QString("BMP"); // default format
-      if (fmt == "JPG")
-       fmt = "JPEG";
-      bool bOk = px.save(theFileName, fmt.latin1());
-      QApplication::restoreOverrideCursor();
-      return bOk;
-    }
-    return false;
-  }
-
-  //===========================================================================
-  TableView_i::TableView_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {}
-  Storable* TableView_i::Create(VISU::Table_var theTable){
-    if(MYDEBUG) MESSAGE("TableView_i::Create - "<<(!theTable->_is_nil()));
-    Mutex mt(myMutex,qApp,MYDELAY);
-    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();
-         myName = (myView->caption()).latin1();
-         return this;
-       }
-      }
-    }
-    return NULL;
-  }
-  void TableView_i::SetTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("TableView_i::SetTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = theTitle;
-    myView->setCaption(myName.c_str());
-  }
-  char* TableView_i::GetTitle() {
-    if(MYDEBUG) MESSAGE("TableView_i::GetTitle");
-    Mutex mt(myMutex,qApp);
-    myName = (myView->caption()).latin1();
-    return CORBA::string_dup(myName.c_str());
-  }
-  void TableView_i::Close(){
-    if(MYDEBUG) MESSAGE("TableView_i::Close");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->close();
-  }
-  TableView_i::~TableView_i() {
-    if(MYDEBUG) MESSAGE("TableView_i::~TableView_i");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    Close();
-    delete myView;
-  }
-  //===========================================================================
-  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();
+    if (!anApp)
+      return;
 
-    //GetViewFrame(myStudyFrame)->GetScale(myScaleFactor);
+    // 2. Remove corresponding IO from selection
+    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
+    CORBA::String_var anEntry = aSObject->GetID();
 
-    return this; //Build(false);
-  }
+    LightApp_SelectionMgr* aSelectionMgr = anApp->selectionMgr();
+    SALOME_ListIO aListIO, aNewListIO;
+    aSelectionMgr->selectedObjects(aListIO);
 
-//   Storable* View3D_i::Build(int theRestoring){
-//     if(MYDEBUG) MESSAGE("View3D_i::Build");
-//     if(theRestoring){
-//       myStudyFrame->setTitle(myName.c_str());
-//       SetBackground(myColor);
-//       SetPointOfView(myPosition);
-//       SetViewUp(myViewUp);
-//       SetFocalPoint(myFocalPnt);
-//       SetParallelScale(myParallelScale);
-//       ScaleView(VISU::View3D::XAxis,myScaleFactor[0]);
-//       ScaleView(VISU::View3D::YAxis,myScaleFactor[1]);
-//       ScaleView(VISU::View3D::ZAxis,myScaleFactor[2]);
-//       RepaintView(myStudyFrame);
-//     }else{
-//       Update();
-      
-//       SALOMEDS::SComponent_var aSComponent = FindOrCreateVisuComponent(myStudyDocument);
-//       CORBA::String_var aSComponentEntry = aSComponent->GetID(), anIOR(GetID());
-//       string anEntry = CreateAttributes(myStudyDocument,aSComponentEntry,"",anIOR,myName.c_str(),"",GetComment());
-      
-//     }
-//     return this;
-//   }
-
-  void View3D_i::Update(){
-    if(MYDEBUG) MESSAGE("View3D_i::Update");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = (const char*)myStudyFrame->title();
-//     myColor = GetBackground();
-//     GetCamera(myStudyFrame)->GetPosition(myPosition);
-//     GetCamera(myStudyFrame)->GetViewUp(myViewUp);
-//     GetCamera(myStudyFrame)->GetFocalPoint(myFocalPnt);
-//     myParallelScale = GetCamera(myStudyFrame)->GetParallelScale();
-    //RepaintView(myStudyFrame);
-
-    //GetViewFrame(myStudyFrame)->GetScale(myScaleFactor);
-
-    VTKViewer_ViewFrame* vf =  GetViewFrame(myStudyFrame);
-    vtkRenderer* Renderer = vf->getRenderer();
-    vtkActorCollection* theActors = Renderer->GetActors();
-    theActors->InitTraversal();
-    vtkActor *actor;
-    while(actor = theActors->GetNextActor()){
-      if(VISU_Actor* anActor = dynamic_cast<VISU_Actor*>(actor)){
-       VISU::Prs3d_i* aPrs3d  = anActor->GetPrs3d();
-       if(anActor->GetVisibility() && aPrs3d){
-         aPrs3d->Update();
-         aPrs3d->UpdateActor(anActor);
-       }
+    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());
+        }
       }
     }
-  }
-
-  CORBA::Boolean View3D_i::SavePicture(const char* theFileName) {
-    if(MYDEBUG) MESSAGE("View3D_i::SavePicture");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if (!myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget())
-      return false;
-
-    QApplication::setOverrideCursor( Qt::waitCursor );
-    QPixmap px = QPixmap::grabWindow(myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget()->winId());
-    QApplication::restoreOverrideCursor();
-    
-    if (!QString(theFileName).isNull()) {
-      QApplication::setOverrideCursor( Qt::waitCursor );
-      QString fmt = QAD_Tools::getFileExtensionFromPath(theFileName).upper();
-      if (fmt.isEmpty())
-       fmt = QString("BMP"); // default format
-      if (fmt == "JPG")
-       fmt = "JPEG";
-      bool bOk = px.save(theFileName, fmt.latin1());
-      QApplication::restoreOverrideCursor();
-      return bOk;
-    }
-    return false;
-  }
 
-  CORBA::Boolean View3D_i::SaveViewParams(const char* theName){
-    if(MYDEBUG)  MESSAGE("View3D_i::SaveViewPoint");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    if ( theName ) {
-      SALOMEDS::Study::ListOfSObject_var aList = 
-       myStudy->getStudyDocument()->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::SaveViewPoint - 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().c_str());
-           return 1;
-         }
-       }
+    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);
+            }
+          }
+        }
       }
     }
-    QString newName;
-    if ( theName )
-      newName = QString( theName );
-    else
-      newName = QString( GenerateViewParamsName() );
-    SALOMEDS::SComponent_var aSComponent = 
-      FindOrCreateVisuComponent(myStudy->getStudyDocument());
-    CORBA::String_var aSComponentEntry = aSComponent->GetID(), anIOR(GetID());
-    string anEntry = CreateAttributes(myStudy->getStudyDocument(),aSComponentEntry,"","",newName.latin1(),"",ToString().c_str());
-    return 1;
   }
-
-  CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
-    if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - "<<theName);
-    Mutex mt(myMutex,qApp,MYDELAY);
-    SALOMEDS::Study::ListOfSObject_var aList = 
-      myStudy->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);
-         return Restore( aMap ) != NULL;
-       }
-      }
-    }
-    return 0;
-  }
-
-  Storable* View3D_i::Restore(const Storable::TRestoringMap& theMap) throw(std::logic_error&) {
-    //    if(MYDEBUG)  MESSAGE("View3D_i::Restore");
-    //myName = VISU::Storable::FindValue(theMap,"myName").latin1();
-    
-    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();
-    
-    myStudyFrame->setTitle(myName.c_str());
-    SetBackground(aColor);
-    SetPointOfView(aPosition);
-    SetViewUp(aViewUp);
-    SetFocalPoint(aFocalPnt);
-    SetParallelScale(aParallelScale);
-    ScaleView(VISU::View3D::XAxis,aScaleFactor[0]);
-    ScaleView(VISU::View3D::YAxis,aScaleFactor[1]);
-    ScaleView(VISU::View3D::ZAxis,aScaleFactor[2]);
-    RepaintView(myStudyFrame);
-    return this;
-  }
-    
-
-  void View3D_i::ToStream(std::ostringstream& theStr) {
-    Storable::DataToStream(theStr,"myType",VISU::TVIEW3D);
-    
-    float backint[3];  
-    GetRenderer(myStudyFrame)->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(myStudyFrame,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(myStudyFrame,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(myStudyFrame)->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(myStudyFrame));
-    
-    double aScaleFactor[3];
-    GetViewFrame(myStudyFrame)->GetScale(aScaleFactor);
-    Storable::DataToStream(theStr,"myScaleFactor[0]",aScaleFactor[0]);
-    Storable::DataToStream(theStr,"myScaleFactor[1]",aScaleFactor[1]);
-    Storable::DataToStream(theStr,"myScaleFactor[2]",aScaleFactor[2]);
-  }
-
-
-//   Storable* VISU::View3DRestore(SALOMEDS::SComponent_var& theSComponent, SALOMEDS::Study_var& theStudy,
-//                             const char* thePrefix, const Storable::TRestoringMap& theMap)
-//     {
-//       try{
-//     View3D_i* pView3D = new View3D_i(theStudy);
-//     return pView3D->Restore(theMap);
-//       }catch(std::logic_error& exc){
-//     MESSAGE("Follow exception was accured :\n"<<exc.what());
-//       }catch(...){
-//     MESSAGE("Unknown exception was accured!");
-//       }
-//       return NULL;
-//     }
-  
-  void View3D_i::Close(){
-    if(MYDEBUG) MESSAGE("View3D_i::Close");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->close();
-  }
-
-  View3D_i::~View3D_i() {
-    if(MYDEBUG) MESSAGE("View3D_i::~View3D_i");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->close();
-  }
-
-  //-------------------- View interface --------------------
-  void View3D_i::SetTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("View3D_i::SetTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = theTitle;
-    myStudyFrame->setTitle(myName.c_str());
-  }
-  char* View3D_i::GetTitle() {
-    if(MYDEBUG) MESSAGE("View3D_i::GetTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = (const char*)myStudyFrame->title();
-    return CORBA::string_dup(myName.c_str());
-  }
-
-  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) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetBackground");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //myColor.R = theColor.R;  myColor.G = theColor.G;  myColor.B = theColor.B;
-    SetBackground(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() { 
-    if(MYDEBUG) MESSAGE("View3D_i::GetBackground");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //myColor = GetBackground(myStudyFrame);
-    return GetBackground(myStudyFrame); //myColor;
-  }
-
-  void View3D_i::Minimize() {
-    if(MYDEBUG) MESSAGE("View3D_i::Minimize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMinimized();
-  }
-  void View3D_i::Restore() {
-    if(MYDEBUG) MESSAGE("View3D_i::Restore");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showNormal();
-  }
-  void View3D_i::Maximize() {
-    if(MYDEBUG) MESSAGE("View3D_i::Maximize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMaximized();
-  }
-  //===========================================================================
-  void View3D_i::EraseAll() {
-    if(MYDEBUG) MESSAGE("View3D_i::EraseAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    UpdateViewer(myStudyFrame,eEraseAll);
-  }
-  void View3D_i::DisplayAll() {
-    if(MYDEBUG) MESSAGE("View3D_i::DisplayAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    UpdateViewer(myStudyFrame,eDisplayAll);
-  }
-  void View3D_i::Erase(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::Erase");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
-      UpdateViewer(myStudyFrame,eErase,aPrs);
-  }
-  void View3D_i::Display(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::Display"); 
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
-      UpdateViewer(myStudyFrame,eDisplay,aPrs);
-  }
-  void View3D_i::DisplayOnly(PrsObject_ptr thePrsObj) {
-    if(MYDEBUG) MESSAGE("View3D_i::DisplayOnly");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
-      UpdateViewer(myStudyFrame,eDisplayOnly,aPrs);
-  }
-
-  //-------------------- View3D interface --------------------
-  void View3D_i::FitAll() { 
-    if(MYDEBUG) MESSAGE("View3D_i::FitAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    GetViewFrame(myStudyFrame)->onViewFitAll();
-    Update();
-  }
-  void View3D_i::SetView(VISU::View3D::ViewType theType) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetView");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    switch(theType){
-    case VISU::View3D::FRONT : GetViewFrame(myStudyFrame)->onViewFront(); break;
-    case VISU::View3D::BACK : GetViewFrame(myStudyFrame)->onViewBack(); break;
-    case VISU::View3D::LEFT : GetViewFrame(myStudyFrame)->onViewLeft(); break;
-    case VISU::View3D::RIGHT : GetViewFrame(myStudyFrame)->onViewRight(); break;
-    case VISU::View3D::TOP : GetViewFrame(myStudyFrame)->onViewTop(); break;
-    case VISU::View3D::BOTTOM : GetViewFrame(myStudyFrame)->onViewBottom(); break;
-    }
-    Update();
-  }
-
-  void View3D_i::SetPointOfView(QAD_StudyFrame* theStudyFrame, const CORBA::Double thePosition[3]) {
-    GetCamera(theStudyFrame)->SetPosition(thePosition);
-  }
-  void View3D_i::SetPointOfView(const VISU::View3D::XYZ theCoord) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetPointOfView");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //VISU::View3D::XYZ_copy(myPosition,theCoord);
-    SetPointOfView(myStudyFrame, theCoord);
-  }
-
-  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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    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 theDir) {
-    if(MYDEBUG) MESSAGE("View3D_i::SetViewUp");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //VISU::View3D::XYZ_copy(myViewUp,theDir);
-    SetViewUp(myStudyFrame, theDir);
-  }
-
-  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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //VISU::View3D::XYZ_copy(myFocalPnt,theCoord);
-    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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    CORBA::Double aFocalPnt[3];
-    GetFocalPoint(myStudyFrame,aFocalPnt);
-    return VISU::View3D::XYZ_dup(aFocalPnt);
-  }
-
-  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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //myParallelScale = theScale;
-    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");
-    Mutex mt(myMutex,qApp);
-    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 View3D_i::ScaleView(VISU::View3D::Axis theAxis, CORBA::Double theParam) {
-    if(MYDEBUG) MESSAGE("View3D_i::ScaleView");
-    Mutex mt(myMutex,qApp);
-    //myScaleFactor[theAxis] = theParam;
-    ScaleView(myStudyFrame,theAxis,theParam);
-  }
-  void View3D_i::RemoveScale() {
-    if(MYDEBUG) MESSAGE("View3D_i::RemoveScale");
-    Mutex mt(myMutex,qApp);
-    double aScaleFactor[]={1,1,1};
-    //myScaleFactor[0] = myScaleFactor[0] = myScaleFactor[0] = 1.0;
-    GetViewFrame(myStudyFrame)->SetScale(aScaleFactor);
-  }
-  //===========================================================================
 }