]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
VISU::ViewManager methods adapted for event posting
authorsmh <smh@opencascade.com>
Mon, 12 Apr 2004 08:54:36 +0000 (08:54 +0000)
committersmh <smh@opencascade.com>
Mon, 12 Apr 2004 08:54:36 +0000 (08:54 +0000)
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI.h
src/VISU_Event/Makefile.in
src/VISU_Event/VISU_Event.cxx
src/VISU_Event/VISU_Event.h
src/VISU_I/VISU_Gen_i.cc
src/VISU_I/VISU_ViewManager_i.cc
src/VISU_I/VISU_ViewManager_i.hh

index 71087e3998ca323db2933855825ca82d9c5a42ad..6fd8031a3a8aa839c3352478d37b094c58caef7b 100644 (file)
@@ -679,11 +679,17 @@ bool VisuGUI::ProcessEvent(SALOME_Event* se)
     VISU_Event* ve = dynamic_cast<VISU_Event*>( se );
     if ( ve ) {
       switch ( se->getType() ) {
+      case VISU_Event::Create3DView:
+      case VISU_Event::CreateTableView:
+      case VISU_Event::CreateXYPlot:
+      case VISU_Event::DestroyView:
+       OnViewEvent( ve );
+       break;
       case VISU_Event::CreateTestViewEvent:
-       VisuGUI::CreateTestView();
+       CreateTestView();
        break;
       case VISU_Event::ShowTestObjectEvent:
-       VisuGUI::ShowTestObject();
+       ShowTestObject();
        break;
       }
       return true;
@@ -4002,6 +4008,56 @@ void VisuGUI::SetActiveDialogBox(QDialog* aDlg)
        return ;
 }
 
+// SAN - QT_EVENT prototype 
+// SALOME event handlers
+//===========================================================
+/*!
+ *  Function: VisuGUI::OnViewEvent
+ *  Purpose:  Handles events posted by VISU_ViewManager_i
+ */
+//===========================================================
+void VisuGUI::OnViewEvent( VISU_Event* e )
+{
+  if ( !e )
+    return;
+
+  VISU_ViewEvent* ve = dynamic_cast<VISU_ViewEvent*>( e );
+  if ( !ve )
+    return;
+
+  VISU::ViewManager_i* aVmImpl = dynamic_cast<VISU::ViewManager_i*>( ve->sender());
+  if ( !aVmImpl )
+    return;
+
+  switch( ve->getType() ) {
+  case VISU_Event::Create3DView:
+  {
+    VISU::View3D_ptr aView = aVmImpl->OnCreate3DView();
+    ve->setView( aView );
+    break;
+  }
+  case VISU_Event::CreateTableView:
+  {
+    VISU::Table_var aTable    = VISU::Table::_narrow( ve->getArg() );
+    VISU::TableView_ptr aView = aVmImpl->OnCreateTableView( aTable.in() );
+    ve->setView( aView );
+    break;
+  }
+  case VISU_Event::CreateXYPlot:
+  {
+    VISU::XYPlot_ptr aView = aVmImpl->OnCreateXYPlot();
+    ve->setView( aView );
+    break;
+  }
+  case VISU_Event::DestroyView:
+    aVmImpl->OnDestroy( ve->getView() );
+    ve->setView( VISU::View::_nil() );
+    break;
+  default:
+    break;
+  }
+}
+
 void VisuGUI::CreateTestView()
 {
   QAD_Desktop* desktop = VisuGUI::GetDesktop();
@@ -4057,3 +4113,4 @@ void VisuGUI::ShowTestObject()
   vf->getRenderer()->AddActor(sphere);
   vf->Repaint();
 }
+// SAN - QT_EVENT prototype 
index f9c7dec4c6267b1f59e34b6dfe20023f5c1a4b5f..38ea0d11d736c702c2a9873d2b3259a1653195be 100644 (file)
@@ -42,6 +42,8 @@
 class VTKViewer_ViewFrame;
 
 #include "VISUConfig.hh"
+class VISU_Event;
+class VISU_ViewEvent;
 class VISU_Actor;
 class VISU_MeshAct;
 class VISU_ScalarMapAct;
@@ -95,8 +97,6 @@ class VisuGUI : public SALOMEGUI{
   static SALOMEDS::Study_var GetStudyDocument();
   static SALOMEDS::StudyBuilder_var NewBuilder();
   static VISU::Storable::TRestoringMap getMapOfValue(SALOMEDS::SObject_var theSObject);
-  static void CreateTestView();
-  static void ShowTestObject(); 
 
   static VISU::Result_i*  CreatePresent(SALOMEDS::SObject_var theField, VISU::Result_var& theResult);
 
@@ -271,6 +271,15 @@ public slots:
 
   void SelectionInfo();
 
+private:
+  // SAN - QT_EVENT prototype 
+  // SALOME event handlers
+  void OnViewEvent( VISU_Event* e );
+
+  void CreateTestView();
+  void ShowTestObject();
+  // SAN - QT_EVENT prototype 
+
 private :
   QDialog* myActiveDialogBox;
   int myState ;
index e0d7b858d6a3433deaa4e5ccdff4818ca41d5869..9a74fd1802540f6f46c2c49fbfbe4a09a3b8c392 100644 (file)
@@ -42,6 +42,9 @@ LIB = libVISUEvent.la
 LIB_SRC = \
                 VISU_Event.cxx
 
+LIB_CLIENT_IDL = SALOME_GenericObj.idl \
+                VISU_Gen.idl
+
 # additionnal information to compil and link file
 
 CPPFLAGS += $(QT_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
index d0df7c1d5dc9ae6e3c48aab030afc70b40290969..3c6569603d54211c9be61b3bcec6f1d768bd8426 100644 (file)
  *  Constructor
  */
 //===========================================================
-VISU_Event::VISU_Event( int eventType, bool wait, bool autoRelease ) : SALOME_Event ( eventType, wait, autoRelease )
+VISU_Event::VISU_Event( int eventType, bool wait, VISU::Base_i* aSender, bool autoRelease ) 
+: SALOME_Event ( eventType, wait, autoRelease ),
+  mySender( aSender )
 {
 }
 
 //===========================================================
 /*!
- *  VISU_Event::VISU_Event
+ *  VISU_Event::~VISU_Event
  *  Destructor
  */
 //===========================================================
 VISU_Event::~VISU_Event()
 {
 }
+
+//===========================================================
+/*!
+ *  VISU_ViewEvent::VISU_ViewEvent
+ *  Constructor
+ */
+//===========================================================
+VISU_ViewEvent::VISU_ViewEvent( int eventType, bool wait, VISU::Base_i* aSender, bool autoRelease ) 
+: VISU_Event ( eventType, wait, aSender, autoRelease )
+{
+  myArg  = VISU::Base::_nil();
+  myView = VISU::View::_nil();
+}
+
+//===========================================================
+/*!
+ *  VISU_ViewEvent::~VISU_ViewEvent
+ *  Destructor
+ */
+//===========================================================
+VISU_ViewEvent::~VISU_ViewEvent()
+{
+}
+
+//===========================================================
+/*!
+ *  Function: VISU_ViewEvent::SetArg
+ *  Purpose:  Sets argument of view creation
+ */
+//===========================================================
+void VISU_ViewEvent::setArg( VISU::Base_ptr theArg )
+{
+  myArg = theArg;
+}
+
+//===========================================================
+/*!
+ *  Function: VISU_ViewEvent::GetArg
+ *  Purpose:  Returns argument of view creation
+ */
+//===========================================================
+VISU::Base_ptr VISU_ViewEvent::getArg()
+{
+  return myArg;
+}
+
+//===========================================================
+/*!
+ *  Function: VISU_ViewEvent::SetView
+ *  Purpose:
+ */
+//===========================================================
+void VISU_ViewEvent::setView( VISU::View_ptr theView )
+{
+  myView = theView;
+}
+
+//===========================================================
+/*!
+ *  Function: VISU_ViewEvent::GetView
+ *  Purpose:
+ */
+//===========================================================
+VISU::View_ptr VISU_ViewEvent::getView()
+{
+  return myView;
+}
+
index f535ef9cc311ee1e6ef0635729fdcd778ca2194a..5db9571621374f7e2e55dee45fb299c28a1a147c 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "SALOME_Event.hxx"
 
+#include "VISUConfig.hh"
+
 // VISU event types: 10000...10999
 #define VISU_START_EVENT 10000
 
 class VISU_Event : public SALOME_Event {
 public:
   enum { 
-    CreateTestViewEvent = VISU_START_EVENT, 
+    Create3DView = VISU_START_EVENT,
+    CreateTableView,
+    CreateXYPlot,
+    DestroyView,
+    // san - test events
+    CreateTestViewEvent, 
     ShowTestObjectEvent, 
+    // san - test events
     LastEvent = VISU_START_EVENT + 1000 };
 
-  VISU_Event( int eventType, bool wait, bool autoRelease = false );
+  VISU_Event( int eventType, bool wait, VISU::Base_i* sender = 0, bool autoRelease = false );
   virtual ~VISU_Event();
 
-  // Custom data can be added here...
+  VISU::Base_i* sender() { return mySender; }
+
+private:
+  VISU::Base_i* mySender;
+};
+
+class VISU_ViewEvent : public VISU_Event 
+{
+public:
+  VISU_ViewEvent( int eventType, bool wait, VISU::Base_i* sender = 0, bool autoRelease = false );
+  virtual ~VISU_ViewEvent();
+
+  void           setArg( VISU::Base_ptr );
+  VISU::Base_ptr getArg();
+
+  void           setView( VISU::View_ptr );
+  VISU::View_ptr getView();
+private:
+  VISU::Base_ptr myArg;
+  VISU::View_ptr myView;
 };
 
 #endif
index e8a8f82d60d921085b059bf0971726be81428115..39edd18e8d261764f3ed4e433e69ef5d354259a3 100644 (file)
@@ -894,7 +894,7 @@ namespace VISU{
   */
   void VISU_Gen_i::CreateTestView() {
     if(myMutex){
-      VISU_Event* ve = new VISU_Event( VISU_Event::CreateTestViewEvent, true );
+      VISU_Event* ve = new VISU_Event( VISU_Event::CreateTestViewEvent, true, this );
       ve->process();
       ve->release();
       return;
@@ -904,7 +904,7 @@ namespace VISU{
 
   void VISU_Gen_i::ShowTestObject() {
     if(myMutex){
-      VISU_Event* ve = new VISU_Event( VISU_Event::ShowTestObjectEvent, true );
+      VISU_Event* ve = new VISU_Event( VISU_Event::ShowTestObjectEvent, true, this );
       ve->process();
       ve->release();
       return;
index 61da0aab79dcf841e14f67ec72cb56edc9bbee9a..f50908a456f6ee90ef4c9ae74819e02057222469 100644 (file)
@@ -43,6 +43,8 @@
 #include "VISU_ScalarBarActor.hxx"
 #include "VISU_Actor.h"
 
+#include "VISU_Event.h"
+
 #include "QAD_Application.h"
 #include "QAD_Desktop.h"
 #include "QAD_Tools.h"
@@ -213,6 +215,23 @@ namespace VISU{
       }
     }
   }
+
+  QAD_Study* CheckStudy( SALOMEDS::Study_ptr theStudy ) {
+    QAD_Desktop* aDesktop = QAD_Application::getDesktop();
+    QAD_Study* aStudy = aDesktop->findStudy(theStudy);
+    if(!aStudy){
+      CORBA::String_var aName = theStudy->Name();
+      aFileInfo.setFile(aName.in());
+      if (aFileInfo.exists()) 
+       aStudy = aDesktop->loadStudy(aFileInfo.baseName());
+      else 
+       aStudy = aDesktop->loadStudy(aName.in());
+      if (!aStudy) {
+       MESSAGE("CheckStudy()::ERROR: Can't load study");
+      }
+    }
+    return aStudy;
+  }
   //===========================================================================
   /*
   #include <qthread.h> 
@@ -239,27 +258,16 @@ namespace VISU{
     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_ViewEvent* ve = new VISU_ViewEvent( VISU_Event::Create3DView, true, this );
+    ve->process();
+    VISU::View3D_ptr aView = VISU::View3D::_narrow( ve->getView() );
+    ve->release();
+    return aView;
   }
 
 
@@ -288,66 +296,92 @@ namespace VISU{
 
   VISU::XYPlot_ptr ViewManager_i::CreateXYPlot(){
     if(MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
-    if(pView->Create(1) != NULL) 
-      return VISU::XYPlot::_duplicate(pView->_this());
-    return VISU::XYPlot::_nil();
+    VISU_ViewEvent* ve = new VISU_ViewEvent( VISU_Event::CreateXYPlot, true, this );
+    ve->process();
+    VISU::XYPlot_ptr aView = VISU::XYPlot::_narrow( ve->getView() );
+    ve->release();
+    return aView;
   }
 
 
   VISU::TableView_ptr ViewManager_i::CreateTableView(VISU::Table_ptr theTable){
     if(MYDEBUG) MESSAGE("ViewManager_i::CreateTableView");
-    Mutex mt(myMutex,qApp,MYDELAY);
-    VISU::TableView_i* pView = new TableView_i(myStudyDocument);
-    if(pView->Create(VISU::Table::_duplicate(theTable)) != NULL) 
-      return VISU::TableView::_duplicate(pView->_this());
-    return VISU::TableView::_nil();
+    VISU_ViewEvent* ve = new VISU_ViewEvent( VISU_Event::CreateTableView, true, this );
+    ve->setArg( theTable );
+    ve->process();
+    VISU::TableView_ptr aView = VISU::TableView::_narrow( ve->getView() );
+    ve->release();
+    return aView;
   }
 
 
   void ViewManager_i::Destroy(View_ptr theView){
     if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
+    VISU_ViewEvent* ve = new VISU_ViewEvent( VISU_Event::DestroyView, true, this );
+    ve->setView( theView );
+    ve->process();
+    ve->release();
+  }
+
+  // SAN - QT_EVENT prototype 
+  // SALOME event handlers  
+  View3D_ptr ViewManager_i::OnCreate3DView() {
+    Mutex mt(myMutex,qApp,MYDELAY);
+    if(MYDEBUG) MESSAGE("ViewManager_i::OnCreate3DView");
+    // Make sure that myStudyDocument is opened in the desktop
+    if ( CheckStudy( myStudyDocument ) ) {
+      VISU::View3D_i* pView = new View3D_i(myStudyDocument);
+      if(pView->Create(1) != NULL) 
+       return VISU::View3D::_duplicate(pView->_this());
+    }
+    return VISU::View3D::_nil();    
+  }
+
+  VISU::TableView_ptr ViewManager_i::OnCreateTableView(VISU::Table_ptr theTable){
+    if(MYDEBUG) MESSAGE("ViewManager_i::OnCreateTableView");
+    Mutex mt(myMutex,qApp,MYDELAY);
+    if ( CheckStudy( myStudyDocument ) ) {
+      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();
+  }  
+
+  VISU::XYPlot_ptr ViewManager_i::OnCreateXYPlot(){
+    if(MYDEBUG) MESSAGE("ViewManager_i::OnCreateXYPlot");
+    Mutex mt(myMutex,qApp,MYDELAY);
+    if ( CheckStudy( myStudyDocument ) ) {
+      VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
+      if(pView->Create(1) != NULL) 
+       return VISU::XYPlot::_duplicate(pView->_this());
+    }
+    return VISU::XYPlot::_nil();
+  }
+
+  void ViewManager_i::OnDestroy(View_ptr theView){
+    if(MYDEBUG) MESSAGE("ViewManager_i::OnDestroy - "<<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)));
+      if(MYDEBUG) MESSAGE("ViewManager_i::OnDestroy - 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(MYDEBUG) MESSAGE("ViewManager_i::OnDestroy - dynamic_cast"<<pView);
       if(pView) {
        pView->Close();
        pView->_remove_ref();
       }
-      //if(pView) delete pView;
       return;
     }
   }
-
-
-  void ViewManager_i::ProcessEvents() {
-    while (true) {
-      qApp->lock();
-      qApp->syncX();
-      qApp->flushX(); 
-      qApp->processEvents();
-      qApp->unlock();
-      //sleep(1);
-    }
-  }
+  // SAN - QT_EVENT prototype 
 
 
   //===========================================================================
   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());
   }
 
index 9463e7542aded12f9c97d891445886c4821a6696..0fb263644e7e9eacfba54f40c9a0c2f337cc00e7 100644 (file)
@@ -51,12 +51,19 @@ 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);
+
+    // SAN - QT_EVENT prototype 
+    // SALOME event handlers
+    virtual View3D_ptr    OnCreate3DView();
+    virtual TableView_ptr OnCreateTableView(VISU::Table_ptr theTable);
+    virtual XYPlot_ptr    OnCreateXYPlot();
+    virtual void          OnDestroy(View_ptr theView);
+    // SAN - QT_EVENT prototype 
 
   protected:
     SALOMEDS::Study_var myStudyDocument;