diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-02-21 16:01:16 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-02-21 16:01:16 +0000 |
| commit | a1664e81dd83e11828909d10b629ed04ea7d3467 (patch) | |
| tree | ce8f13091dc7a16cd181315ea956f3f3726ab2d0 /lib/python | |
| parent | 8841c38f30a89f83ab9b89528fb90297591bd21c (diff) | |
| download | enigma2-a1664e81dd83e11828909d10b629ed04ea7d3467.tar.gz enigma2-a1664e81dd83e11828909d10b629ed04ea7d3467.zip | |
add eConsoleAppContainer to execute shell scripts or applications from python without blocking the mainloop
Diffstat (limited to 'lib/python')
| -rw-r--r-- | lib/python/connections.h | 25 | ||||
| -rw-r--r-- | lib/python/enigma_python.i | 32 |
2 files changed, 41 insertions, 16 deletions
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 R> class PSignal0: public PSignal, public Signal0<R> { @@ -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<R,V0>::operator()(a0); + } +}; + +template <class R, class V0> +class PSignal1Str: public PSignal, public Signal1<R,V0> +{ +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<R,V0>::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<R,V0,V1>::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 <lib/base/ebase.h> #include <lib/base/smartptr.h> #include <lib/base/eerror.h> +#include <lib/base/console.h> #include <lib/service/iservice.h> #include <lib/service/service.h> #include <lib/service/event.h> @@ -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 <lib/base/console.h> %include <lib/gdi/font.h> %include <lib/gdi/gpixmap.h> %include <lib/gdi/epoint.h> @@ -198,13 +203,13 @@ public: PyObject *get(); }; -template<class R, class P0> class PSignal1 -{ -public: - PyObject *get(); -}; +%template(PSignal0V) PSignal0<void>; -template<class R, class P0, class P1> class PSignal2 +%typemap(out) PSignal0V { + $1 = $input->get(); +} + +template<class R, class P0> class PSignal1 { public: PyObject *get(); @@ -216,12 +221,23 @@ public: $1 = $input->get(); } -%template(PSignal0V) PSignal0<void>; +template<class R, class P0> class PSignal1Str +{ +public: + PyObject *get(); +}; -%typemap(out) PSignal0V { +%template(PSignal1VS) PSignal1Str<void,const char*>; + +%typemap(out) PSignal1VS { $1 = $input->get(); } +template<class R, class P0, class P1> class PSignal2 +{ +public: + PyObject *get(); +}; /************** debug **************/ |
