Salome HOME
PR: mergefrom_PAL_OCC_21Oct04
[modules/kernel.git] / src / SALOMEGUI / PyInterp_PyQt.cxx
1 //  SALOME SALOMEGUI : implementation of desktop and GUI kernel
2 //
3 //  Copyright (C) 2003  CEA/DEN, EDF R&D
4 //
5 //
6 //
7 //  File   : PyInterp_PyQt.cxx
8 //  Author : Christian CAREMOLI, Paul RASCLE, EDF
9 //  Module : SALOME
10 //  $Header$
11
12 #include "PyInterp_PyQt.h"
13 #include "utilities.h"
14
15 using namespace std;
16
17
18 /*!
19  * constructor : the main SALOME Python interpreter is used for PyQt GUI.
20  * calls initialize method defined in base class, which calls virtual methods
21  * initstate & initcontext redefined here
22  */
23 PyInterp_PyQt::PyInterp_PyQt(): PyInterp_base()
24 {
25 }
26
27 PyInterp_PyQt::~PyInterp_PyQt()
28 {
29 }
30
31 void PyInterp_PyQt::initState()
32 {
33   SCRUTE(PyInterp_base::_gtstate);
34   _tstate=PyInterp_base::_gtstate;
35   PyThreadState_Swap(_tstate);
36   SCRUTE(_tstate);
37 }
38
39 void PyInterp_PyQt::initContext()
40 {
41   _g = PyDict_New();          // create interpreter dictionnary context
42   PyObject *bimod = PyImport_ImportModule("__builtin__");
43   PyDict_SetItemString(_g, "__builtins__", bimod);
44   Py_DECREF(bimod);
45 }
46
47 void PyInterp_PyQt::run(const char *command)
48 {
49   MESSAGE("compile");
50   PyLockWrapper aLock(_tstate);
51   PyObject *code = Py_CompileString((char *)command,"PyGUI",Py_file_input);
52   if(!code){
53     // Une erreur s est produite en general SyntaxError
54     PyErr_Print();
55     return;
56   }
57   PyObject *r = PyEval_EvalCode(code,_g,_g);
58   Py_DECREF(code);
59   if(!r){
60     // Une erreur s est produite a l execution
61     PyErr_Print();
62     return;
63   }
64   Py_DECREF(r);
65 }
66