Support turbo2.
[vuplus_dvbapp] / 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/nconfig.h>
45 #include <lib/base/message.h>
46 #include <lib/driver/rc.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/gmaindc.h>
55 #include <lib/gui/ewidget.h>
56 #include <lib/gui/elabel.h>
57 #include <lib/gui/einput.h>
58 #include <lib/gui/einputstring.h>
59 #include <lib/gui/einputnumber.h>
60 #include <lib/gui/epixmap.h>
61 #include <lib/gui/ebutton.h>
62 #include <lib/gui/ewindow.h>
63 #include <lib/gui/ewidgetdesktop.h>
64 #include <lib/gui/ewindowstyle.h>
65 #include <lib/gui/ewindowstyleskinned.h>
66 #include <lib/gui/ewidgetanimation.h>
67 #include <lib/gui/eslider.h>
68 #include <lib/gui/epositiongauge.h>
69 #include <lib/gui/evideo.h>
70 #include <lib/gui/ecanvas.h>
71 #include <lib/python/connections.h>
72 #include <lib/gui/elistbox.h>
73 #include <lib/gui/elistboxcontent.h>
74 #include <lib/gui/esubtitle.h>
75 #include <lib/service/listboxservice.h>
76 #include <lib/nav/pcore.h>
77 #include <lib/actions/action.h>
78 #include <lib/gdi/gfont.h>
79 #include <lib/gdi/epng.h>
80 #include <lib/dvb/db.h>
81 #include <lib/dvb/frontendparms.h>
82 #include <lib/dvb/idvb.h>
83 #include <lib/dvb/dvb.h>
84 #include <lib/dvb/frontend.h>
85 #include <lib/dvb/volume.h>
86 #include <lib/dvb/sec.h>
87 #include <lib/dvb/epgcache.h>
88 #include <lib/dvb/dvbtime.h>
89 #include <lib/dvb/pmt.h>
90 #include <lib/components/scan.h>
91 #include <lib/components/file_eraser.h>
92 #include <lib/driver/avswitch.h>
93 #include <lib/driver/hdmi_cec.h>
94 #include <lib/driver/rfmod.h>
95 #include <lib/driver/misc_options.h>
96 #include <lib/driver/etimezone.h>
97 #include <lib/gdi/lcd.h>
98 #include <lib/mmi/mmi_ui.h>
99 #include <lib/dvb_ci/dvbci.h>
100 #include <lib/dvb_ci/dvbci_ui.h>
101 #include <lib/python/python.h>
102 #include <lib/gdi/picload.h>
103 #include <lib/dvb/fcc.h>
104 %}
105
106 %feature("ref")   iObject "$this->AddRef(); /* eDebug(\"AddRef (%s:%d)!\", __FILE__, __LINE__); */ "
107 %feature("unref") iObject "$this->Release(); /* eDebug(\"Release! %s:%d\", __FILE__, __LINE__); */ "
108
109 /* this magic allows smartpointer to be used as OUTPUT arguments, i.e. call-by-reference-styled return value. */
110
111 %define %typemap_output_simple(Type)
112  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
113               Type &OUTPUT ($*1_ltype temp)
114    "$1 = new Type;";
115  %fragment("t_out_helper"{Type},"header",
116      fragment="t_output_helper") {}
117  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
118    "$result = t_output_helper($result, (SWIG_NewPointerObj((void*)($1), $1_descriptor, 1)));"
119 %enddef
120
121 %define %typemap_output_ptr(Type)
122  %typemap(in,numinputs=0) Type *OUTPUT ($*1_ltype temp),
123               Type &OUTPUT ($*1_ltype temp)
124    "$1 = new Type;";
125  %fragment("t_out_helper"{Type},"header",
126      fragment="t_output_helper") {}
127  %typemap(argout,fragment="t_out_helper"{Type}) Type *OUTPUT, Type &OUTPUT
128                 // generate None if smartpointer is NULL
129    "$result = t_output_helper($result, ((*$1) ? SWIG_NewPointerObj((void*)($1), $1_descriptor, 1) : (delete $1, Py_INCREF(Py_None), Py_None)));"
130 %enddef
131
132
133 #define DEBUG
134 #define BUILD_VUPLUS
135 typedef long time_t;
136 %include "typemaps.i"
137 %include "std_string.i"
138 %include <lib/python/swig.h>
139 %include <lib/base/object.h>
140 %include <lib/base/eenv.h>
141 %include <lib/base/eerror.h>
142
143 %immutable eSocketNotifier::activated;
144 %include <lib/base/ebase.h>
145 %include <lib/base/smartptr.h>
146 %include <lib/service/event.h>
147 %include <lib/service/iservice.h>
148 %include <lib/service/service.h>
149
150 // TODO: embed these...
151 %immutable ePicLoad::PictureData;
152 %immutable eButton::selected;
153 %immutable eInput::changed;
154 %immutable eComponentScan::statusChanged;
155 %immutable eComponentScan::newService;
156 %immutable pNavigation::m_event;
157 %immutable pNavigation::m_record_event;
158 %immutable eListbox::selectionChanged;
159 %immutable eDVBCI_UI::ciStateChanged;
160 %immutable eSocket_UI::socketStateChanged;
161 %immutable eDVBResourceManager::frontendUseMaskChanged;
162 %immutable eAVSwitch::vcr_sb_notifier;
163 %immutable eHdmiCEC::messageReceived;
164 %immutable eHdmiCEC::messageReceivedKey;
165 %immutable ePythonMessagePump::recv_msg;
166 %immutable eDVBLocalTimeHandler::m_timeUpdated;
167 %immutable eFCCServiceManager::m_fcc_event;
168 %include <lib/base/message.h>
169 %include <lib/base/etpm.h>
170 %include <lib/base/nconfig.h>
171 %include <lib/driver/rc.h>
172 %include <lib/gdi/fb.h>
173 %include <lib/gdi/font.h>
174 %include <lib/gdi/gpixmap.h>
175 %include <lib/gdi/gmaindc.h>
176 %include <lib/gdi/epoint.h>
177 %include <lib/gdi/erect.h>
178 %include <lib/gdi/esize.h>
179 %include <lib/gui/ewidget.h>
180 %include <lib/gui/elabel.h>
181 %include <lib/gui/einput.h>
182 %include <lib/gui/einputstring.h>
183 %include <lib/gui/einputnumber.h>
184 %include <lib/gui/epixmap.h>
185 %include <lib/gui/ecanvas.h>
186 %include <lib/gui/ebutton.h>
187 %include <lib/gui/ewindow.h>
188 %include <lib/gui/eslider.h>
189 %include <lib/gui/epositiongauge.h>
190 %include <lib/gui/ewidgetdesktop.h>
191 %include <lib/gui/elistbox.h>
192 %include <lib/gui/elistboxcontent.h>
193 %include <lib/gui/ewindowstyle.h>
194 %include <lib/gui/ewindowstyleskinned.h>
195 %include <lib/gui/ewidgetanimation.h>
196 %include <lib/gui/evideo.h>
197 %include <lib/gui/esubtitle.h>
198 %include <lib/service/listboxservice.h>
199 %include <lib/nav/pcore.h>
200 %include <lib/actions/action.h>
201 %include <lib/gdi/gfont.h>
202 %include <lib/gdi/epng.h>
203 %include <lib/dvb/volume.h>
204 %include <lib/dvb/sec.h>
205 %include <lib/dvb/epgcache.h>
206 %include <lib/dvb/frontendparms.h>
207 %include <lib/dvb/dvbtime.h>
208 %include <lib/dvb/idvb.h>
209 %include <lib/dvb/dvb.h>
210 %include <lib/dvb/frontend.h>
211 %include <lib/dvb/pmt.h>
212 %include <lib/components/scan.h>
213 %include <lib/components/file_eraser.h>
214 %include <lib/driver/avswitch.h>
215 %include <lib/driver/hdmi_cec.h>
216 %include <lib/driver/rfmod.h>
217 %include <lib/driver/misc_options.h>
218 %include <lib/driver/etimezone.h>
219 %include <lib/gdi/lcd.h>
220 %include <lib/mmi/mmi_ui.h>
221 %include <lib/dvb_ci/dvbci.h>
222 %include <lib/dvb_ci/dvbci_ui.h>
223 %include <lib/dvb/db.h>
224 %include <lib/python/python.h>
225 %include <lib/gdi/picload.h>
226 %include <lib/dvb/fcc.h>
227 /**************  eptr  **************/
228
229 /**************  signals  **************/
230
231 template<class R> class PSignal0
232 {
233 public:
234         PyObject *get();
235 };
236
237 %template(PSignal0V) PSignal0<void>;
238
239 %typemap(out) PSignal0V {
240         $1 = $input->get();
241 }
242
243 template<class R, class P0> class PSignal1
244 {
245 public:
246         PyObject *get();
247 };
248
249 %template(PSignal1VI) PSignal1<void,int>;
250 %template(PSignal1VS) PSignal1<void,const char *c>;
251
252 %typemap(out) PSignal1VI {
253         $1 = $input->get();
254 }
255
256 %typemap(out) PSignal1VS {
257         $1 = $input->get();
258 }
259
260 template<class R, class P0, class P1> class PSignal2
261 {
262 public:
263         PyObject *get();
264 };
265
266 %template(PSignal2VoidIRecordableServiceInt) PSignal2<void,ePtr<iRecordableService>&,int>;
267
268 %typemap(out) PSignal2VoidIRecordableServiceInt {
269         $1 = $input->get();
270 }
271
272 %template(PSignal2VII) PSignal2<void,int,int>;
273
274 %typemap(out) PSignal2VII {
275        $1 = $input->get();
276 }
277
278 %{
279 RESULT SwigFromPython(ePtr<gPixmap> &result, PyObject *obj)
280 {       
281         ePtr<gPixmap> *res;
282
283         res = 0;
284         result = 0;
285 #ifndef SWIGTYPE_p_ePtrT_gPixmap_t
286 #define SWIGTYPE_p_ePtrT_gPixmap_t SWIGTYPE_p_ePtrTgPixmap_t
287 #endif
288         if (SWIG_Python_ConvertPtr(obj, (void **)&res, SWIGTYPE_p_ePtrT_gPixmap_t, SWIG_POINTER_EXCEPTION | 0))
289                 return -1;
290         if (!res)
291                 return -1;
292         result = *res;
293         return 0;
294 }
295 PyObject *New_eServiceReference(const eServiceReference &ref)
296 {
297     eServiceReference *result = new eServiceReference(ref);
298     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_eServiceReference, 1);
299 }
300 PyObject *New_iRecordableServicePtr(const ePtr<iRecordableService> &ptr)
301 {
302     ePtr<iRecordableService> *result = new ePtr<iRecordableService>(ptr);
303 #ifndef SWIGTYPE_p_ePtrT_iRecordableService_t
304 #define SWIGTYPE_p_ePtrT_iRecordableService_t SWIGTYPE_p_ePtrTiRecordableService_t
305 #endif
306     return SWIG_NewPointerObj((void*)(result), SWIGTYPE_p_ePtrT_iRecordableService_t, 1);
307 }
308 %}
309
310 /* needed for service groups */
311
312 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false);
313 %{
314 PyObject *getBestPlayableServiceReference(const eServiceReference &bouquet_ref, const eServiceReference &ignore, bool simulate=false)
315 {
316         eStaticServiceDVBBouquetInformation info;
317         if (info.isPlayable(bouquet_ref, ignore, simulate))
318                 return New_eServiceReference(info.getPlayableService());
319         Py_INCREF(Py_None);
320         return Py_None;
321 }
322 %}
323
324 void setTunerTypePriorityOrder(int);
325 %{
326 void setTunerTypePriorityOrder(int order)
327 {
328         eDVBFrontend::setTypePriorityOrder(order);
329 }
330 %}
331
332 void setPreferredTuner(int);
333 %{
334 void setPreferredTuner(int index)
335 {
336         eDVBFrontend::setPreferredFrontend(index);
337 }
338 %}
339
340 int getLinkedSlotID(int);
341 %{
342 int getLinkedSlotID(int fe)
343 {
344         eFBCTunerManager *mgr = eFBCTunerManager::getInstance();
345         if (mgr) return mgr->getLinkedSlotID(fe);
346         return -1;
347 }
348 %}
349
350 void setFCCEnable(int);
351 %{
352 void setFCCEnable(int enable)
353 {
354         eFCCServiceManager *fcc_mng = eFCCServiceManager::getInstance();
355         if (fcc_mng) setFCCEnable(enable);
356 }
357 %}
358
359 bool isFBCLink(int);
360 %{
361 bool isFBCLink(int fe)
362 {
363         eFBCTunerManager *mgr = eFBCTunerManager::getInstance();
364         if (mgr) return mgr->isFBCLink(fe);
365         return false;
366 }
367 %}
368
369 /************** temp *****************/
370
371         /* need a better place for this, i agree. */
372 %{
373 extern void runMainloop();
374 extern void quitMainloop(int exit_code);
375 extern eApplication *getApplication();
376 extern int getPrevAsciiCode();
377 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
378 extern const char *getEnigmaVersionString();
379 extern void dump_malloc_stats(void);
380 extern void setAnimation_current(int a);
381 extern void setAnimation_speed(int speed);
382 extern void setAnimation_current_listbox(int a);
383 %}
384
385 extern void addFont(const char *filename, const char *alias, int scale_factor, int is_replacement);
386 extern int getPrevAsciiCode();
387 extern void runMainloop();
388 extern void quitMainloop(int exit_code);
389 extern eApplication *getApplication();
390 extern const char *getEnigmaVersionString();
391 extern void dump_malloc_stats(void);
392 extern void setAnimation_current(int a);
393 extern void setAnimation_speed(int speed);
394 extern void setAnimation_current_listbox(int a);