]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Merge from QT_EVENT branch mergefrom_QT_EVENT_20Apr04
authorsmh <smh@opencascade.com>
Tue, 20 Apr 2004 16:14:57 +0000 (16:14 +0000)
committersmh <smh@opencascade.com>
Tue, 20 Apr 2004 16:14:57 +0000 (16:14 +0000)
15 files changed:
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISU_I/VISUConfig.cc
src/VISU_I/VISUConfig.hh
src/VISU_I/VISU_Gen_i.cc
src/VISU_I/VISU_Gen_i.hh
src/VISU_I/VISU_TimeAnimation.cxx
src/VISU_I/VISU_TimeAnimation.h
src/VISU_I/VISU_ViewManager_i.cc
src/VISU_I/VISU_ViewManager_i.hh
src/VISU_SWIG/Makefile.in
src/VISU_SWIG/batch_test_events.py [new file with mode: 0644]
src/VISU_SWIG/batchmode_visu_view3d.py
src/VISU_SWIG/test_events.py [new file with mode: 0755]
src/VISU_SWIG/visu_view3d.py

index 6b8f6e454cb6fcc0a792c00e9a3c2ed273ec200d..b153434fc8d8e641217b015af863e781295bec0d 100644 (file)
@@ -165,7 +165,7 @@ private:
   QFont font;
 };
 
-static VisuGUI MYVISUGUI;
+static VisuGUI MYVISUGUI("");
 VisuGUI *visuGUI = &MYVISUGUI;
 
 VISU::VISU_Gen_i* VisuGUI::GetVisuGen(){
@@ -357,7 +357,8 @@ void RepaintCurrentView(){
 }
 
 
-VisuGUI::VisuGUI(){    
+VisuGUI::VisuGUI( const QString& theName, QObject* theParent )
+: SALOMEGUI( theName, theParent ) {    
   mySelectionDlg = 0;
 }
 
@@ -401,7 +402,6 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
       /* ======================================================================================== */
       /* Import Table from file                                                                  */
       /* ======================================================================================== */
-
     case 199:
       {
        if(checkLock(aStudy)) break;
@@ -685,7 +685,6 @@ bool VisuGUI::OnGUIEvent(int theCommandID,  QAD_Desktop* parent)
   return true;
 }
 
-
 void VisuGUI::SelectionInfo() {
   if (mySelectionDlg) {
     mySelectionDlg->close(true);
@@ -816,10 +815,10 @@ CREATEPRESENTATION(VisuGUI::CreateStreamLines);
 
 
 //=====================================================================================
-// function : setSettings()
+// function : SetSettings()
 // purpose  :
 //=====================================================================================
-bool VisuGUI::setSettings(QAD_Desktop* parent)
+bool VisuGUI::SetSettings(QAD_Desktop* parent)
 {
   int anId = 53;
   QMenuData* pp;
@@ -2229,57 +2228,31 @@ void VisuGUI::DeletePrs() {
 void VisuGUI::SaveViewParams()
 {
   if (checkLock(GetStudyDocument())) return;
-  SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
-  if ( Sel->IObjectCount() > 1 || GetActiveStudy()->getActiveStudyFrame()->getTypeView() != VIEW_VTK ) 
+  SALOME_Selection* aSel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
+  QAD_StudyFrame* aStudyFrame = GetActiveStudy()->getActiveStudyFrame();
+  if ( aSel->IObjectCount() > 1 || aStudyFrame->getTypeView() != VIEW_VTK ) 
     return;
-  VISU::ViewManager_var aVM = GetVisuGen()->GetViewManager();
-  if(!CORBA::is_nil(aVM.in())){
-    VISU::View_var aView = aVM->GetCurrentView();
-    if(!CORBA::is_nil(aView.in())){
-      VISU::View3D_var aView3D = VISU::View3D::_narrow(aView);
-      if(CORBA::is_nil(aView3D.in())) return;
-      if ( Sel->IObjectCount()  == 0 ) {
-       // Save view parameters by new name
-       aView3D->SaveViewParams( 0 );
-       GetActiveStudy()->updateObjBrowser( true );
-      }else{
-       bool isExist;
-       VISU::Storable::TRestoringMap aMap;
-       Handle(SALOME_InteractiveObject) anIO;    
-       CORBA::Object_var anObject = GetSelectedObj(&anIO,GetActiveStudy(),&aMap);
-       VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
-       if(isExist && aType == VISU::TVIEW3D){
-         aView3D->SaveViewParams( anIO->getName() );
-         GetActiveStudy()->updateObjBrowser( true );
-       }
-      }
-    }
+  if ( aSel->IObjectCount()  == 0 ) {
+    VISU::View3D_i::SaveViewParams(aStudyFrame,VISU::View3D_i::GenerateViewParamsName().latin1());
+  }else{
+    const Handle(SALOME_InteractiveObject)& anIO = aSel->firstIObject();
+    VISU::View3D_i::SaveViewParams(aStudyFrame,anIO->getName());
   }
+  GetActiveStudy()->updateObjBrowser( true );
 }
 
 
 void VisuGUI::RestoreViewParams()
 {
-  SALOME_Selection* Sel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
-  if ( Sel->IObjectCount() > 1 || GetActiveStudy()->getActiveStudyFrame()->getTypeView() != VIEW_VTK ) 
+  SALOME_Selection* aSel = SALOME_Selection::Selection( GetActiveStudy()->getSelection() );
+  QAD_StudyFrame* aStudyFrame = GetActiveStudy()->getActiveStudyFrame();
+  if ( aSel->IObjectCount() > 1 || aStudyFrame->getTypeView() != VIEW_VTK ) 
     return;
-  VISU::ViewManager_var aVM = GetVisuGen()->GetViewManager();
-  if(!CORBA::is_nil(aVM.in())){
-    VISU::View_var aView = aVM->GetCurrentView();
-    if(!CORBA::is_nil(aView.in())){
-      VISU::View3D_var aView3D = VISU::View3D::_narrow(aView);
-      if(CORBA::is_nil(aView3D.in())) return;
-      bool isExist;
-      VISU::Storable::TRestoringMap aMap;
-      Handle(SALOME_InteractiveObject) anIO;    
-      CORBA::Object_var anObject = GetSelectedObj(&anIO,GetActiveStudy(),&aMap);
-      VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue(aMap,"myType",&isExist).toInt();
-      if(isExist && aType == VISU::TVIEW3D)
-       aView3D->RestoreViewParams( anIO->getName() );
-    }
-  }
+  const Handle(SALOME_InteractiveObject)& anIO = aSel->firstIObject();
+  VISU::View3D_i::RestoreViewParams(aStudyFrame,anIO->getName());
 }
 
+
 //=====================================================================================
 // function : DeleteViewParams()
 // purpose  :
@@ -3144,72 +3117,27 @@ void VisuGUI::BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
   END_OF("VisuGUI::BuildPresentation");
 }
 
-extern "C"
-{
-  bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
-  {
-    //if(MYDEBUG) MESSAGE("VisuGUI::OnGUIEvent "<< theCommandID);
-    return VisuGUI::OnGUIEvent(theCommandID, parent);
-  }
-
-  bool OnKeyPress (QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-  {
-    if(MYDEBUG) MESSAGE("VisuGUI::OnKeyPress ");
-    return VisuGUI::OnKeyPress (pe, parent, studyFrame);
-  }
 
-  bool OnMousePress (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-  {
-    //if(MYDEBUG) MESSAGE("VisuGUI::OnMousePress ");
-    return VisuGUI::OnMousePress (pe, parent, studyFrame);
-  }
-
-  bool OnMouseMove (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-  {
-    //if(MYDEBUG) MESSAGE("VisuGUI::OnMouseMove ");
-    return VisuGUI::OnMouseMove (pe, parent, studyFrame);
-  }
-
-  bool SetSettings ( QAD_Desktop* parent )
-  {
-    return VisuGUI::setSettings( parent );
-  }
-
-  bool customPopup ( QAD_Desktop* parent, QPopupMenu* popup, const QString & theContext,
-                    const QString & theParent, const QString & theObject )
-  {
-    return VisuGUI::CustomPopup( parent, popup, theContext, theParent, theObject );
-  }
-
-  void definePopup ( QString & theContext, QString & theParent, QString & theObject )
-  {
-    VisuGUI::DefinePopup( theContext, theParent, theObject );
-  }
-
-  bool activeStudyChanged ( QAD_Desktop* parent ) 
-  {
-    ::UpdateViewFrame();
-  }
-
-  void buildPresentation ( const Handle(SALOME_InteractiveObject)& theIO )
-  {
-    VisuGUI::BuildPresentation(theIO);
-  }
-
-  void supportedViewType(int* buffer, int bufferSize)
-  {
-    if (!buffer || !bufferSize) return;
-    buffer[0] = (int)VIEW_VTK;
-    if (--bufferSize) buffer[1] = (int)VIEW_PLOT2D;
-  }  
+//===========================================================================
+// SupportedViewType
+//===========================================================================
+void VisuGUI::SupportedViewType(int* buffer, int bufferSize)
+{
+  if (!buffer || !bufferSize) return;
+  buffer[0] = (int)VIEW_VTK;
+  if (--bufferSize) buffer[1] = (int)VIEW_PLOT2D;
+} 
 
-  void deactivate()
-  {
-    visuGUI->EmitSignalCloseAllDialogs();
+extern "C"
+{
+  Standard_EXPORT SALOMEGUI* GetComponentGUI() {
+    if ( !visuGUI )
+      visuGUI = new VisuGUI( "" );
+    return visuGUI;
   }
 }
 
+
 //////////////////////////////////////////////////////////////////////////////////
 ////////////////               CHANGE ACTOR COLOR         ////////////////////////
 //////////////////////////////////////////////////////////////////////////////////
index ec5677ecfe48815464334e57808846660771b2a8..ce4db226ab3e7eb037cde51b173ec71951bf9428 100644 (file)
@@ -54,6 +54,8 @@ class vtkRenderer;
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
 #include "SALOME_ListIteratorOfListIO.hxx"
 
+#include "SALOMEGUI.h"
+
 namespace VISU{
   class VISU_Gen_i;
 
@@ -78,11 +80,11 @@ namespace VISU{
 // ======================================================================
 // 
 
-class VisuGUI : public QObject{
+class VisuGUI : public SALOMEGUI{
   Q_OBJECT;
  public:
-  VisuGUI();     
-  ~VisuGUI();    
+  VisuGUI( const QString&, QObject* = 0 );       
+  virtual ~VisuGUI();    
   
   static VISU::VISU_Gen_i* GetVisuGen();
 
@@ -177,27 +179,29 @@ class VisuGUI : public QObject{
 // ----------------------------------------
 // All method of standard EXPORT
 // ----------------------------------------
-  Standard_EXPORT static bool OnGUIEvent(int theCommandID, QAD_Desktop* parent);
-  Standard_EXPORT static bool setSettings(QAD_Desktop* parent);
-  Standard_EXPORT static void DefinePopup(QString & theContext,
+  virtual bool OnGUIEvent(int theCommandID, QAD_Desktop* parent);
+  virtual bool SetSettings(QAD_Desktop* parent);
+  virtual void DefinePopup(QString & theContext,
                                          QString & theParent, 
                                          QString & theObject ) ;
-  Standard_EXPORT static bool CustomPopup(QAD_Desktop* parent,
+  virtual bool CustomPopup(QAD_Desktop* parent,
                                          QPopupMenu* popup,
                                          const QString & theContext,
                                          const QString & theParent,
                                          const QString & theObject);
-  Standard_EXPORT static void BuildPresentation(const Handle(SALOME_InteractiveObject)&);
-  Standard_EXPORT static bool OnMousePress(QMouseEvent* pe ,
+  virtual void BuildPresentation(const Handle(SALOME_InteractiveObject)&);
+  virtual bool OnMousePress(QMouseEvent* pe ,
                                           QAD_Desktop* parent, 
                                           QAD_StudyFrame* studyFrame);
-  Standard_EXPORT static bool OnMouseMove(QMouseEvent* pe ,
+  virtual bool OnMouseMove(QMouseEvent* pe ,
                                          QAD_Desktop* parent, 
                                          QAD_StudyFrame* studyFrame);
-  Standard_EXPORT static bool OnKeyPress(QKeyEvent* pe,
+  virtual bool OnKeyPress(QKeyEvent* pe,
                                         QAD_Desktop* parent,
                                         QAD_StudyFrame* studyFrame);
-  public slots:
+  virtual void SupportedViewType (int* buffer, int bufferSize);
+
+public slots:
   void ImportTablesFromFile();
   void ExportTableToFile();
 
@@ -267,10 +271,6 @@ private :
   QDialog* myActiveDialogBox;
   int myState ;
   VisuGUI_SelectionDlg* mySelectionDlg;
-  
-signals:
-  void SignalDeactivateActiveDialog();
-  void SignalCloseAllDialogs();
 };
 
 #endif
index bef92c9de40424802cc05f86e95b56f8e82172b6..1e760bbd18909079dc25732a25c9f77fdfaa704e 100644 (file)
@@ -58,32 +58,16 @@ namespace VISU{
 
   //===========================================================================
   static int mySCnt = 0;
-  static int myQCnt = 0;
-  static int myIsBatchMode = 0;
 
-  Mutex::Mutex(QMutex* theMutex, QApplication* theQApp, int theDelay) :
-    myQApp(theQApp), isQAppLocked(theQApp->locked()), myDelay(theDelay),
-    myMutex(theMutex), isSessionLocked(theMutex->locked())
-  {
-    if(MYDEBUG) MESSAGE("Mutex::Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt));
-    if(!myIsBatchMode && isQAppLocked) myIsBatchMode++;
-    if(!isSessionLocked && !mySCnt) { myMutex->lock();}; mySCnt++;
-    if(!isQAppLocked && !myQCnt) { 
-      myQApp->lock(); 
-      myQApp->syncX();
-    };
-    myQCnt++;
+  Mutex::Mutex(QMutex* theMutex): myMutex(theMutex){
+    if(MYDEBUG) MESSAGE("Mutex::Mutex : "<<!mySCnt);
+    if(!mySCnt++) 
+      myMutex->lock();
   }
   Mutex::~Mutex(){
-    myQCnt--; 
-    if(!isQAppLocked && !myQCnt) { 
-      myQApp->flushX(); 
-      //if(myDelay > 0)
-       myQApp->processEvents(myDelay+3);
-      myQApp->unlock();
-    }
-    mySCnt--; if(!isSessionLocked && !mySCnt) { myMutex->unlock();}
-    if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt));
+    if(!(--mySCnt))
+      myMutex->unlock();
+    if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<<!mySCnt);
   }
 
 
index 6ade69afc508e1ae7abffda15037c60546b958bc..ba38a0ee54365508edd7c3e155acda547c736128 100644 (file)
@@ -86,10 +86,9 @@ namespace VISU{
   //===========================================================================
   class Mutex{
     QMutex* myMutex;
-    QApplication* myQApp;
-    int isQAppLocked, isSessionLocked, myDelay;
+    int isQAppLocked;
   public:
-    Mutex(QMutex* theMutex, QApplication* theQApp, int theDelay = 0);
+    Mutex(QMutex* theMutex);
     ~Mutex();
   };
 
index cd8b645434231fe66172fc998568f25968183a18..ff03c49aca98c84686cd4536aa708f030d8da151 100644 (file)
 #include <qfileinfo.h>
 #include "Utils_ExceptHandlers.hxx"
 
+/*! SAN & VSR : Test QT_EVENT 
+  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+*/
+#include "SALOME_Event.hxx"
+
+#include "QAD_Config.h"
+#include "QAD_Application.h"
+#include "QAD_Desktop.h"
+#include "QAD_RightFrame.h"
+
+#include "VTKViewer_ViewFrame.h"
+
+#include <vtkActor.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkSphereSource.h>
+#include <vtkProperty.h>
+
+/*! SAN & VSR : Test QT_EVENT 
+  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+*/
+
 using namespace std;
 
 static QFileInfo aFileInfo;
@@ -170,7 +191,7 @@ namespace VISU{
     Engines_Component_i()
   {
     if(MYDEBUG) MESSAGE("VISU_Gen_i::VISU_Gen_i : "<<theMutex);
-    Mutex mt(theMutex,qApp);
+    Mutex mt(theMutex);
     Base_i::myMutex = theMutex;  //apo
     Base_i::myOrb = CORBA::ORB::_duplicate(theORB);
     Base_i::myPoa = PortableServer::POA::_duplicate(thePOA);
@@ -202,7 +223,7 @@ namespace VISU{
   {
     if(MYDEBUG) MESSAGE("VISU_Gen_i::Load - myMutex = "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       SALOMEDS::Study_var aStudy = theComponent->GetStudy(); 
       SALOMEDS::StudyBuilder_var  aStudyBuilder = aStudy->NewBuilder(); 
       TCollection_AsciiString aTmpDir =
@@ -232,7 +253,7 @@ namespace VISU{
     if(myMutex){
       CORBA::String_var aString("");
       if(strcmp(aLocalPersistentID,"") != 0) {
-       Mutex mt(myMutex,qApp);
+       Mutex mt(myMutex);
        Storable* aStorable =
          Storable::Create(theSObject,VisuTmpDir.c_str(),aLocalPersistentID);
        if(aStorable != NULL) aString = aStorable->GetID();
@@ -248,7 +269,7 @@ namespace VISU{
   {
     if(MYDEBUG) MESSAGE("VISU_Gen_i::Save - myMutex = "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       TCollection_AsciiString aTmpDir = isMultiFile? strdup(theURL): SALOMEDS_Tool::GetTmpDir();
       if(MYDEBUG) MESSAGE("VISU_Gen_i::Save - "<<aTmpDir);
       int aCounter = 0;
@@ -300,7 +321,7 @@ namespace VISU{
                                      bool isMultiFile) {
     if(MYDEBUG) MESSAGE("VISU_Gen_i::Save - myMutex = "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       CORBA::String_var aString = SALOMEDS_Tool::GetTmpDir();
       TCollection_AsciiString aTmpDir = isMultiFile? (const Standard_CString)theURL: (const Standard_CString)aString.in();
       if(MYDEBUG) MESSAGE("VISU_Gen_i::Save - "<<aTmpDir);
@@ -365,7 +386,7 @@ namespace VISU{
        if(!CORBA::is_nil(anObj)){
          Storable* pStorable = dynamic_cast<Storable*>(GetServant(anObj).in());
          if(pStorable != NULL){
-           Mutex mt(myMutex,qApp);
+           Mutex mt(myMutex);
            aString = pStorable->ToString().c_str();
            return aString._retn();
          }
@@ -404,7 +425,7 @@ namespace VISU{
     //omni_mutex_lock aMutexLock(aMutex);
     if(MYDEBUG) MESSAGE("VISU_Gen_i::GetViewManager : "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       ViewManager_i * aViewManager = new ViewManager_i(myStudyDocument);
       return ViewManager::_duplicate(aViewManager->_this());
     }
@@ -414,7 +435,7 @@ namespace VISU{
   SALOMEDS::SObject_ptr VISU_Gen_i::ImportTables(const char* theFileName){
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return SALOMEDS::SObject::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       SALOMEDS::SObject_var aRes = VISU::ImportTables(theFileName,myStudyDocument);
       return aRes._retn();
     }
@@ -430,7 +451,7 @@ namespace VISU{
   Result_ptr VISU_Gen_i::ImportFile(const char* theFileName){
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Result::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       aFileInfo.setFile(theFileName);
       Result_i* pResult = new Result_i(myStudyDocument);
       if(pResult->Create(theFileName) != NULL) 
@@ -446,7 +467,7 @@ namespace VISU{
   Result_ptr VISU_Gen_i::CopyAndImportFile(const char* theFileName){
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Result::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       VISU::Result_var aResult;
       aFileInfo.setFile(theFileName);
       Result_i* pResult = new Result_i(myStudyDocument,Result_i::eRestoredFile);
@@ -461,7 +482,7 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::ImportMed : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Result::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       Result_i* pResult = new Result_i(myStudyDocument);
       if(pResult->Create(theMedSObject) != NULL)
        return pResult->_this();
@@ -477,7 +498,7 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::ImportMedField : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Result::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       Result_i* pResult = new Result_i(myStudyDocument);
       if(pResult->Create(theField) != NULL)
        return pResult->_this();
@@ -493,14 +514,15 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::MeshOnEntity : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Mesh::_nil();
-      Mutex mt(myMutex,qApp);
-      Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in());
-      Mesh_i* aPresent = new Mesh_i(pResult);
-      if(aPresent->Create(theMeshName,theEntity) != NULL)
-       return aPresent->_this();
-      else{
-       aPresent->_remove_ref();
-       return VISU::Mesh::_nil();
+      Mutex mt(myMutex);
+      if(Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in())){
+       Mesh_i* aPresent = new Mesh_i(pResult);
+       if(aPresent->Create(theMeshName,theEntity) != NULL)
+         return aPresent->_this();
+       else{
+         aPresent->_remove_ref();
+         return VISU::Mesh::_nil();
+       }
       }
     }
     return myVisuGen->MeshOnEntity(theResult,theMeshName,theEntity);
@@ -512,14 +534,15 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::FamilyMeshOnEntity : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Mesh::_nil();
-      Mutex mt(myMutex,qApp);
-      Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in());
-      Mesh_i* aPresent = new Mesh_i(pResult);
-      if(aPresent->Create(theMeshName,theEntity,theFamilyName) != NULL)
-       return aPresent->_this();
-      else{
-       aPresent->_remove_ref();
-       return VISU::Mesh::_nil();
+      Mutex mt(myMutex);
+      if(Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in())){
+       Mesh_i* aPresent = new Mesh_i(pResult);
+       if(aPresent->Create(theMeshName,theEntity,theFamilyName) != NULL)
+         return aPresent->_this();
+       else{
+         aPresent->_remove_ref();
+         return VISU::Mesh::_nil();
+       }
       }
     }
     return myVisuGen->FamilyMeshOnEntity(theResult,theMeshName,theEntity,theFamilyName);
@@ -530,14 +553,15 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::GroupMesh : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Mesh::_nil();
-      Mutex mt(myMutex,qApp);
-      Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in());
-      Mesh_i* aPresent = new Mesh_i(pResult);
-      if(aPresent->Create(theMeshName,theGroupName) != NULL)
-       return aPresent->_this();
-      else{
-       aPresent->_remove_ref();
-       return VISU::Mesh::_nil();
+      Mutex mt(myMutex);
+      if(Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in())){
+       Mesh_i* aPresent = new Mesh_i(pResult);
+       if(aPresent->Create(theMeshName,theGroupName) != NULL)
+         return aPresent->_this();
+       else{
+         aPresent->_remove_ref();
+         return VISU::Mesh::_nil();
+       }
       }
     }
     return myVisuGen->GroupMesh(theResult,theMeshName,theGroupName);
@@ -596,7 +620,7 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::CreateTable : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Table::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       Table_i* pPresent = new Table_i(myStudyDocument,theTableEntry);
       if(pPresent->Create() != NULL)
        return pPresent->_this();
@@ -612,7 +636,7 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::CreateCurve : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Curve::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       PortableServer::POA_ptr aPOA = GetPOA();
       Table_i* pTable = dynamic_cast<Table_i*>(aPOA->reference_to_servant(theTable));
       Curve_i* pPresent = new Curve_i(myStudyDocument,pTable,theHRow,theVRow);
@@ -629,7 +653,7 @@ namespace VISU{
     if(MYDEBUG) MESSAGE("VISU_Gen_i::CreateContainer : "<<myMutex);
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Container::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       Container_i* pPresent = new Container_i(myStudyDocument);
       if(pPresent->Create() != NULL)
        return pPresent->_this();
@@ -644,9 +668,9 @@ namespace VISU{
   Animation_ptr VISU_Gen_i::CreateAnimation(View3D_ptr theView3D){
     if(myMutex){
       if(myStudyDocument->GetProperties()->IsLocked()) return Animation::_nil();
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       if(MYDEBUG) MESSAGE("VISU_Gen_i::CreateAnimation : "<<myMutex);
-      if(VISU_TimeAnimation* anAnim = new VISU_TimeAnimation(myStudyDocument,theView3D)){
+      if(VISU_TimeAnimation_i* anAnim = new VISU_TimeAnimation_i(myStudyDocument,theView3D)){
        return anAnim->_this();
       }else
        return VISU::Animation::_nil();
@@ -658,7 +682,7 @@ namespace VISU{
   void VISU_Gen_i::Close(SALOMEDS::SComponent_ptr theComponent){
     if(MYDEBUG) MESSAGE("VISU_Gen_i::Close : "<<myMutex);
     if(myMutex){
-      //Mutex mt(myMutex,qApp);
+      //Mutex mt(myMutex);
       //SALOMEDS::Study_var aStudy = theComponent->GetStudy(); 
       //if(!aStudy->_is_nil()){
       //       SALOMEDS::ChildIterator_var aChildIter = aStudy->NewChildIterator(theComponent);
@@ -715,7 +739,7 @@ namespace VISU{
     Unexpect aCatch(SalomeException);
     if(MYDEBUG) MESSAGE("VISU_Gen_i::PublishInStudy : "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       SALOMEDS::SObject_var aResultSO;
       Result_i* aResultObj = dynamic_cast<Result_i*>(GetServant(theObject).in());
       if (!aResultObj) return aResultSO._retn();
@@ -730,7 +754,7 @@ namespace VISU{
   CORBA::Boolean VISU_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) {
     if(0 && MYDEBUG) MESSAGE("VISU_Gen_i::CanCopy : "<<myMutex);
     if(myMutex){
-      //Mutex mt(myMutex,qApp);
+      //Mutex mt(myMutex);
       SALOMEDS::GenericAttribute_var anAttr;
       if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return false;
       try {
@@ -761,7 +785,7 @@ namespace VISU{
 
   SALOMEDS::TMPFile* VISU_Gen_i::CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID) {
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
 
       theObjectID = 0;
       SALOMEDS::TMPFile_var aStreamFile = new SALOMEDS::TMPFile;
@@ -842,7 +866,7 @@ namespace VISU{
                                              SALOMEDS::SObject_ptr theObject) {
     if(MYDEBUG) MESSAGE("VISU_Gen_i::PasteInto : "<<myMutex);
     if(myMutex){
-      Mutex mt(myMutex,qApp);
+      Mutex mt(myMutex);
       SALOMEDS::SObject_var aResultSO;
       if (theObjectID != 1) return aResultSO._retn();
 
@@ -890,4 +914,88 @@ namespace VISU{
     return myVisuGen->PasteInto(theStream,theObjectID,theObject);
   }
 
+  /*! SAN & VSR : Test QT_EVENT 
+    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+  */
+  class TestViewEvent : public SALOME_Event {
+  public:
+    virtual bool Execute(){
+      QAD_Desktop* desktop = QAD_Application::getDesktop();
+      QAD_Study*   aStudy = desktop->getActiveStudy();
+      if ( !aStudy ) {
+       QString defViewer = QAD_CONFIG->getSetting( "Viewer::DefaultViewer" );
+       int dv = defViewer.toInt();
+       QAD_CONFIG->addSetting( "Viewer::DefaultViewer", QString::number( VIEW_VTK ) );
+       desktop->createStudy();
+       if ( !defViewer.isEmpty() ) {
+         QAD_CONFIG->addSetting( "Viewer::DefaultViewer", QString::number( dv ) );
+       }
+      }
+      else {
+       aStudy->newWindow3d( "", VIEW_VTK );
+      }
+      return true;
+    }
+  };
+
+  class TestObjectEvent : public SALOME_Event {
+  public:
+    virtual bool Execute(){
+      float aRadius = 150.0 * random() / RAND_MAX + 10.;
+      float aX = 1000.0 * random() / RAND_MAX - 500.;
+      float aY = 1000.0 * random() / RAND_MAX - 500.;
+      float aZ = 1000.0 * random() / RAND_MAX - 500.;
+      float aR = (float)random() / RAND_MAX;
+      float aG = (float)random() / RAND_MAX;
+      float aB = (float)random() / RAND_MAX;
+
+      vtkSphereSource* aSource = vtkSphereSource::New();
+      aSource->SetRadius( aRadius );
+      aSource->SetCenter( aX, aY, aZ );
+  
+      vtkProperty* prop = vtkProperty::New();
+      prop->SetColor( aR, aG, aB );
+  
+      vtkPolyDataMapper* aMapper = vtkPolyDataMapper::New();
+      aMapper->SetInput( aSource->GetOutput() );
+      
+      vtkActor* sphere = vtkActor::New();
+      sphere->SetMapper( aMapper );
+      sphere->SetProperty( prop );
+
+      QAD_Desktop* desktop = QAD_Application::getDesktop();
+      QAD_Study*   aStudy = desktop->getActiveStudy();
+      if ( !aStudy ) {
+       return false;
+      }
+      VTKViewer_ViewFrame* vf = (VTKViewer_ViewFrame*)(desktop->getActiveStudy()->getActiveStudyFrame()->getRightFrame()->getViewFrame());
+      sphere->SetVisibility( true );
+      vf->getRenderer()->AddActor(sphere);
+      vf->Repaint();
+      return true;
+    }
+  };
+
+  void VISU_Gen_i::CreateTestView() {
+    if(myMutex){
+      TestViewEvent* ve = new TestViewEvent();
+      ve->process();
+      ve->release();
+      return;
+    }
+    myVisuGen->CreateTestView();
+  }
+
+  void VISU_Gen_i::ShowTestObject() {
+    if(myMutex){
+      TestObjectEvent* ve = new TestObjectEvent();
+      ve->process();
+      ve->release();
+      return;
+    }
+    myVisuGen->ShowTestObject();
+  }
+  /*! SAN & VSR : Test QT_EVENT
+    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+  */
 };
index 2b4dfc34f4c98f5cfbe2930e8c8322b99f43c7fe..9a1d4aa0a35c4257c7bc12f615d2760415eeef29 100644 (file)
@@ -38,6 +38,14 @@ namespace VISU{
     virtual char* GetID();
     virtual VISU::VISUType GetType() { return VISU::TVISUGEN;};
 
+/*! SAN & VSR : Test QT_EVENT 
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+*/
+    virtual void CreateTestView();
+    virtual void ShowTestObject();
+/*! SAN & VSR : Test QT_EVENT
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+*/
     virtual void SetCurrentStudy(SALOMEDS::Study_ptr theStudy);
     virtual SALOMEDS::Study_ptr GetCurrentStudy();
 
@@ -66,14 +74,15 @@ namespace VISU{
       typedef typename TPrs3d_i::TInterface TPrs3d;
       typename TPrs3d::_var_type aPrs3d;
       if(myStudyDocument->GetProperties()->IsLocked()) return TPrs3d::_nil();
-      Mutex mt(myMutex,qApp);
-      Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in());
-      if(TPrs3d_i::IsPossible(pResult,theMeshName,theEntity,theFieldName,int(theIteration))){
-       TPrs3d_i* aPresent = new TPrs3d_i(pResult,theAddToStudy);
-       if(aPresent->Create(theMeshName,theEntity,theFieldName,int(theIteration)) != NULL)
-         return aPresent->_this();
-       else
-         aPresent->_remove_ref();
+      Mutex mt(myMutex);
+      if(Result_i* pResult = dynamic_cast<Result_i*>(GetServant(theResult).in())){
+       if(TPrs3d_i::IsPossible(pResult,theMeshName,theEntity,theFieldName,int(theIteration))){
+         TPrs3d_i* aPresent = new TPrs3d_i(pResult,theAddToStudy);
+         if(aPresent->Create(theMeshName,theEntity,theFieldName,int(theIteration)) != NULL)
+           return aPresent->_this();
+         else
+           aPresent->_remove_ref();
+       }
       }
       return TPrs3d::_nil();
     }
index 96631f1ac52b63a4acfe421291dc6c439f7f9a85..fc3083358f95fc626075d31e5bb12aa181b06c47 100644 (file)
@@ -21,6 +21,8 @@
 #include "VISU_ScalarBarActor.hxx"
 #include "VISU_Actor.h"
 
+#include "SALOME_Event.hxx"
+
 #include "VTKViewer_ViewFrame.h"
 
 #include "QAD_Config.h"
@@ -30,9 +32,10 @@ using namespace std;
 //QWaitCondition myCondition;
 static int MYDELAY = 1;
 
+
 //************************************************************************
-VISU_TimeAnimation::VISU_TimeAnimation(SALOMEDS::Study_var theStudy, VISU::View3D_ptr theView3D) {
-  myStudy = theStudy;
+VISU_TimeAnimation::VISU_TimeAnimation(SALOMEDS::Study_ptr theStudy, VISU::View3D_ptr theView3D) {
+  myStudy = SALOMEDS::Study::_duplicate(theStudy);
   myIsActive = false;
   myFrame = 0;
   mySpeed = 1;
@@ -235,7 +238,7 @@ void VISU_TimeAnimation::generatePresentations(CORBA::Long theFieldNum) {
 
 
 //************************************************************************
-CORBA::Boolean VISU_TimeAnimation::generateFrames() {
+CORBA::Boolean VISU_TimeAnimation::generateFrames(){
   if (!myView) {
     MESSAGE("Viewer is nod defined for animation");
     return false;
@@ -243,8 +246,6 @@ CORBA::Boolean VISU_TimeAnimation::generateFrames() {
 
   myLastError = QString("Frame(s) for ");
   bool aNoError = true;
-  VISU::Mutex mt(myMutex,qApp,MYDELAY);
-
   clearView();
   vtkRenderer* aRen = myView->getRenderer();
 
@@ -280,7 +281,6 @@ void VISU_TimeAnimation::clearView() {
     MESSAGE("Viewer is nod defined for animation");
     return;
   }
-  VISU::Mutex mt(myMutex,qApp,MYDELAY);
   vtkRenderer* aRen = myView->getRenderer();
   for (int i = 0; i < getNbFields(); i++) {
     FieldData& aData = myFieldsLst[i];
@@ -544,3 +544,171 @@ double VISU_TimeAnimation::getTimeValue(SALOMEDS::SObject_var theTimeStamp) {
 void VISU_TimeAnimation::setSpeed(CORBA::Long theSpeed) { 
   mySpeed = (theSpeed<1)? 1 : theSpeed; 
 }
+
+
+//========================================================================
+VISU_TimeAnimation_i::VISU_TimeAnimation_i(SALOMEDS::Study_ptr theStudy, VISU::View3D_ptr theView3D){
+  myAnim = new VISU_TimeAnimation(theStudy,theView3D);
+}
+
+
+VISU_TimeAnimation_i::~VISU_TimeAnimation_i(){
+  delete myAnim;
+}
+
+
+void VISU_TimeAnimation_i::addField(SALOMEDS::SObject_ptr theField){
+  myAnim->addField(theField);
+}
+
+
+CORBA::Boolean VISU_TimeAnimation_i::generateFrames(){
+  return ProcessEvent(new TMemFunEvent<VISU_TimeAnimation,bool>(myAnim,&VISU_TimeAnimation::generateFrames));
+}
+
+
+void VISU_TimeAnimation_i::generatePresentations(CORBA::Long theFieldNum){
+  myAnim->generatePresentations(theFieldNum);
+}
+
+
+void VISU_TimeAnimation_i::clearView(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::clearView));
+}
+
+
+void VISU_TimeAnimation_i::stopAnimation(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::stopAnimation));
+}
+
+
+void VISU_TimeAnimation_i::startAnimation(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::startAnimation));
+}
+
+
+void VISU_TimeAnimation_i::nextFrame(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::nextFrame));
+}
+
+
+void VISU_TimeAnimation_i::prevFrame(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::prevFrame));
+}
+
+
+void VISU_TimeAnimation_i::firstFrame(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::firstFrame));
+}
+
+
+void VISU_TimeAnimation_i::lastFrame(){
+  ProcessVoidEvent(new TVoidMemFunEvent<VISU_TimeAnimation>(myAnim,&VISU_TimeAnimation::lastFrame));
+}
+
+
+void VISU_TimeAnimation_i::gotoFrame(CORBA::Long theFrame){
+  ProcessVoidEvent(new TVoidMemFun1ArgEvent<VISU_TimeAnimation,CORBA::Long>(myAnim,&VISU_TimeAnimation::gotoFrame,theFrame));
+}
+
+
+CORBA::Long VISU_TimeAnimation_i::getNbFields(){
+  return myAnim->getNbFields();
+}
+
+
+CORBA::Long VISU_TimeAnimation_i::getNbFrames(){
+  return myAnim->getNbFrames();
+}
+
+
+CORBA::Boolean VISU_TimeAnimation_i::isRunning(){
+  return myAnim->isRunning();
+}
+
+
+CORBA::Long VISU_TimeAnimation_i::getCurrentFrame(){
+  return myAnim->getCurrentFrame();
+}
+
+
+VISU::ScalarMap_ptr VISU_TimeAnimation_i::getPresentation(CORBA::Long theField, CORBA::Long theFrame){
+  return myAnim->getPresentation(theField,theFrame);
+}
+
+
+void VISU_TimeAnimation_i::setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType){
+  myAnim->setPresentationType(theFieldNum,theType);
+}
+
+
+VISU::VISUType VISU_TimeAnimation_i::getPresentationType(CORBA::Long theFieldNum){
+  return myAnim->getPresentationType(theFieldNum);
+}
+
+
+void VISU_TimeAnimation_i::setSpeed(CORBA::Long theSpeed){
+  myAnim->setSpeed(theSpeed);
+}
+
+
+CORBA::Long VISU_TimeAnimation_i::getSpeed(){
+  return myAnim->getSpeed();
+}
+
+
+CORBA::Boolean VISU_TimeAnimation_i::isProportional(){
+  return myAnim->isProportional();
+}
+
+
+void VISU_TimeAnimation_i::setAnimationRange(CORBA::Double theMin, CORBA::Double theMax){
+  myAnim->setAnimationRange(theMin,theMax);
+}
+
+
+CORBA::Double VISU_TimeAnimation_i::getMinRange(){
+  return myAnim->getMinRange();
+}
+
+
+CORBA::Double VISU_TimeAnimation_i::getMaxRange(){
+  return myAnim->getMaxRange();
+}
+
+
+CORBA::Boolean VISU_TimeAnimation_i::isRangeDefined(){
+  return myAnim->isRangeDefined();
+}
+
+
+void VISU_TimeAnimation_i::dumpTo(const char* thePath){
+  myAnim->dumpTo(thePath);
+}
+
+
+CORBA::Boolean VISU_TimeAnimation_i::isCycling(){
+  return myAnim->isCycling();
+}
+
+
+CORBA::Double VISU_TimeAnimation_i::getMinTime(){
+  return myAnim->getMinTime();
+}
+
+
+CORBA::Double VISU_TimeAnimation_i::getMaxTime(){
+  return myAnim->getMaxTime();
+}
+
+
+void VISU_TimeAnimation_i::setProportional(CORBA::Boolean theProp){
+  myAnim->setProportional(theProp);
+}
+
+
+void VISU_TimeAnimation_i::setCycling(CORBA::Boolean theCycle){
+  myAnim->setCycling(theCycle);
+}
+
+
index f5c0a07b6497f0cb4c8557b6969562d2611ff50a..01de4065dbb2f9767086998e5618a55145b99e30 100644 (file)
@@ -37,9 +37,7 @@ struct FieldData
 };
 
 
-class VISU_TimeAnimation: public QObject, public QThread,
-                          public virtual POA_VISU::Animation,
-                          public virtual VISU::Base_i
+class VISU_TimeAnimation: public QObject, public QThread
 {
   Q_OBJECT;
  public:
@@ -47,7 +45,7 @@ class VISU_TimeAnimation: public QObject, public QThread,
   static VISU::Storable::TRestoringMap getMapOfValue(SALOMEDS::SObject_var theSObject);
   static double getTimeValue(SALOMEDS::SObject_var theTimestamp);
   
-  VISU_TimeAnimation(SALOMEDS::Study_var theStudy, VISU::View3D_ptr theView3D = VISU::View3D::_nil());
+  VISU_TimeAnimation(SALOMEDS::Study_ptr theStudy, VISU::View3D_ptr theView3D = VISU::View3D::_nil());
   ~VISU_TimeAnimation();
   
   virtual VISU::VISUType GetType() { return VISU::TNONE;};
@@ -132,4 +130,64 @@ class VISU_TimeAnimation: public QObject, public QThread,
   VTKViewer_ViewFrame* myView;
 };
 
+
+class VISU_TimeAnimation_i: public virtual POA_VISU::Animation,
+                            public virtual VISU::Base_i
+{
+  VISU_TimeAnimation* myAnim;
+public:
+  VISU_TimeAnimation_i(SALOMEDS::Study_ptr theStudy, 
+                       VISU::View3D_ptr theView3D = VISU::View3D::_nil());
+  ~VISU_TimeAnimation_i();
+
+  virtual VISU::VISUType GetType(){ return VISU::TNONE;}
+
+  virtual void addField(SALOMEDS::SObject_ptr theField);
+
+  virtual CORBA::Boolean generateFrames();
+  virtual void generatePresentations(CORBA::Long theFieldNum);
+  
+  virtual void clearView();
+
+  virtual void stopAnimation();
+  virtual void startAnimation();
+  virtual void nextFrame();
+  virtual void prevFrame();
+  virtual void firstFrame();
+  virtual void lastFrame();
+  virtual void gotoFrame(CORBA::Long theFrame);
+
+  virtual CORBA::Long getNbFields();
+  virtual CORBA::Long getNbFrames();
+  virtual CORBA::Boolean isRunning();
+  virtual CORBA::Long getCurrentFrame();
+
+  virtual VISU::ScalarMap_ptr getPresentation(CORBA::Long theField, CORBA::Long theFrame);
+
+  virtual void setPresentationType(CORBA::Long theFieldNum, VISU::VISUType theType);
+  virtual VISU::VISUType getPresentationType(CORBA::Long theFieldNum);
+
+  virtual void setSpeed(CORBA::Long theSpeed);
+  virtual CORBA::Long getSpeed();
+
+  virtual CORBA::Boolean isProportional();
+
+  virtual void setAnimationRange(CORBA::Double theMin, CORBA::Double theMax);
+
+  virtual CORBA::Double getMinRange();
+  virtual CORBA::Double getMaxRange();
+  virtual CORBA::Boolean isRangeDefined();
+
+  virtual void dumpTo(const char* thePath);
+
+  virtual CORBA::Boolean isCycling();
+
+  virtual CORBA::Double getMinTime();
+  virtual CORBA::Double getMaxTime();
+
+  virtual void setProportional(CORBA::Boolean theProp);
+  virtual void setCycling(CORBA::Boolean theCycle);
+};
+
+
 #endif  //VISU_TIMEANIMATION_H
index 26691ed04c915feaad10865add35cd373bfdf806..7492a7a7f7f7823130478b7b89c01d9adaa7146c 100644 (file)
@@ -43,6 +43,8 @@
 #include "VISU_ScalarBarActor.hxx"
 #include "VISU_Actor.h"
 
+#include "SALOME_Event.hxx"
+
 #include "QAD_Application.h"
 #include "QAD_Desktop.h"
 #include "QAD_Tools.h"
@@ -68,7 +70,7 @@
 using namespace std;
 
 #ifdef _DEBUG_
-static int MYDEBUG = 0;
+static int MYDEBUG = 1;
 #else
 static int MYDEBUG = 0;
 #endif
@@ -78,6 +80,69 @@ static int MYDELAY = 1;
 
 namespace VISU{
   //===========================================================================
+  typedef TVoidMemFunEvent<QAD_StudyFrame> TFrameActionEvent;
+
+  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)
+    {}
+    virtual bool 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);
+      return true; 
+    }
+  };
+
+
+  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 bool 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 RepaintView(QAD_StudyFrame* theStudyFrame);
+  class TRepaintViewEvent: public SALOME_Event{
+    QAD_StudyFrame* myStudyFrame;
+  public:
+    TRepaintViewEvent(QAD_StudyFrame* theStudyFrame):
+      myStudyFrame(theStudyFrame)
+    {}
+    virtual bool Execute(){
+      RepaintView(myStudyFrame);
+      return true; 
+    }
+  };
+  
+
   VTKViewer_ViewFrame* GetViewFrame(QAD_StudyFrame* theStudyFrame){
     return dynamic_cast<VTKViewer_ViewFrame*>(theStudyFrame->getRightFrame()->getViewFrame());
   }
@@ -87,11 +152,15 @@ namespace VISU{
   vtkCamera* GetCamera(QAD_StudyFrame* theStudyFrame){
     return GetRenderer(theStudyFrame)->GetActiveCamera();
   }
+
+
   void RepaintView(QAD_StudyFrame* theStudyFrame){
     GetRenderer(theStudyFrame)->ResetCameraClippingRange();
     GetViewFrame(theStudyFrame)->getRW()->getRenderWindow()->Render();
     //GetViewFrame(theStudyFrame)->Repaint();
   }
+
+
   VISU_Actor* UpdateViewer(QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs){
     VTKViewer_ViewFrame* vf = GetViewFrame(theStudyFrame);
     if (!vf) return NULL;
@@ -213,126 +282,157 @@ namespace VISU{
       }
     }
   }
-  //===========================================================================
-  /*
-  #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());
+
+  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");
       }
-      qApp->unlock();
     }
-    SALOMEDS::Study_ptr myStudyDocument;
-  };
-  */
+    return aStudy;
+  }
+  //===========================================================================
   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());
-       if (aFileInfo.exists()) 
-         aStudy = aDesktop->loadStudy(aFileInfo.baseName());
-       else aStudy = aDesktop->loadStudy(aName.in());
-       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::View_ptr ViewManager_i::GetCurrentView(){
+    class TEvent: public SALOME_Event{
+      SALOMEDS::Study_ptr myStudyDocument;
+    public:
+      TEvent( SALOMEDS::Study_ptr theStudy):
+       myStudyDocument(theStudy)
+      {}
+      virtual bool 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();
+           }
+         }
+       }
+       return true; 
+      }
+      typedef VISU::View_var TResult;
+      TResult myResult;
+    };
+    TEvent* ve = new TEvent( myStudyDocument );
+    ve->process();
+    TEvent::TResult aResult = ve->myResult;
+    ve->release();
+    return aResult._retn();
   }
+  
+  
+  class TCreateViewEvent: public SALOME_Event{
+  public:
+    TCreateViewEvent( SALOMEDS::Study_ptr theStudy):
+      myStudyDocument(theStudy)
+    {};
+  protected:
+    SALOMEDS::Study_ptr myStudyDocument;
+  };
 
 
-  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());
-      }
-      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());
+  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 bool Execute(){
+      if(CheckStudy(myStudyDocument)){
+       TViewFrame* pView = new TViewFrame(myStudyDocument);
+       if(pView->Create(1)) 
+         myResult = pView->_this();
       }
+      return true; 
     }
-    return VISU::View::_nil();
-  }
+  };
+
 
+  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");
-    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();
+    return ProcessEvent(new TCreateViewFrameEvent<VISU::XYPlot_i>(myStudyDocument));
   }
 
 
   VISU::TableView_ptr ViewManager_i::CreateTableView(VISU::Table_ptr theTable){
+    class TEvent: public TCreateViewEvent{
+      Table_ptr myTable;
+    public:
+      TEvent(SALOMEDS::Study_ptr theStudy,
+            Table_ptr theTable):
+       TCreateViewEvent(theStudy),
+       myTable(theTable)
+      {}
+      virtual bool Execute(){
+       if ( CheckStudy( myStudyDocument ) ) {
+         VISU::TableView_i* pView = new TableView_i(myStudyDocument);
+         if(pView->Create(myTable) != NULL) 
+           myResult = pView->_this();
+       }
+       return true; 
+      }
+      typedef VISU::TableView_var TResult;
+      TResult myResult;
+    };
     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();
+    TEvent* ve = new TEvent(myStudyDocument,theTable);
+    ve->process();
+    TEvent::TResult aResult = ve->myResult;
+    ve->release();
+    return aResult._retn();
   }
 
 
   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).in());
-      if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - dynamic_cast"<<pView);
-      if(pView) {
-       pView->Close();
-       pView->_remove_ref();
+    class TEvent: public SALOME_Event{
+      View_ptr myView;
+    public:
+      TEvent(View_ptr theView):
+       myView(theView)
+      {}
+      virtual bool 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();
+         }
+       }
+       return true; 
       }
-      //if(pView) delete pView;
-      return;
-    }
-  }
-
-
-  void ViewManager_i::ProcessEvents() {
-    while (true) {
-      qApp->lock();
-      qApp->syncX();
-      qApp->flushX(); 
-      qApp->processEvents();
-      qApp->unlock();
-      //sleep(1);
-    }
+    };
+    if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
+    ProcessVoidEvent(new TEvent(theView));
   }
 
 
@@ -340,14 +440,7 @@ namespace VISU{
   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());
-      if ( aFileInfo.exists() )
-       myStudy = aDesktop->loadStudy(aFileInfo.baseName());
-      else myStudy = aDesktop->loadStudy(aName.in());
-    }
+    myStudy = CheckStudy(theStudy);
     if(MYDEBUG) MESSAGE("View_i::View_i - isStudyOpened = "<<myStudy<<"; aName = "<<aName.in());
   }
 
@@ -372,342 +465,306 @@ namespace VISU{
   const char* View_i::GetComment() const { return "";}
   void View_i::ToStream(std::ostringstream& theStr) {}
 
-  const char* View_i::GetEntry(){ 
+  string View_i::GetEntry(){ 
     SALOMEDS::SObject_var aSObject = myStudy->getStudyDocument()->FindObjectIOR(GetID());
     CORBA::String_var anEntry = aSObject->GetID();
-    string aString(anEntry);
-    if(MYDEBUG) MESSAGE("Result_i::GetEntry - "<<aString);
-    return aString.c_str();
+    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(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();
+    myView->Repaint();
     return this;
   } 
+
+
   void XYPlot_i::Update() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Update");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myName = (const char*)(myStudyFrame->title());
-    myView->Repaint();
+    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::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());
+    ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
+                    (myStudyFrame,&QAD_StudyFrame::setCaption,QString(theTitle)));
   }
   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());
+    return CORBA::string_dup(myStudyFrame->title().latin1());
   }
 
+
   void XYPlot_i::SetSubTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetSubTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setTitle(theTitle);
+    ProcessVoidEvent(new TVoidMemFun1ArgEvent<Plot2d_ViewFrame,const QString&,QString>
+                    (myView,&Plot2d_ViewFrame::setTitle,QString(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);
+    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
+                    (myView,&Plot2d_ViewFrame::setCurveType,theType,true));
   }
   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);
+    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
+                    (myView,&Plot2d_ViewFrame::setMarkerSize,theSize,true));
   }
   CORBA::Long XYPlot_i::GetMarkerSize(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetMarkerSize");
-    Mutex mt(myMutex,qApp);
     return myView->getMarkerSize();
   }
 
+
+  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 bool Execute(){
+      (myView->*myFun)(myMajor,myNumMajor,myMinor,myNumMinor);
+      return true; 
+    }
+  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){
-    if(MYDEBUG) MESSAGE("XYPlot_i::EnableXGrid");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setXGrid(theMajor,theNumMajor,theMinor,theNumMinor);
+                            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){
-    if(MYDEBUG) MESSAGE("XYPlot_i::EnableYGrid");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setYGrid(theMajor,theNumMajor,theMinor,theNumMinor);
+                            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 bool Execute(){
+      (myView->*myFun)(myScaling);
+      return true; 
+    }
+  protected:
+    Plot2d_ViewFrame* myView;
+    TFun myFun;
+    int myScaling;
+  };
+
+
   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);
+    ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setHorScaleMode,
+                                           theScaling == VISU::LOGARITHMIC));
   }
   VISU::Scaling XYPlot_i::GetHorScaling(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::GetHorScaling");
-    Mutex mt(myMutex,qApp,MYDELAY);
     return (VISU::Scaling)myView->getHorScaleMode();
   }
 
+
   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);
+    ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setVerScaleMode,
+                                           theScaling == VISU::LOGARITHMIC));
   }
   VISU::Scaling XYPlot_i::GetVerScaling(){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetVerScaling");
-    Mutex mt(myMutex,qApp);
     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 bool Execute(){
+      (myView->*myFun)(true,myTitle);
+      return true; 
+    }
+  protected:
+    Plot2d_ViewFrame* myView;
+    TFun myFun;
+    const char* myTitle;
+  };
+
+
   void XYPlot_i::SetXTitle(const char* theTitle){
-    if(MYDEBUG) MESSAGE("XYPlot_i::SetXTitle");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->setXTitle(true,theTitle);
+    ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setXTitle,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);
+    ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setYTitle,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);
+    ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,bool,bool>
+                    (myView,&Plot2d_ViewFrame::showLegend,theShowing,true));
   }
 
+
   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);
+    ProcessVoidEvent(new TSetBackgroundEvent<Plot2d_ViewFrame>(myView,theColor));
   }
   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();
+    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
   }
+
   void XYPlot_i::Restore() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Restore");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showNormal();
+    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
   }
+
   void XYPlot_i::Maximize() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::Maximize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMaximized();
+    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::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).in())) {
-      UpdatePlot2d(myView,eDisplay,aCurve);
-    }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj).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,eDisplay,aCurve);
-       }
+
+
+  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 bool Execute(){
+      // is it Curve ?
+      if(Curve_i* aCurve =  dynamic_cast<Curve_i*>(VISU::GetServant(myPrsObj).in())) {
+       UpdatePlot2d(myView,myDisplaing,aCurve);
       }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj).in())) {
-      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).in()));
+      // 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();
       }
-    }
-  }
-  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).in())) {
-      UpdatePlot2d(myView,eErase,aCurve);
-    }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj).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,eErase,aCurve);
-       }
-      }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj).in())) {
-      SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
-      if ( !TableSO->_is_nil() ) {
-       SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->NewChildIterator( TableSO );
+      // 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,eErase,dynamic_cast<VISU::Curve_i*>( VISU::GetServant(aCurve).in()));
+           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();
        }
-       myView->Repaint();
       }
+      return true; 
     }
+  };
+
+
+  void XYPlot_i::Display(PrsObject_ptr thePrsObj) {
+    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplay));
   }
-  void XYPlot_i::EraseAll() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::EraseAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->EraseAll();
+
+
+  void XYPlot_i::Erase(PrsObject_ptr thePrsObj) {
+    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eErase));
   }
+
+
   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).in())) {
-      UpdatePlot2d(myView,eDisplayOnly,aCurve);
-    }
-    // is it Container ?
-    if(Container_i* aContainer =  dynamic_cast<Container_i*>(VISU::GetServant(anObj).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,eDisplayOnly,aCurve);
-       }
-      }
-      myView->Repaint();
-    }
-    // is it Table ?
-    if(Table_i* aTable =  dynamic_cast<Table_i*>(VISU::GetServant(anObj).in())) {
-      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).in()));
-         }
-       }
-       myView->Repaint();
-      }
-    }
+    ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplayOnly));
+  }
+
+
+  void XYPlot_i::EraseAll() {
+    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::EraseAll));
   }
+
+
   void XYPlot_i::FitAll() {
-    if(MYDEBUG) MESSAGE("XYPlot_i::FitAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myView->fitAll();
+    ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::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;
+    TSavePictureEvent* ve = new TSavePictureEvent(myView->getViewWidget(),theFileName);
+    ve->process();
+    TSavePictureEvent::TResult aResult = ve->myResult;
+    ve->release();
+    return aResult;
   }
 
+
   //===========================================================================
   TableView_i::TableView_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {}
-  Storable* TableView_i::Create(VISU::Table_var theTable){
+  Storable* TableView_i::Create(VISU::Table_ptr 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()).in());
+      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());
@@ -718,36 +775,36 @@ namespace VISU{
                                          SALOMEGUI_TableDlg::ttAuto, 
                                          Qt::Vertical);
          myView->show();
-         myName = (myView->caption()).latin1();
          return this;
        }
       }
     }
     return NULL;
   }
+
+
+  TableView_i::~TableView_i() {
+    if(MYDEBUG) MESSAGE("TableView_i::~TableView_i");
+    delete myView;
+  }
+
+
   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());
+    ProcessVoidEvent(new TVoidMemFun1ArgEvent<SALOMEGUI_TableDlg,const QString&,QString>
+                    (myView,&SALOMEGUI_TableDlg::setCaption,QString(theTitle)));
   }
+
+
   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());
+    return CORBA::string_dup(myView->caption().latin1());
   }
+
+
   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";
@@ -766,131 +823,86 @@ namespace VISU{
       myStudyFrame = myStudy->newWindow3d("",VIEW_VTK);
     else
       myStudyFrame = myStudy->getActiveStudyFrame();
+    return this;
+  }
 
-    //GetViewFrame(myStudyFrame)->GetScale(myScaleFactor);
-
-    return this; //Build(false);
-  }
-
-//   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);
+    class TEvent: public SALOME_Event{
+      QAD_StudyFrame* myStudyFrame;
+    public:
+      TEvent(QAD_StudyFrame* theStudyFrame):
+       myStudyFrame(theStudyFrame)
+      {}
+      virtual bool Execute(){
+       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);
+           }
+         }
        }
+       return true; 
       }
-    }
+    };
+    ProcessVoidEvent(new TEvent(myStudyFrame));
   }
 
+
   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;
+    TSavePictureEvent* ve = new TSavePictureEvent(myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget(),theFileName);
+    ve->process();
+    TSavePictureEvent::TResult aResult = ve->myResult;
+    ve->release();
+    return aResult;
   }
 
-  CORBA::Boolean View3D_i::SaveViewParams(const char* theName){
-    if(MYDEBUG)  MESSAGE("View3D_i::SaveViewPoint");
-    Mutex mt(myMutex,qApp,MYDELAY);
+
+  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 = 
-       myStudy->getStudyDocument()->FindObjectByName(theName,"VISU");
+       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::SaveViewPoint - anEntry = "<<anEntry);
+       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().c_str());
-           return 1;
+           aCmnt->SetValue(ToString(theStudyFrame).c_str());
+           return true;
          }
        }
       }
     }
-    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;
+    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);
   }
 
-  CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
-    if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - "<<theName);
-    Mutex mt(myMutex,qApp,MYDELAY);
+
+  bool View3D_i::RestoreViewParams(QAD_StudyFrame* theStudyFrame, const char* theName){
     SALOMEDS::Study::ListOfSObject_var aList = 
-      myStudy->getStudyDocument()->FindObjectByName(theName,"VISU");
+      theStudyFrame->getStudy()->getStudyDocument()->FindObjectByName(theName,"VISU");
     SALOMEDS::GenericAttribute_var anAttr;
     int iEnd = aList->length();
     if(MYDEBUG)  MESSAGE("View3D_i::RestoreViewPoint - iEnd = "<<iEnd);
@@ -907,17 +919,41 @@ namespace VISU{
        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;
+         Restore(theStudyFrame,aMap);
+         return true;
        }
       }
     }
-    return 0;
+    return false;
   }
 
-  Storable* View3D_i::Restore(const Storable::TRestoringMap& theMap)  {
-    //    if(MYDEBUG)  MESSAGE("View3D_i::Restore");
-    //myName = VISU::Storable::FindValue(theMap,"myName").latin1();
-    
+
+  CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
+    class TEvent: public SALOME_Event{
+      QAD_StudyFrame* myStudyFrame;
+      const char* myName;
+    public:
+      TEvent(QAD_StudyFrame* theStudyFrame,
+            const char* theName):
+       myStudyFrame(theStudyFrame),
+       myName(theName)
+      {}
+      virtual bool Execute(){
+       myResult = RestoreViewParams(myStudyFrame,myName);
+       return true; 
+      }
+      typedef CORBA::Boolean TResult;
+      TResult myResult;
+    };
+    TEvent* ve = new TEvent(myStudyFrame,theName);
+    ve->process();
+    TEvent::TResult aResult = ve->myResult;
+    ve->release();
+    return aResult;
+  }
+
+
+  void View3D_i::Restore(QAD_StudyFrame* theStudyFrame, const Storable::TRestoringMap& theMap) throw(std::logic_error&){
     SALOMEDS::Color aColor;  
     aColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble();
     aColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble();
@@ -945,112 +981,100 @@ namespace VISU{
     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);
+    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]);
+  }
+  Storable* View3D_i::Restore(const Storable::TRestoringMap& theMap) throw(std::logic_error&) {
+    Restore(myStudyFrame,theMap);
     return this;
   }
     
 
-  void View3D_i::ToStream(std::ostringstream& theStr) {
+  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(myStudyFrame)->GetBackground(backint);
+    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(myStudyFrame,aPosition);
+    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(myStudyFrame,aFocalPnt);
+    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(myStudyFrame)->GetViewUp(aViewUp);
+    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(myStudyFrame));
+    Storable::DataToStream(theStr,"myParallelScale",GetParallelScale(theStudyFrame));
     
     double aScaleFactor[3];
-    GetViewFrame(myStudyFrame)->GetScale(aScaleFactor);
+    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);
+  }
 
 
-//   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());
+    ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
+                    (myStudyFrame,&QAD_StudyFrame::setTitle,QString(theTitle)));
   }
   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());
+    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);
+    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);
+    ProcessVoidEvent(new TSetBackgroundEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),theColor));
   }
 
+
   SALOMEDS::Color View3D_i::GetBackground(QAD_StudyFrame* theStudyFrame) { 
     SALOMEDS::Color aColor;
     float backint[3];  
@@ -1059,160 +1083,222 @@ namespace VISU{
     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;
+    return GetBackground(myStudyFrame);
   }
 
+
   void View3D_i::Minimize() {
-    if(MYDEBUG) MESSAGE("View3D_i::Minimize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMinimized();
+    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
   }
   void View3D_i::Restore() {
-    if(MYDEBUG) MESSAGE("View3D_i::Restore");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showNormal();
+    ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
   }
   void View3D_i::Maximize() {
-    if(MYDEBUG) MESSAGE("View3D_i::Maximize");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    myStudyFrame->showMaximized();
+    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 bool Execute(){
+      UpdateViewer(myStudyFrame,myDisplaing,myPrs3d);
+      return true; 
+    }
+  };
+
   void View3D_i::EraseAll() {
     if(MYDEBUG) MESSAGE("View3D_i::EraseAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    UpdateViewer(myStudyFrame,eEraseAll);
+    ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,eEraseAll));
   }
+
   void View3D_i::DisplayAll() {
     if(MYDEBUG) MESSAGE("View3D_i::DisplayAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    UpdateViewer(myStudyFrame,eDisplayAll);
+    ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,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).in()))
-      UpdateViewer(myStudyFrame,eErase,aPrs);
+    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"); 
-    Mutex mt(myMutex,qApp,MYDELAY);
     CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in()))
-      UpdateViewer(myStudyFrame,eDisplay,aPrs);
+    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");
-    Mutex mt(myMutex,qApp,MYDELAY);
     CORBA::Object_ptr anObj = thePrsObj;
-    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in()))
-      UpdateViewer(myStudyFrame,eDisplayOnly,aPrs);
+    if(Prs3d_i* aPrs =  dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
+      ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eDisplayOnly));
+    }
   }
 
   //-------------------- View3D interface --------------------
   void View3D_i::FitAll() { 
-    if(MYDEBUG) MESSAGE("View3D_i::FitAll");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    GetViewFrame(myStudyFrame)->onViewFitAll();
+    ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::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;
+    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 bool Execute(){
+      myFun(myStudyFrame,myParam);
+      return true; 
+    }
+  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 theCoord) {
+  void View3D_i::SetPointOfView(const VISU::View3D::XYZ thePosition) {
     if(MYDEBUG) MESSAGE("View3D_i::SetPointOfView");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //VISU::View3D::XYZ_copy(myPosition,theCoord);
-    SetPointOfView(myStudyFrame, theCoord);
+    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");
-    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) {
+  void View3D_i::SetViewUp(const VISU::View3D::XYZ theViewUp) {
     if(MYDEBUG) MESSAGE("View3D_i::SetViewUp");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //VISU::View3D::XYZ_copy(myViewUp,theDir);
-    SetViewUp(myStudyFrame, theDir);
+    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");
-    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);
+    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");
-    Mutex mt(myMutex,qApp,MYDELAY);
     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 bool Execute(){
+      myFun(myStudyFrame,myParam);
+      return true; 
+    }
+  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");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    //myParallelScale = theScale;
-    SetParallelScale(myStudyFrame, theScale);
+    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");
-    Mutex mt(myMutex,qApp);
     return GetParallelScale(myStudyFrame);
   }
 
@@ -1223,18 +1309,22 @@ namespace VISU{
     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");
-    Mutex mt(myMutex,qApp);
-    //myScaleFactor[theAxis] = theParam;
-    ScaleView(myStudyFrame,theAxis,theParam);
+    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");
-    Mutex mt(myMutex,qApp);
-    double aScaleFactor[]={1,1,1};
-    //myScaleFactor[0] = myScaleFactor[0] = myScaleFactor[0] = 1.0;
-    GetViewFrame(myStudyFrame)->SetScale(aScaleFactor);
+    double aScale[3] = {1.0, 1.0, 1.0};
+    ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myStudyFrame,aScale));
   }
   //===========================================================================
 }
index c5189783a038f4aa38a4dd47c785f17bb8b9aca8..ca653ce07afff53cea75a9e84f2eeff84eb311bc 100644 (file)
@@ -51,12 +51,11 @@ namespace VISU{
     virtual ~ViewManager_i() {};
     virtual VISU::VISUType GetType() { return VISU::TVIEWMANAGER;};
 
-    virtual View3D_ptr Create3DView();
-    virtual View_ptr   GetCurrentView();
+    virtual View3D_ptr    Create3DView();
+    virtual View_ptr      GetCurrentView();
     virtual TableView_ptr CreateTableView(VISU::Table_ptr theTable);
-    virtual XYPlot_ptr CreateXYPlot();
-    virtual void Destroy(View_ptr theView);
-    virtual void ProcessEvents();
+    virtual XYPlot_ptr    CreateXYPlot();
+    virtual void          Destroy(View_ptr theView);
 
   protected:
     SALOMEDS::Study_var myStudyDocument;
@@ -68,7 +67,6 @@ namespace VISU{
   {
   protected:
     QAD_Study* myStudy;
-    string myName;
   public:
     View_i(SALOMEDS::Study_ptr theStudy);
     virtual ~View_i();
@@ -90,7 +88,7 @@ namespace VISU{
     virtual void ToStream(std::ostringstream& theStr);
     virtual const char* GetComment() const;
   public:
-    virtual const char* View_i::GetEntry();
+    virtual std::string View_i::GetEntry();
   };
 
   //===========================================================================
@@ -98,6 +96,7 @@ namespace VISU{
                    public virtual View_i
   {
   public:
+    typedef VISU::XYPlot TInterface;
     XYPlot_i(SALOMEDS::Study_ptr theStudy);
     virtual ~XYPlot_i();
     virtual VISU::VISUType GetType() { return VISU::TXYPLOT;};
@@ -160,6 +159,7 @@ namespace VISU{
                       public virtual View_i
   {
   public:
+    typedef VISU::TableView TInterface;
     TableView_i(SALOMEDS::Study_ptr theStudy);
     virtual ~TableView_i();
     virtual VISU::VISUType GetType() { return VISU::TTABLEVIEW;};
@@ -171,7 +171,7 @@ namespace VISU{
   protected:
     SALOMEGUI_TableDlg* myView;
   public:
-    virtual Storable* Create(VISU::Table_var theTable);
+    virtual Storable* Create(VISU::Table_ptr theTable);
   };
 
   //===========================================================================
@@ -179,6 +179,7 @@ namespace VISU{
                    public virtual View_i
   {
   public:
+    typedef VISU::View3D TInterface;
     View3D_i(SALOMEDS::Study_ptr theStudy);
     virtual ~View3D_i();
     virtual VISU::VISUType GetType() { return VISU::TVIEW3D;};
@@ -237,29 +238,30 @@ namespace VISU{
     virtual void ScaleView(VISU::View3D::Axis theAxis, CORBA::Double theParam);
     virtual void RemoveScale();
 
-    virtual QString GenerateViewParamsName();
+    static std::string ToString(QAD_StudyFrame* theStudyFrame);
+    static void ToStream(QAD_StudyFrame* theStudyFrame, std::ostringstream& theStr);
+    static bool SaveViewParams(QAD_StudyFrame* theStudyFrame, const char* theName);
     virtual CORBA::Boolean SaveViewParams(const char* theName);
+    static QString GenerateViewParamsName();
+
+    static void Restore(QAD_StudyFrame* theStudyFrame, const Storable::TRestoringMap& theMap) throw(std::logic_error&);
+    static bool RestoreViewParams(QAD_StudyFrame* theStudyFrame, const char* theName);
     virtual CORBA::Boolean RestoreViewParams(const char* theName);
 
     virtual void Close();
+
   protected:
     QAD_StudyFrame* myStudyFrame;
-    //SALOMEDS::Color myColor;
-    //CORBA::Double myPosition[3], myFocalPnt[3], myViewUp[3], myParallelScale, myScaleFactor[3];
-
-    //Storable* Build(int theRestoring);
     static int myNbViewParams;
 
   public:
     virtual Storable* Create(int theNew);
-    virtual Storable* Restore(const Storable::TRestoringMap& theMap) ;
+    virtual Storable* Restore(const Storable::TRestoringMap& theMap) throw(std::logic_error&);
     virtual void ToStream(std::ostringstream& theStr);
     virtual const char* GetComment() const;
     static const string myComment;
     QAD_StudyFrame* GetStudyFrame() const { return myStudyFrame;}
   };
-  //Storable* View3DRestore(SALOMEDS::SComponent_var& theSComponent, SALOMEDS::Study_var& theStudy,
-  //                     const char* thePrefix, const Storable::TRestoringMap& theMap);
 
   VTKViewer_ViewFrame* GetViewFrame(QAD_StudyFrame* theStudyFrame);
   vtkRenderer* GetRenderer(QAD_StudyFrame* theStudyFrame);
index ff40e7bca0df9610b2bbd7cd8b798ce3fbbb28c0..d4b0ac365519ae629a67ff508cb52ad15c48daa5 100644 (file)
@@ -44,7 +44,7 @@ SWIG_DEF = libVISU_Swig.i
 EXPORT_PYSCRIPTS = libVISU_Swig.py batchmode_visu.py batchmode_visu_table.py batchmode_visu_view3d.py \
        visu_med.py visu_view3d.py visu.py visu_gui.py visu_prs_example.py\
        visu_table.py visu_big_table.py visu_view.py \
-       visu_swig_test.py
+       visu_swig_test.py test_events.py batch_test_events.py
 EXPORT_SHAREDPYSCRIPTS = VISU_shared_modules.py
 
 LIB_CLIENT_IDL = 
diff --git a/src/VISU_SWIG/batch_test_events.py b/src/VISU_SWIG/batch_test_events.py
new file mode 100644 (file)
index 0000000..df7f3c3
--- /dev/null
@@ -0,0 +1,14 @@
+###############################################################
+#
+# File        : batch_test_events.py
+# Description : Test postEvent() functionality for VISU module
+#
+###############################################################
+
+import batchmode_visu
+
+for i in range ( 10 ):
+    batchmode_visu.myVisu.CreateTestView()
+    for j in range ( 10 ):
+        batchmode_visu.myVisu.ShowTestObject();
+
index 33f8d269e3d4d45f9b7f668b8c5393d95b3b9196..fa2034a745a833bcfadba89b3d1723948511c4ca 100644 (file)
@@ -8,22 +8,18 @@
 #  Module : VISU
 
 import os
-import batchmode_visu
+import time
 import VISU
 import SALOMEDS
+from batchmode_visu import *
+
+aDelay = 1
 
 #mySession = batchmode_visu.mySession
-myVisu = batchmode_visu.myVisu
 
 medFile = "fra.med"
 myFieldName = "VITESSE";
 
-#medFile = "minimail.dat"
-#myFieldName = "Pressures";
-
-#medFile = "brideResultats.dat"
-#myFieldName = "VM_Elem.";
-
 medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile
 myResult = myVisu.ImportFile(medFile)
 
@@ -34,52 +30,111 @@ aMesh = myVisu.MeshOnEntity(myResult, aMeshName, anEntity)
 
 aTimeStampId = 1
 
-#
 aScalarMap = myVisu.ScalarMapOnField(myResult,aMeshName,anEntity,myFieldName,aTimeStampId)
-if aScalarMap is not None:
-    aScalarMap.SetScaling(VISU.LOGARITHMIC)
-else:
-    print "Null scalar map is created"
 
-#
 aCutPlanes = myVisu.CutPlanesOnField(myResult,aMeshName,anEntity,myFieldName,aTimeStampId)
-if aCutPlanes is not None:
-    aCutPlanes.SetScaling(VISU.LOGARITHMIC)
-else:  print "Null aCutPlanes is created"
 
-#
 aIsoSurfaces = myVisu.IsoSurfacesOnField(myResult, aMeshName, anEntity, myFieldName, aTimeStampId)
-if aIsoSurfaces is not None:
-    aIsoSurfaces.SetScaling(VISU.LINEAR)
-else: print "Null aIsoSurfaces is created"
 
 myViewManager = myVisu.GetViewManager();
-#myView = myViewManager.Create3DView();
-myView = myViewManager.GetCurrentView();
+
+#myView = myViewManager.GetCurrentView();
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be soon destroyed!")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.Maximize()
+print "myView.Maximize()"
+time.sleep(aDelay)
+
+myView.Restore()
+print "myView.Restore()"
+time.sleep(aDelay)
+
+myView.Minimize()
+print "myView.Minimize()"
+time.sleep(aDelay)
+
+myViewManager.Destroy(myView)
+print "myViewManager.Destroy(myView)"
+time.sleep(aDelay)
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be set to 'AAA' view params")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.Display(aScalarMap);
+print "myView.Display(aScalarMap)"
 myView.SetFocalPoint([0,0,0]);
+print "myView.SetFocalPoint(...)"
+time.sleep(aDelay)
 myView.SetParallelScale(2);
+print "myView.SetParallelScale(...)"
+time.sleep(aDelay)
+
 aPoint = myView.GetPointOfView();
 aPoint[0] = aPoint[0] + 10;
 myView.SetPointOfView(aPoint);
+print "myView.SetPointOfView(...)"
 myView.ScaleView(VISU.View3D.YAxis,10.0);
 myView.ScaleView(VISU.View3D.XAxis,3.0);
+print "myView.ScaleView(...)"
+time.sleep(aDelay)
+
 aColor = SALOMEDS.Color(0.0,0.3,1.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
 myView.Update();
-myView.Display(aScalarMap);
-#myView.Erase(aScalarMap);
-#myView.DisplayOnly(aCutPlanes);
+print "myView.Update()"
+time.sleep(aDelay)
+
+myView.FitAll();
+print "myView.FitAll()"
+time.sleep(aDelay)
+
+myView.Erase(aScalarMap);
+print "myView.Erase(aScalarMap)"
+time.sleep(aDelay)
+
+myView.DisplayOnly(aCutPlanes);
+print "myView.DisplayOnly(aCutPlanes)"
 myView.SaveViewParams('AAA')
+print "myView.SaveViewParams('AAA')"
+time.sleep(aDelay)
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be set to 'BBB' view params")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.DisplayOnly(aIsoSurfaces);
+print "myView.DisplayOnly(aCutPlanes)"
+time.sleep(aDelay)
 
+myView.RestoreViewParams('AAA')
 myView.RemoveScale();
-myView.FitAll();
+print "myView.RemoveScale()"
+time.sleep(aDelay)
+
 aColor = SALOMEDS.Color(0.0,0.0,0.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
 myView.SaveViewParams('BBB');
+print "myView.SaveViewParams('BBB')"
+time.sleep(aDelay)
 
 aColor = SALOMEDS.Color(1.0,1.0,1.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
+time.sleep(aDelay)
+
 myView.ScaleView(VISU.View3D.ZAxis,0.5);
+print "myView.SetBackground(...)"
 myView.SaveViewParams('CCC');
+print "myView.SaveViewParams('CCC')"
+time.sleep(aDelay)
 
-myView.RestoreViewParams('AAA');
+myView.RestoreViewParams('BBB');
+print "myView.RestoreViewParams('BBB')"
diff --git a/src/VISU_SWIG/test_events.py b/src/VISU_SWIG/test_events.py
new file mode 100755 (executable)
index 0000000..c553eae
--- /dev/null
@@ -0,0 +1,22 @@
+###############################################################
+#
+# File        : test_events.py
+# Description : Test postEvent() functionality for VISU module
+#               This script can be run from GUI Python console only!
+###############################################################
+
+import salome
+
+# it's necessary to load VISU engine, this will cause VisuGUI to be loaded
+salome.lcc.FindOrLoadComponent("FactoryServer","VISU")
+
+# this can be done only after VISU engine has been loaded
+from libVISU_Swig import *
+
+visu=VISU_Swig()
+
+for i in range ( 10 ):
+    visu.CreateTestView()
+    for j in range ( 10 ):
+        visu.ShowTestObject();
+
index cb4fecf1d8fbfda004ab2987e26e617f8a0c6119..ea6d8ec2e207772659f6f7da143e491159a93997 100644 (file)
@@ -4,18 +4,18 @@
 #
 #
 #
-#  File   : visu_view3d.py
+#  File   : batchmode_visu_view3d.py
 #  Module : VISU
 
-import visu_gui
 import os
+import time
 import VISU
 import SALOMEDS
+from visu_gui import *
 
-from libSALOME_Swig import *
-sg = SALOMEGUI_Swig()
+aDelay = 1
 
-myVisu = visu_gui.myVisu
+#mySession = batchmode_visu.mySession
 
 medFile = "fra.med"
 myFieldName = "VITESSE";
@@ -23,63 +23,118 @@ myFieldName = "VITESSE";
 medFile = os.getenv('KERNEL_ROOT_DIR') + '/examples/' + medFile
 myResult = myVisu.ImportFile(medFile)
 
+
 aMeshName ="LE VOLUME"
 anEntity = VISU.NODE
 aMesh = myVisu.MeshOnEntity(myResult, aMeshName, anEntity)
 
 aTimeStampId = 1
 
-#
 aScalarMap = myVisu.ScalarMapOnField(myResult,aMeshName,anEntity,myFieldName,aTimeStampId)
-if aScalarMap is not None:
-    aScalarMap.SetScaling(VISU.LOGARITHMIC)
-else:
-    print "Null scalar map is created"
 
-#
 aCutPlanes = myVisu.CutPlanesOnField(myResult,aMeshName,anEntity,myFieldName,aTimeStampId)
-if aCutPlanes is not None:
-    aCutPlanes.SetScaling(VISU.LOGARITHMIC)
-else:  print "Null aCutPlanes is created"
 
-#
 aIsoSurfaces = myVisu.IsoSurfacesOnField(myResult, aMeshName, anEntity, myFieldName, aTimeStampId)
-if aIsoSurfaces is not None:
-    aIsoSurfaces.SetScaling(VISU.LINEAR)
-else: print "Null aIsoSurfaces is created"
 
 myViewManager = myVisu.GetViewManager();
-#myView = myViewManager.Create3DView();
-myView = myViewManager.GetCurrentView();
+
+#myView = myViewManager.GetCurrentView();
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be soon destroyed!")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.Maximize()
+print "myView.Maximize()"
+time.sleep(aDelay)
+
+myView.Restore()
+print "myView.Restore()"
+time.sleep(aDelay)
+
+myView.Minimize()
+print "myView.Minimize()"
+time.sleep(aDelay)
+
+myViewManager.Destroy(myView)
+print "myViewManager.Destroy(myView)"
+time.sleep(aDelay)
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be set to 'AAA' view params")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.Display(aScalarMap);
+print "myView.Display(aScalarMap)"
 myView.SetFocalPoint([0,0,0]);
+print "myView.SetFocalPoint(...)"
+time.sleep(aDelay)
 myView.SetParallelScale(2);
+print "myView.SetParallelScale(...)"
+time.sleep(aDelay)
+
 aPoint = myView.GetPointOfView();
 aPoint[0] = aPoint[0] + 10;
 myView.SetPointOfView(aPoint);
+print "myView.SetPointOfView(...)"
 myView.ScaleView(VISU.View3D.YAxis,10.0);
 myView.ScaleView(VISU.View3D.XAxis,3.0);
+print "myView.ScaleView(...)"
+time.sleep(aDelay)
+
 aColor = SALOMEDS.Color(0.0,0.3,1.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
 myView.Update();
-myView.Display(aScalarMap);
-#myView.Erase(aScalarMap);
-#myView.DisplayOnly(aCutPlanes);
+print "myView.Update()"
+time.sleep(aDelay)
+
+myView.FitAll();
+print "myView.FitAll()"
+time.sleep(aDelay)
+
+myView.Erase(aScalarMap);
+print "myView.Erase(aScalarMap)"
+time.sleep(aDelay)
+
+myView.DisplayOnly(aCutPlanes);
+print "myView.DisplayOnly(aCutPlanes)"
 myView.SaveViewParams('AAA')
+print "myView.SaveViewParams('AAA')"
+time.sleep(aDelay)
+
+myView = myViewManager.Create3DView();
+myView.SetTitle("The window will be set to 'BBB' view params")
+print "myViewManager.Create3DView()"
+time.sleep(aDelay)
+
+myView.DisplayOnly(aIsoSurfaces);
+print "myView.DisplayOnly(aCutPlanes)"
+time.sleep(aDelay)
 
+myView.RestoreViewParams('AAA')
 myView.RemoveScale();
-myView.FitAll();
+print "myView.RemoveScale()"
+time.sleep(aDelay)
+
 aColor = SALOMEDS.Color(0.0,0.0,0.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
 myView.SaveViewParams('BBB');
+print "myView.SaveViewParams('BBB')"
+time.sleep(aDelay)
 
 aColor = SALOMEDS.Color(1.0,1.0,1.0)
 myView.SetBackground(aColor);
+print "myView.SetBackground(...)"
+time.sleep(aDelay)
+
 myView.ScaleView(VISU.View3D.ZAxis,0.5);
+print "myView.SetBackground(...)"
 myView.SaveViewParams('CCC');
+print "myView.SaveViewParams('CCC')"
+time.sleep(aDelay)
 
-myView.RestoreViewParams('AAA');
-
-sg.updateObjBrowser(0)
-
-
-
+myView.RestoreViewParams('BBB');
+print "myView.RestoreViewParams('BBB')"