dd4b8c7e53a44645dbdb3d32714e7355f95bfd96
[openblackhole/openblackhole-enigma2.git] / lib / python / enigma_python.i
1 /*
2   NOTE: you have two options when adding classes so that
3   they are callable *from* python.
4   
5    - either you %include the header file
6    - or you re-declare it
7    
8   In both cases, you must #include the required
9   header file (i.e. the header file itself), otherwise
10   enigma_python_wrap.cxx won't build.
11   
12         In case you import the whole header file,
13         please make sure that no unimportant stuff
14         is wrapped, as this makes the wrapper stuff
15         much more complex and it can probably break 
16         very easily because of missing typemaps etc.
17         
18         you could make use of dizzy macros to ensure
19         that some stuff is left out when parsed as SWIG
20         definitions, but be sure to not modify the binary 
21         representation. DON'T USE #ifdef SWIG_COMPILE
22         for leaving out stuff (unless you *really* know
23         what you are doing,of course!). you WILL break it.
24                 
25         The better way (with more work) is to re-declare
26         the class. It won't be compiled, so you can
27         leave out stuff as you like.
28
29
30
31 Oh, things like "operator= is private in this context" etc.
32 is usually caused by not marking PSignals as immutable. 
33 */
34
35 %module enigma
36 %{
37
38 #define SWIG_COMPILE
39 #include <lib/base/ebase.h>
40 #include <lib/base/smartptr.h>
41 #include <lib/base/eenv.h>
42 #include <lib/base/eerror.h>
43 #include <lib/base/etpm.h>
44 #include <lib/base/message.h>
45 #include <lib/driver/rc.h>
46 #include <lib/driver/rcinput_swig.h>
47 #include <lib/service/event.h>
48 #include <lib/service/iservice.h>
49 #include <lib/service/service.h>
50 #include <lib/service/servicedvb.h>
51 #include <lib/gdi/fb.h>
52 #include <lib/gdi/font.h>
53 #include <lib/gdi/gpixmap.h>
54 #include <lib/gdi/gfbdc.h>
55 #include <lib/gdi/grc.h>
56 #include <lib/gdi/gmaindc.h>
57 #include <lib/gui/ewidget.h>
58 #include <lib/gui/elabel.h>
59 #include <lib/gui/einput.h>
60 #include <lib/gui/einputstring.h>
61 #include <lib/gui/einputnumber.h>
62 #include <lib/gui/epixmap.h>
63 #include <lib/gui/ebutton.h>
64 #include <lib/gui/ewindow.h>
65 #include <lib/gui/ewidgetdesktop.h>
66 #include <lib/gui/ewindowstyle.h>
67 #include <lib/gui/ewindowstyleskinned.h>
68 #include <lib/gui/ewidgetanimation.h>
69 #include <lib/gui/eslider.h>
70 #include <lib/gui/epositiongauge.h>
71 #include <lib/gui/evideo.h>
72 #include <lib/gui/ecanvas.h>
73 #include <lib/python/connections.h>
74 #include <lib/python/pythonconfig.h>
75 #include <lib/gui/elistbox.h>
76 #include <lib/gui/elistboxcontent.h>
77 #include <lib/gui/esubtitle.h>
78 #include <lib/service/listboxservice.h>
79 #include <lib/nav/pcore.h>
80 #include <lib/actions/action.h>
81 #include <lib/gdi/gfont.h>
82 #include <lib/gdi/epng.h>
83 #include <lib/dvb/db.h>
84 #include <lib/dvb/frontendparms.h>
85 #include <lib/dvb/idvb.h>
86 #include <lib/dvb/dvb.h>
87 #include <lib/dvb/frontend.h>
88 #include <lib/dvb/volume.h>
89 #include <lib/dvb/sec.h>
90 #include <lib/dvb/epgcache.h>
91 #include <lib/dvb/dvbtime.h>
92 #include <lib/dvb/pmt.h>
93 #include <lib/dvb/cahandler.h>
94 #include <lib/dvb/fastscan.h>
95 #include <lib/dvb/cablescan.h>
96 #include <lib/dvb/encoder.h>
97 #include <lib/components/scan.h>
98 #include <lib/components/file_eraser.h>
99 #include <lib/components/tuxtxtapp.h>
100 #include <lib/driver/avswitch.h>
101 #include <lib/driver/hdmi_cec.h>
102 #include <lib/driver/rfmod.h>
103 #include <lib/driver/misc_options.h>
104 #include <lib/driver/etimezone.h>
105 #include <lib/gdi/lcd.h>
106 #include <lib/mmi/mmi_ui.h>
107 #include <lib/dvb_ci/dvbci.h>
108 #include <lib/dvb_ci/dvbci_ui.h>
109 #include <lib/python/python.h>
110 #include <lib/python/python_helpers.h>
111 #include <lib/gdi/picload.h>
112 %}
113
114 %feature("ref")   iObject "$this->AddRef(); /* eDebug(\"AddRef (%s:%d)!\", __FILE__, __LINE__); */ "
115 %feature("unref") iObject "$this->Release(); /* eDebug(\"Release! %s:%d\", __FILE__, __LINE__); */ "
116
117 /* this magic allows smartpointer to be used as OUTPUT arguments, i.e. call-by-reference-styled return value. */
118
119 %define %typemap_output_simple(Type)
120  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
121               Type &OUTPUT ($*1_ltype temp)
122    "$1 = new Type;";
123  %fragment("t_out_helper"{Type},"header",
124      fragment="t_output_helper") {}
125  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
126    "$result = t_output_helper($result, (SWIG_NewPointerObj((void*)($1), $1_descriptor, 1)));"
127 %enddef
128
129 %define %typemap_output_ptr(Type)
130  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
131               Type &OUTPUT ($*1_ltype temp)
132    "$1 = new Type;";
133  %fragment("t_out_helper"{Type},"header",
134      fragment="t_output_helper") {}
135  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
136                 // generate None if smartpointer is NULL
137    "$result = t_output_helper($result, ((*$1) ? SWIG_NewPointerObj((void*)($1), $1_descriptor, 1) : (delete $1, Py_INCREF(Py_None), Py_None)));"
138 %enddef
139
140
141 #define DEBUG
142 typedef long time_t;
143 %include "typemaps.i"
144 %include "std_string.i"
145 %include <lib/python/swig.h>
146 %include <lib/base/object.h>
147 %include <lib/base/eenv.h>
148 %include <lib/base/eerror.h>
149
150 %include <lib/python/python_dvb.i>
151 %include <lib/python/python_service.i>
152 %include <lib/python/python_pmt.i>
153 %include <lib/python/python_pcore.i>
154
155 %immutable eSocketNotifier::activated;
156 %include <lib/base/ebase.h>
157 %include <lib/base/smartptr.h>
158 %include <lib/service/event.h>
159 %include <lib/service/iservice.h>
160 %include <lib/service/service.h>
161
162 // TODO: embed these...
163 %immutable ePicLoad::PictureData;
164 %immutable eButton::selected;
165 %immutable eInput::changed;
166 %immutable eComponentScan::statusChanged;
167 %immutable eComponentScan::newService;
168 %immutable eFastScan::scanProgress;
169 %immutable eFastScan::scanCompleted;
170 %immutable eCableScan::scanProgress;
171 %immutable eCableScan::scanCompleted;
172 %immutable pNavigation::m_event;
173 %immutable pNavigation::m_record_event;
174 %immutable eListbox::selectionChanged;
175 %immutable eDVBCI_UI::ciStateChanged;
176 %immutable eSocket_UI::socketStateChanged;
177 %immutable eDVBResourceManager::frontendUseMaskChanged;
178 %immutable eAVSwitch::vcr_sb_notifier;
179 %immutable eHdmiCEC::messageReceived;
180 %immutable eHdmiCEC::addressChanged;
181 %immutable ePythonMessagePump::recv_msg;
182 %immutable eDVBLocalTimeHandler::m_timeUpdated;
183 %immutable iCryptoInfo::clientname;
184 %immutable iCryptoInfo::clientinfo;
185 %immutable iCryptoInfo::verboseinfo;
186 %immutable iCryptoInfo::usedcaid;
187 %immutable iCryptoInfo::decodetime;
188 %immutable iCryptoInfo::usedcardid;
189 %immutable eTuxtxtApp::appClosed;
190 %immutable iDVBChannel::receivedTsidOnid;
191 %include <lib/base/message.h>
192 %include <lib/base/etpm.h>
193 %include <lib/driver/rc.h>
194 %include <lib/driver/rcinput_swig.h>
195 %include <lib/gdi/fb.h>
196 %include <lib/gdi/font.h>
197 %include <lib/gdi/gpixmap.h>
198 %include <lib/gdi/gmaindc.h>
199 %include <lib/gdi/epoint.h>
200 %include <lib/gdi/erect.h>
201 %include <lib/gdi/esize.h>
202 %include <lib/gui/ewidget.h>
203 %include <lib/gui/elabel.h>
204 %include <lib/gui/einput.h>
205 %include <lib/gui/einputstring.h>
206 %include <lib/gui/einputnumber.h>
207 %include <lib/gui/epixmap.h>
208 %include <lib/gui/ecanvas.h>
209 %include <lib/gui/ebutton.h>
210 %include <lib/gui/ewindow.h>
211 %include <lib/gui/eslider.h>
212 %include <lib/gui/epositiongauge.h>
213 %include <lib/gui/ewidgetdesktop.h>
214 %include <lib/gui/elistbox.h>
215 %include <lib/gui/elistboxcontent.h>
216 %include <lib/gui/ewindowstyle.h>
217 %include <lib/gui/ewindowstyleskinned.h>
218 %include <lib/gui/ewidgetanimation.h>
219 %include <lib/gui/evideo.h>
220 %include <lib/gui/esubtitle.h>
221 %include <lib/service/listboxservice.h>
222 %include <lib/nav/pcore.h>
223 %include <lib/actions/action.h>
224 %include <lib/gdi/gfont.h>
225 %include <lib/gdi/epng.h>
226 %include <lib/dvb/volume.h>
227 %include <lib/dvb/sec.h>
228 %include <lib/dvb/epgcache.h>
229 %include <lib/dvb/frontendparms.h>
230 %include <lib/dvb/dvbtime.h>
231 %include <lib/dvb/idvb.h>
232 %include <lib/dvb/dvb.h>
233 %include <lib/dvb/frontend.h>
234 %include <lib/dvb/pmt.h>
235 %include <lib/dvb/cahandler.h>
236 %include <lib/dvb/fastscan.h>
237 %include <lib/dvb/cablescan.h>
238 %include <lib/components/scan.h>
239 %include <lib/components/file_eraser.h>
240 %include <lib/components/tuxtxtapp.h>
241 %include <lib/driver/avswitch.h>
242 %include <lib/driver/hdmi_cec.h>
243 %include <lib/driver/rfmod.h>
244 %include <lib/driver/misc_options.h>
245 %include <lib/driver/etimezone.h>
246 %include <lib/gdi/lcd.h>
247 %include <lib/mmi/mmi_ui.h>
248 %include <lib/dvb_ci/dvbci.h>
249 %include <lib/dvb_ci/dvbci_ui.h>
250 %include <lib/dvb/db.h>
251 %include <lib/python/python.h>
252 %include <lib/python/pythonconfig.h>
253 %include <lib/gdi/picload.h>
254 /**************  eptr  **************/
255
256 /**************  signals  **************/
257
258 template<class R> class PSignal0
259 {
260 public:
261         PyObject *get();
262 };
263
264 %template(PSignal0V) PSignal0<void>;
265
266 %typemap(out) PSignal0V {
267         $1 = $input->get();
268 }
269
270 template<class R, class P0> class PSignal1
271 {
272 public:
273         PyObject *get();
274 };
275
276 %template(PSignal1VI) PSignal1<void,int>;
277 %template(PSignal1VS) PSignal1<void,const char *c>;
278
279 %typemap(out) PSignal1VI {
280         $1 = $input->get();
281 }
282
283 %typemap(out) PSignal1VS {
284         $1 = $input->get();
285 }
286
287 %template(PSignal1VoidICECMessage) PSignal1<void,ePtr<iCECMessage>&>;
288
289 %typemap(out) PSignal1VoidICECMessage {
290         $1 = $input->get();
291 }
292
293 template<class R, class P0, class P1> class PSignal2
294 {
295 public:
296         PyObject *get();
297 };
298
299 %template(PSignal2VoidIRecordableServiceInt) PSignal2<void,ePtr<iRecordableService>&,int>;
300
301 %typemap(out) PSignal2VoidIRecordableServiceInt {
302         $1 = $input->get();
303 }
304
305 %template(PSignal2VII) PSignal2<void,int,int>;
306
307 %typemap(out) PSignal2VII {
308         $1 = $input->get();
309 }
310
311 %{
312 RESULT SwigFromPython(ePtr<gPixmap> &result, PyObject *obj)
313 {       
314         ePtr<gPixmap> *res;
315
316         res = 0;
317         result = 0;
318 #ifndef SWIGTYPE_p_ePtrT_gPixmap_t
319 #define SWIGTYPE_p_ePtrT_gPixmap_t SWIGTYPE_p_ePtrTgPixmap_t
320 #endif
321         if (SWIG_Python_ConvertPtr(obj, (void **)&res, SWIGTYPE_p_ePtrT_gPixmap_t, SWIG_POINTER_EXCEPTION | 0))
322                 return -1;
323         if (!res)
324                 return -1;
325         result = *res;
326         return 0;
327 }
328 PyObject *New_eServiceReference(const eServiceReference &ref)
329 {
330     eServiceReference *result = new eServiceReference(ref);
331     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_eServiceReference, 1);
332 }
333 PyObject *New_iRecordableServicePtr(const ePtr<iRecordableService> &ptr)
334 {
335     ePtr<iRecordableService> *result = new ePtr<iRecordableService>(ptr);
336 #ifndef SWIGTYPE_p_ePtrT_iRecordableService_t
337 #define SWIGTYPE_p_ePtrT_iRecordableService_t SWIGTYPE_p_ePtrTiRecordableService_t
338 #endif
339     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_ePtrT_iRecordableService_t, 1);
340 }
341 PyObject *New_iCECMessagePtr(const ePtr<iCECMessage> &ptr)
342 {
343     ePtr<iCECMessage> *result = new ePtr<iCECMessage>(ptr);
344 #ifndef SWIGTYPE_p_ePtrT_iCECMessage_t
345 #define SWIGTYPE_p_ePtrT_iCECMessage_t SWIGTYPE_p_ePtrTiCECMessage_t
346 #endif
347     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_ePtrT_iCECMessage_t, 1);
348 }
349 %}
350
351 /* needed for service groups */
352
353 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false);
354 %{
355 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false)
356 {
357         eStaticServiceDVBBouquetInformation info;
358         if (info.isPlayable(bouquet_ref, ignore, simulate))
359                 return New_eServiceReference(info.getPlayableService());
360         Py_INCREF(Py_None);
361         return Py_None;
362 }
363 %}
364
365 void setTunerTypePriorityOrder(int);
366 %{
367 void setTunerTypePriorityOrder(int order)
368 {
369         eDVBFrontend::setTypePriorityOrder(order);
370 }
371 %}
372
373 void setPreferredTuner(int);
374 %{
375 void setPreferredTuner(int index)
376 {
377         eDVBFrontend::setPreferredFrontend(index);
378 }
379 %}
380
381 void setSpinnerOnOff(int);
382 %{
383 void setSpinnerOnOff(int onoff)
384 {
385         gRC *rc = gRC::getInstance();
386         if (rc) rc->setSpinnerOnOff(onoff);
387 }
388 %}
389
390 void setEnableTtCachingOnOff(int);
391 %{
392 void setEnableTtCachingOnOff(int onoff)
393 {
394         eTuxtxtApp *tt = eTuxtxtApp::getInstance();
395         if (tt) tt->setEnableTtCachingOnOff(onoff);
396 }
397 %}
398
399 int getUsedEncoderCount();
400 %{
401 int getUsedEncoderCount()
402 {
403         eEncoder *encoders = eEncoder::getInstance();
404         if (encoders) return encoders->getUsedEncoderCount();
405         return 0;
406 }
407 %}
408
409 /************** temp *****************/
410
411         /* need a better place for this, i agree. */
412 %{
413 extern void runMainloop();
414 extern void quitMainloop(int exit_code);
415 extern eApplication *getApplication();
416 extern int getPrevAsciiCode();
417 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement, int renderflags = 0);
418 extern const char *getEnigmaVersionString();
419 extern const char *getBoxType();
420 extern const char *getGStreamerVersionString();
421 extern void dump_malloc_stats(void);
422 %}
423
424 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement, int renderflags = 0);
425 extern int getPrevAsciiCode();
426 extern void runMainloop();
427 extern void quitMainloop(int exit_code);
428 extern eApplication *getApplication();
429 extern const char *getEnigmaVersionString();
430 extern const char *getBoxType();
431 extern const char *getGStreamerVersionString();
432 extern void dump_malloc_stats(void);
433
434 %include <lib/python/python_console.i>
435 %include <lib/python/python_base.i>