]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Fix single study problem in Python API
authorvsr <vsr@opencascade.com>
Mon, 17 Mar 2014 08:59:19 +0000 (12:59 +0400)
committervsr <vsr@opencascade.com>
Mon, 17 Mar 2014 08:59:19 +0000 (12:59 +0400)
- add methods to finalize current study
- finalize study from GUI when it is closed or unloaded

src/PyConsole/PyConsole_Editor.cxx
src/PyConsole/PyConsole_Interp.cxx
src/PyInterp/PyInterp_Interp.cxx
src/PyInterp/PyInterp_Interp.h
src/SalomeApp/SalomeApp_PyInterp.cxx
src/SalomeApp/SalomeApp_PyInterp.h

index 636ee54a7c2667537f86cdd68d4795c542a937b6..4caf5e48b329d94a7f1cca8038b1b3a962520674 100644 (file)
@@ -190,6 +190,9 @@ PyConsole_Editor::PyConsole_Editor( PyConsole_Interp* theInterp,
 */
 PyConsole_Editor::~PyConsole_Editor()
 {
+  myInterp->destroy();
+  delete myInterp;
+  myInterp = 0;
 }
 
 /*!
index 9d3d996caa3976c73a4ed41a16c7d6cbd83e12d9..10e6fa0e623c7dfb1483e5f68a5f155516ccb648 100644 (file)
@@ -77,6 +77,7 @@ bool PyConsole_Interp::initContext()
     PyErr_Print();
     return false;
   }  
-  _context = PyModule_GetDict(m);          // get interpreter dictionnary context
+  PyObject* global_dict = PyModule_GetDict(m);          // get interpreter dictionnary context
+  _context = PyDict_Copy(global_dict);
   return true;
 }
index 0ee1e017317d64418c976f8f005799f94b4c2e71..f70141b6bce92356d5a62159221ee31a2e154abb 100644 (file)
@@ -254,6 +254,12 @@ void PyInterp_Interp::initialize()
   initRun();
 }
 
+void PyInterp_Interp::destroy()
+{
+  PyLockWrapper lck;
+  closeContext();
+}
+
 /*!
   \brief Initialize Python interpreter.
 
@@ -302,6 +308,10 @@ bool PyInterp_Interp::initRun()
   return true;
 }
 
+void PyInterp_Interp::closeContext()
+{
+}
+
 /*!
   \brief Compile Python command and evaluate it in the
          python dictionary context if possible. This is not thread-safe.
index 55c2c70050b8c8e07dcd33a076ac750da208ef20..048bc448c84099bdcd6a5cc768dda1dc6532c452 100644 (file)
@@ -73,6 +73,7 @@ public:
   virtual ~PyInterp_Interp();
   
   void initialize();
+  void destroy();
 
   virtual int run(const char *command); 
 
@@ -106,6 +107,7 @@ protected:
   /** Initialize execution context. Must set the member _context, and return True on success. */
   virtual bool initContext() = 0;
   virtual bool initRun();
+  virtual void closeContext();
 };
 
 /**
index c2e329cc58f89f0564a405293d92893936d5bc68..a8d89daa927797bbe5a8671f9a6ef470f77ff73e 100755 (executable)
@@ -77,3 +77,9 @@ int SalomeApp_PyInterp::beforeRun()
   }
   return true;
 }
+
+void SalomeApp_PyInterp::closeContext()
+{
+    simpleRun( "import salome", false );
+    simpleRun( "salome.salome_close()", false );
+}
index 801121239718517f708de1e1b62ac6fe9dee35e7..ef556fcec4b2759ff0bf60cab6af3684acebfb04 100755 (executable)
@@ -36,6 +36,7 @@ public:
   virtual ~SalomeApp_PyInterp();
 
   virtual void initPython();
+  virtual void closeContext();
 
 protected:
   virtual int  beforeRun();