aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-02-21 16:01:16 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-02-21 16:01:16 +0000
commita1664e81dd83e11828909d10b629ed04ea7d3467 (patch)
treece8f13091dc7a16cd181315ea956f3f3726ab2d0 /lib/python
parent8841c38f30a89f83ab9b89528fb90297591bd21c (diff)
downloadenigma2-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.h25
-rw-r--r--lib/python/enigma_python.i32
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 **************/