- fixed console input mode restore
[enigma2.git] / main / enigma.cpp
1 #include <stdio.h>
2 #include <libsig_comp.h>
3 #include <lib/base/ebase.h>
4 #include <lib/base/eerror.h>
5 #include <lib/base/init.h>
6 #include <lib/base/init_num.h>
7
8 #include <unistd.h>
9
10 #include <lib/gdi/grc.h>
11 #include <lib/gdi/gfbdc.h>
12 #include <lib/gdi/font.h> 
13
14 #include <lib/gui/ewidget.h>
15 #include <lib/gui/ewidgetdesktop.h>
16 #include <lib/gui/elabel.h>
17 #include <lib/gui/ebutton.h>
18
19 #include <lib/gui/ewindow.h>
20
21 #include <lib/python/python.h>
22 #include <lib/python/connections.h>
23
24 #include <lib/gui/elistboxcontent.h>
25
26 #include <lib/driver/rc.h>
27
28 #ifdef OBJECT_DEBUG
29 int object_total_remaining;
30
31 void object_dump()
32 {
33         printf("%d items left\n", object_total_remaining);
34 }
35 #endif
36
37 void dumpRegion(const gRegion &region)
38 {
39         fprintf(stderr, "extends: %d %d -> %d %d (%d rects)\n", 
40                 region.extends.left(), region.extends.top(),
41                 region.extends.right(), region.extends.bottom(), region.rects.size());
42         for (int y=0; y<region.extends.bottom(); ++y)
43         {
44                 for (int x=0; x<region.extends.right(); ++x)
45                 {
46                         unsigned char res = ' ';
47                         for (unsigned int i=0; i < region.rects.size(); ++i)
48                                 if (region.rects[i].contains(ePoint(x, y)))
49                                         res = '0' + i;
50                         fprintf(stderr, "%c", res);
51                 }
52                 fprintf(stderr, "\n");
53         }
54 }
55
56 eWidgetDesktop *wdsk;
57
58 // typedef struct _object PyObject;
59
60 void print(int i)
61 {
62         printf("C++ says: it's a %d!!!\n", i);
63 }
64
65 PSignal1<void,int> keyPressed;
66
67 PSignal1<void,int> &keyPressedSignal()
68 {
69         return keyPressed;
70 }
71
72 void keyEvent(const eRCKey &key)
73 {
74         if (!key.flags)
75                 keyPressed(key.code);
76 }
77
78 /************************************************/
79 #include <unistd.h>
80 #include <lib/components/scan.h>
81 #include <lib/dvb/idvb.h>
82 #include <lib/dvb/dvb.h>
83 #include <lib/dvb/db.h>
84
85 class eMain: public eApplication, public Object
86 {
87         eInit init;
88         
89         ePtr<eDVBResourceManager> m_mgr;
90         ePtr<eDVBDB> m_dvbdb;
91
92         ePtr<eComponentScan> m_scan;
93         
94 public:
95         eMain()
96         {
97                 init.setRunlevel(eAutoInitNumbers::main);
98
99                                 /* TODO: put into init */
100                 m_dvbdb = new eDVBDB();
101                 m_mgr = new eDVBResourceManager();
102                 
103                 m_mgr->setChannelList(m_dvbdb);
104                 
105 //              m_scan = new eComponentScan();
106 //              m_scan->start();
107
108         }
109         
110         ~eMain()
111         {
112                 m_scan = 0;
113         }
114 };
115
116 /************************************************/
117
118
119 int main(int argc, char **argv)
120 {
121 #ifdef OBJECT_DEBUG
122         atexit(object_dump);
123 #endif
124
125
126         ePython python;
127         eMain main;
128
129 #if 1
130         ePtr<gFBDC> my_dc;
131         gFBDC::getInstance(my_dc);
132
133         gPainter p(my_dc);
134         
135         gRGB pal[256];
136         pal[0] = 0;
137         pal[1] = 0xff00ff;
138         pal[2] = 0xffFFff;
139         pal[3] = 0x00ff00;
140         
141         for (int a=0; a<0x10; ++a)
142                 pal[a | 0x10] = 0x111111 * a;
143         for (int a=0; a<0x10; ++a)
144                 pal[a | 0x20] = (0x111100 * a) | 0xFF;
145         for (int a=0; a<0x10; ++a)
146                 pal[a | 0x30] = (0x110011 * a) | 0xFF00;
147         for (int a=0; a<0x10; ++a)
148                 pal[a | 0x40] = (0x001111 * a) | 0xFF0000;
149         p.setPalette(pal, 0, 256);
150
151         fontRenderClass::getInstance()->AddFont("/dbox2/cdkroot/share/fonts/arial.ttf", "Arial", 100);
152
153         eWidgetDesktop dsk(eSize(720, 576));
154         
155         wdsk = &dsk;
156         dsk.setBackgroundColor(gColor(0));
157         dsk.setDC(my_dc);
158 #endif
159
160                 /* redrawing is done in an idle-timer, so we have to set the context */
161         dsk.setRedrawTask(main);
162         
163         eRCInput::getInstance()->keyEvent.connect(slot(keyEvent));
164         
165         printf("executing main\n");
166         python.execute("mytest", "__main__");
167
168 //      eApp->exec();
169
170         return 0;
171 }
172
173 eWidgetDesktop *getDesktop()
174 {
175         return wdsk;
176 }
177
178 void runMainloop()
179 {
180         eApp->exec();
181 }
182
183 void quitMainloop()
184 {
185         eApp->quit(0);
186 }