Salome HOME
CMake improvement: editing of SALOME_GUI_MODE() macro, checking of optional dependenc...
[modules/gui.git] / src / PVViewer / PVViewer_EngineWrapper.cxx
index 7ec6271da795652b25039c991f29f28a06df7b50..e9c8abd8bc5e06893134cd087779ac6a2fe81370 100644 (file)
 #include "PVViewer_EngineWrapper.h"
 #include <Utils_SALOME_Exception.hxx>
 
-//#include <SalomeApp_Application.h>
 #include <SUIT_Session.h>
+#include <PyInterp_Utils.h>
+
+class PVViewer_EngineWrapper::Private
+{
+public:
+  PyObjWrapper pvserverEngine;
+};
 
 PVViewer_EngineWrapper * PVViewer_EngineWrapper::instance = NULL;
 
@@ -33,69 +39,9 @@ PVViewer_EngineWrapper * PVViewer_EngineWrapper::GetInstance()
   return instance;
 }
 
-//static SalomeApp_Application* getApplication()
-//{
-//  if ( SUIT_Session::session() )
-//    return dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
-//  return 0;
-//}
-//
-//PVViewer_EngineWrapper::PVViewer_EngineWrapper()
-//// : pvserverEngine(NULL)
-//{
-//  _component = getApplication()->lcc()->FindOrLoad_Component( "FactoryServer", "PARAVIS" );
-//}
-//
-//bool PVViewer_EngineWrapper::GetGUIConnected()
-//{
-//  CORBA::Request_var req = _component->_request("GetGUIConnected");
-//  req->set_return_type(CORBA::_tc_boolean);
-//  req->invoke();
-//  CORBA::Exception *exc =req->env()->exception();
-//  if( exc )
-//    throw SALOME_Exception("Unable to invoke PARAVIS engine!");
-//  CORBA::Any & ret = req->return_value();
-//  CORBA::Boolean bo;
-//
-//  if (ret >>= bo)
-//    return bool(bo);
-//  else
-//    throw SALOME_Exception("Unable to convert engine result!");
-//}
-//
-//void PVViewer_EngineWrapper::SetGUIConnected(bool isConnected)
-//{
-//  CORBA::Request_var req = _component->_request("SetGUIConnected");
-//  CORBA::Boolean arg = isConnected;
-//  req->add_in_arg() <<= arg;
-//  req->set_return_type(CORBA::_tc_void);
-//  req->invoke();
-//  CORBA::Exception *exc =req->env()->exception();
-//  if( exc )
-//    throw SALOME_Exception("Unable to invoke PARAVIS engine!");
-//}
-//
-//std::string PVViewer_EngineWrapper::FindOrStartPVServer(int port)
-//{
-//  CORBA::Request_var req = _component->_request("FindOrStartPVServer");
-//  CORBA::Long arg = port;
-//  req->add_in_arg() <<= arg;
-//  req->set_return_type(CORBA::_tc_string);
-//  req->invoke();
-//  CORBA::Exception *exc =req->env()->exception();
-//  if( exc )
-//    throw SALOME_Exception("Unable to invoke PARAVIS engine!");
-//
-//  const char* ret;
-//  if(req->return_value() >>= ret)
-//    return std::string(ret);
-//  else
-//    throw SALOME_Exception("Unable to convert engine result!");
-//}
-
-PVViewer_EngineWrapper::PVViewer_EngineWrapper() :
-    pvserverEngine(NULL)
+PVViewer_EngineWrapper::PVViewer_EngineWrapper()
 {
+  myData = new Private;
   PyLockWrapper lock;
   const char* code = "import PVSERVER_utils as pa;__enginePVSERVER=pa.getEngine()";
   int ret = PyRun_SimpleString(const_cast<char*>(code));
@@ -107,15 +53,18 @@ PVViewer_EngineWrapper::PVViewer_EngineWrapper() :
   PyObject* main_module = PyImport_AddModule((char*)"__main__");
   PyObject* global_dict = PyModule_GetDict(main_module);
   PyObjWrapper tmp(PyDict_GetItemString(global_dict, "__enginePVSERVER"));
-  pvserverEngine = tmp;
+  myData->pvserverEngine = tmp;
 }
 
-
+PVViewer_EngineWrapper::~PVViewer_EngineWrapper()
+{
+  delete myData;
+}
 
 bool PVViewer_EngineWrapper::GetGUIConnected()
 {
   PyLockWrapper lock;
-  PyObjWrapper obj(PyObject_CallMethod(pvserverEngine, (char*)("GetGUIConnected"), NULL));
+  PyObjWrapper obj(PyObject_CallMethod(myData->pvserverEngine, (char*)("GetGUIConnected"), NULL));
   if (!obj)
     {
       PyErr_Print();
@@ -128,7 +77,7 @@ void PVViewer_EngineWrapper::SetGUIConnected(bool isConnected)
 {
   PyLockWrapper lock;
 
-  PyObjWrapper obj(PyObject_CallMethod(pvserverEngine, (char*)("SetGUIConnected"),
+  PyObjWrapper obj(PyObject_CallMethod(myData->pvserverEngine, (char*)("SetGUIConnected"),
                                        (char *)"i", (int)isConnected ) );
   if (!obj)
     {
@@ -140,7 +89,7 @@ void PVViewer_EngineWrapper::SetGUIConnected(bool isConnected)
 std::string PVViewer_EngineWrapper::FindOrStartPVServer(int port)
 {
   PyLockWrapper lock;
-  PyObjWrapper obj(PyObject_CallMethod(pvserverEngine, (char*)("FindOrStartPVServer"),
+  PyObjWrapper obj(PyObject_CallMethod(myData->pvserverEngine, (char*)("FindOrStartPVServer"),
                                          (char *)"i", port ) );
   if (!obj)
     {
@@ -155,7 +104,7 @@ std::string PVViewer_EngineWrapper::FindOrStartPVServer(int port)
 void PVViewer_EngineWrapper::PutPythonTraceStringToEngine(const char * str)
 {
   PyLockWrapper lock;
-  PyObjWrapper obj(PyObject_CallMethod(pvserverEngine, (char*)("PutPythonTraceStringToEngine"),
+  PyObjWrapper obj(PyObject_CallMethod(myData->pvserverEngine, (char*)("PutPythonTraceStringToEngine"),
                                        (char *)"s",  str) );
   if (!obj)
     {