e66e43b1818c7dd28535f0f804d50cbdbf2e5887
[enigma2.git] / components.py
1 from enigma import *
2 import time
3
4 # some helper classes first:
5 class HTMLComponent:
6         def produceHTML(self):
7                 return ""
8                 
9 class HTMLSkin:
10         order = ()
11
12         def __init__(self, order):
13                 self.order = order
14
15         def produceHTML(self):
16                 res = "<html>\n"
17                 for name in self.order:
18                         res += self[name].produceHTML()
19                 res += "</html>\n";
20                 return res
21
22 class GUISkin:
23         data = { }
24         def createGUIScreen(self, parent):
25                 for (name, val) in self.items():
26                         self.data[name] = { }
27                         val.GUIcreate(self.data[name], parent, None)
28
29 class GUIComponent:
30         """ GUI component """
31
32         def __init__(self):
33                 self.notifier = [ ]
34         
35         def GUIcreate(self, priv, parent, skindata):
36                 i = self.GUIcreateInstance(self, parent, skindata)
37                 priv["instance"] = i
38                 print str(self) + " notifier list before " + str(self.notifier)
39                 self.notifier.append(i)
40                 print str(self) + " notifier list now " + str(self.notifier)
41                 if self.notifierAdded:
42                         self.notifierAdded(i)
43
44 class VariableText:
45         """VariableText can be used for components which have a variable text, based on any widget with setText call"""
46         
47         def __init__(self):
48                 self.message = ""
49         
50         def notifierAdded(self, notifier):
51                 notifier.setText(self.message)
52
53         def setText(self, text):
54                 if self.message != text:
55                         self.message = text
56                         print self.notifier
57                         for x in self.notifier:
58                                 x.setText(self.message)
59
60         def getText(self):
61                 return self.message
62
63 class VariableValue:
64         """VariableValue can be used for components which have a variable value (like eSlider), based on any widget with setValue call"""
65         
66         def __init__(self):
67                 self.value = 0
68         
69         def notifierAdded(self, notifier):
70                 notifier.setValue(self.value)
71
72         def setValue(self, value):
73                 if self.value != value:
74                         self.value = value
75                         for x in self.notifier:
76                                 x.setValue(self.value)
77
78         def getValue(self):
79                 return self.value
80
81 # now some "real" components:
82
83 class Clock(HTMLComponent, GUIComponent, VariableText):
84         def __init__(self):
85                 VariableText.__init__(self)
86                 GUIComponent.__init__(self)
87                 self.doClock()
88
89 # "funktionalitaet"     
90         def doClock(self):
91                 self.setText("clock: " + time.asctime())
92
93 # realisierung als GUI
94         def GUIcreateInstance(self, priv, parent, skindata):
95                 g = eLabel(parent)
96                 return g
97
98 # ...und als HTML:
99         def produceHTML(self):
100                 return self.getText()
101
102 class Button(HTMLComponent, GUIComponent, VariableText):
103         onClick = {}
104         
105         def __init__(self, text=""):
106                 GUIComponent.__init__(self)
107                 VariableText.__init__(self)
108                 self.setText(text)
109         
110         def click(self):
111                 for x in self.onClick:
112                         x()
113
114 # html: 
115         def produceHTML(self):
116                 return "<input type=\"submit\" text=\"" + self.getText() + "\">\n"
117
118 # GUI:
119         def GUIcreateInstance(self, priv, parent, skindata):
120                 g = eButton(parent)
121 #               g.clicked = [ self.click ]
122                 return g
123
124 class Header(HTMLComponent, GUIComponent, VariableText):
125
126         def __init__(self, message):
127                 GUIComponent.__init__(self)
128                 VariableText.__init__(self)
129                 self.setText(message)
130         
131         def produceHTML(self):
132                 return "<h2>" + self.getText() + "</h2>\n"
133
134         def GUIcreateInstance(self, priv, parent, skindata):
135                 g = eLabel(parent)
136                 g.setText(self.message)
137                 return g
138
139 class VolumeBar(HTMLComponent, GUIComponent, VariableValue):
140         
141         def __init__(self):
142                 GUIComponent.__init__(self)
143                 VariableValue.__init__(self)
144
145         def GUIcreateInstance(self, priv, parent, skindata):
146                 g = eSlider(parent)
147                 g.setRange(0, 100)
148                 return g
149