df28bcd75c4c01bf1ef7c64884ae757018d517bf
[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/driver/rc.h>
25
26 #ifdef OBJECT_DEBUG
27 int object_total_remaining;
28
29 void object_dump()
30 {
31         printf("%d items left\n", object_total_remaining);
32 }
33 #endif
34
35 void dumpRegion(const gRegion &region)
36 {
37         fprintf(stderr, "extends: %d %d -> %d %d (%d rects)\n", 
38                 region.extends.left(), region.extends.top(),
39                 region.extends.right(), region.extends.bottom(), region.rects.size());
40         for (int y=0; y<region.extends.bottom(); ++y)
41         {
42                 for (int x=0; x<region.extends.right(); ++x)
43                 {
44                         unsigned char res = ' ';
45                         for (unsigned int i=0; i < region.rects.size(); ++i)
46                                 if (region.rects[i].contains(ePoint(x, y)))
47                                         res = '0' + i;
48                         fprintf(stderr, "%c", res);
49                 }
50                 fprintf(stderr, "\n");
51         }
52 }
53
54
55 class eMain: public eApplication, public Object
56 {
57         eInit init;
58 public:
59         eMain()
60         {
61                 init.setRunlevel(eAutoInitNumbers::main);
62         }
63 };
64
65 eWidgetDesktop *wdsk;
66
67 // typedef struct _object PyObject;
68
69 void print(int i)
70 {
71         printf("C++ says: it's a %d!!!\n", i);
72 }
73
74 PSignal1<void,int> keyPressed;
75
76 PSignal1<void,int> &keyPressedSignal()
77 {
78         return keyPressed;
79 }
80
81 void keyEvent(const eRCKey &key)
82 {
83         if (!key.flags)
84                 keyPressed(key.code);
85 }
86
87 int main(int argc, char **argv)
88 {
89 #ifdef OBJECT_DEBUG
90         atexit(object_dump);
91 #endif
92
93
94 #if 1
95         eMain main;
96
97         ePtr<gFBDC> my_dc;
98         gFBDC::getInstance(my_dc);
99
100         gPainter p(my_dc);
101         
102         gRGB pal[256];
103         pal[0] = 0;
104         pal[1] = 0xff00ff;
105         pal[2] = 0xffFFff;
106         pal[3] = 0x00ff00;
107         
108         for (int a=0; a<0x10; ++a)
109                 pal[a | 0x10] = 0x111111 * a;
110         for (int a=0; a<0x10; ++a)
111                 pal[a | 0x20] = (0x111100 * a) | 0xFF;
112         for (int a=0; a<0x10; ++a)
113                 pal[a | 0x30] = (0x110011 * a) | 0xFF00;
114         for (int a=0; a<0x10; ++a)
115                 pal[a | 0x40] = (0x001111 * a) | 0xFF0000;
116         p.setPalette(pal, 0, 256);
117
118         fontRenderClass::getInstance()->AddFont("/dbox2/cdkroot/share/fonts/arial.ttf", "Arial", 100);
119
120         eWidgetDesktop dsk(eSize(720, 576));
121         
122         wdsk = &dsk;
123         dsk.setBackgroundColor(gColor(0));
124         dsk.setDC(my_dc);
125 #endif
126
127                 /* redrawing is done in an idle-timer, so we have to set the context */
128         dsk.setRedrawTask(main);
129         
130         eRCInput::getInstance()->keyEvent.connect(slot(keyEvent));
131         
132         ePython python;
133         
134         printf("executing main\n");
135         python.execute("mytest", "__main__");
136
137         return 0;
138 }
139
140 eWidgetDesktop *getDesktop()
141 {
142         return wdsk;
143 }
144
145 void runMainloop()
146 {
147         eApp->exec();
148 }