From a1664e81dd83e11828909d10b629ed04ea7d3467 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Tue, 21 Feb 2006 16:01:16 +0000 Subject: add eConsoleAppContainer to execute shell scripts or applications from python without blocking the mainloop --- lib/python/connections.h | 25 +++++++++++++++++-------- lib/python/enigma_python.i | 32 ++++++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 16 deletions(-) (limited to 'lib/python') diff --git a/lib/python/connections.h b/lib/python/connections.h index 3df7b565..ac5865e5 100644 --- a/lib/python/connections.h +++ b/lib/python/connections.h @@ -40,11 +40,6 @@ public: PyObject *get() { Py_INCREF(m_list); return m_list; } }; -inline PyObject *PyFrom(int v) -{ - return PyInt_FromLong(v); -} - template class PSignal0: public PSignal, public Signal0 { @@ -65,7 +60,21 @@ public: R operator()(V0 a0) { PyObject *pArgs = PyTuple_New(1); - PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0)); + PyTuple_SET_ITEM(pArgs, 0, PyInt_FromLong(a0)); + callPython(pArgs); + Py_DECREF(pArgs); + return Signal1::operator()(a0); + } +}; + +template +class PSignal1Str: public PSignal, public Signal1 +{ +public: + R operator()(V0 a0) + { + PyObject *pArgs = PyTuple_New(1); + PyTuple_SET_ITEM(pArgs, 0, PyString_FromString(a0)); callPython(pArgs); Py_DECREF(pArgs); return Signal1::operator()(a0); @@ -79,8 +88,8 @@ public: R operator()(V0 a0, V1 a1) { PyObject *pArgs = PyTuple_New(2); - PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0)); - PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1)); + PyTuple_SET_ITEM(pArgs, 0, PyInt_FromLong(a0)); + PyTuple_SET_ITEM(pArgs, 1, PyInt_FromLong(a1)); callPython(pArgs); Py_DECREF(pArgs); return Signal2::operator()(a0, a1); diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 8261385d..42315ce7 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -39,6 +39,7 @@ is usually caused by not marking PSignals as immutable. #include #include #include +#include #include #include #include @@ -138,6 +139,9 @@ typedef long time_t; // TODO: embed these... +%immutable eConsoleAppContainer::appClosed; +%immutable eConsoleAppContainer::dataAvail; +%immutable eConsoleAppContainer::dataSent; %immutable eButton::selected; %immutable eInput::changed; %immutable eComponentScan::statusChanged; @@ -145,6 +149,7 @@ typedef long time_t; %immutable pNavigation::m_event; %immutable eListbox::selectionChanged; +%include %include %include %include @@ -198,13 +203,13 @@ public: PyObject *get(); }; -template class PSignal1 -{ -public: - PyObject *get(); -}; +%template(PSignal0V) PSignal0; -template class PSignal2 +%typemap(out) PSignal0V { + $1 = $input->get(); +} + +template class PSignal1 { public: PyObject *get(); @@ -216,12 +221,23 @@ public: $1 = $input->get(); } -%template(PSignal0V) PSignal0; +template class PSignal1Str +{ +public: + PyObject *get(); +}; -%typemap(out) PSignal0V { +%template(PSignal1VS) PSignal1Str; + +%typemap(out) PSignal1VS { $1 = $input->get(); } +template class PSignal2 +{ +public: + PyObject *get(); +}; /************** debug **************/ -- cgit v1.2.3