- improved parser
[enigma2.git] / screens.py
1 from components import *
2 import sys
3 from enigma import quitMainloop
4
5 # some screens
6 def doGlobal(screen):
7         screen["clock"] = Clock()
8
9 class Screen(dict, HTMLSkin, GUISkin):
10         """ bla """
11
12         def __init__(self, session):
13                 self.skinName = self.__class__.__name__
14                 self.session = session
15                 GUISkin.__init__(self)
16                 
17         def execBegin(self):
18                 for (name, val) in self.items():
19                         val.execBegin()
20         
21         def execEnd(self):
22                 for (name, val) in self.items():
23                         val.execEnd()
24         
25         # never call this directly - it will be called from the session!
26         def doClose(self):
27                 GUISkin.close(self)
28                 
29                 for (name, val) in self.items():
30                         print "%s -> %d" % (name, sys.getrefcount(val))
31                         del self[name]
32         
33         def close(self, retval=None):
34                 self.session.close()
35
36 class mainMenu(Screen):
37         
38         def goEmu(self):
39                 self["title"].setText("EMUs ARE ILLEGAL AND NOT SUPPORTED!")
40         
41         def goTimeshift(self):
42                 self["title"].setText("JUST PRESS THE YELLOW BUTTON!")
43         
44         def goHDTV(self):
45                 self["title"].setText("HDTV GREEN FLASHES: ENABLED")
46         
47         def goScan(self):
48                 self.session.open(serviceScan)
49         
50         def goClock(self):
51                 self.session.open(clockDisplay, Clock())
52
53         def okbuttonClick(self):
54                 selection = self["menu"].getCurrent()
55                 selection[1]()
56         
57         def __init__(self, session):
58                 Screen.__init__(self, session)
59                 b = Button("ok")
60
61                 self["actions"] = ActionMap(["OkCancelActions"], 
62                         {
63                                 "ok": self.okbuttonClick,
64                                 "cancel": self.close
65                         })
66
67                 b.onClick = [ self.okbuttonClick ]
68                 self["okbutton"] = b
69                 self["title"] = Header("Main Menu! - press ok to leave!")
70                 self["menu"] = MenuList(
71                         [
72                                 ("Close Main Menu", self.close),
73                                 ("Service Scan", self.goScan),
74                                 ("Quit", quitMainloop),
75                                 ("EMU SETUP", self.goEmu),
76                                 ("TIMESHIFT SETUP", self.goTimeshift),
77                                 ("HDTV PIP CONFIG", self.goHDTV),
78                                 ("wie spaet ists?!", self.goClock)
79                         ])
80
81 #class mainMenu(Screen):
82 #       def __init__(self):
83 #               GUISkin.__init__(self)
84 #               
85 #               self["title"] = Header("this is the\nMAIN MENU !!!");
86 #               self["okbutton"] = Button("ok")
87 #               self["okbutton"].onClick = [ self.close ]
88
89 class channelSelection(Screen):
90         def __init__(self, session):
91                 Screen.__init__(self, session)
92                 
93                 self["list"] = ServiceList()
94                 self["list"].setRoot(eServiceReference("""1:0:1:0:0:0:0:0:0:0:(provider=="ARD") && (type == 1)"""))
95                 
96                 self["okbutton"] = Button("ok", [self.channelSelected])
97                 
98                 class ChannelActionMap(ActionMap):
99                         def action(self, contexts, action):
100                                 if action[:7] == "bouquet":
101                                         print "setting root to " + action[8:]
102                                         self.csel["list"].setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:" + action[8:]))
103                                 else:
104                                         ActionMap.action(self, contexts, action)
105
106                 self["actions"] = ChannelActionMap(["ChannelSelectActions", "OkCancelActions"], 
107                         {
108                                 "cancel": self.close,
109                                 "ok": self.channelSelected,
110                                 "mark": self.doMark
111                         })
112                 self["actions"].csel = self
113
114         def doMark(self):
115                 ref = self["list"].getCurrent()
116                 if self["list"].isMarked(ref):
117                         self["list"].removeMarked(ref)
118                 else:
119                         self["list"].addMarked(ref)
120                 
121         def channelSelected(self):
122                 self.session.nav.playService(self["list"].getCurrent())
123                 self.close()
124                 pass
125
126 class infoBar(Screen):
127         def __init__(self, session):
128                 Screen.__init__(self, session)
129                 
130                 self["actions"] = ActionMap( [ "InfobarActions" ], 
131                         {
132                                 "switchChannel": self.switchChannel,
133                                 "mainMenu": self.mainMenu
134                         })
135                 self["okbutton"] = Button("mainMenu", [self.mainMenu])
136                 
137                 self["CurrentTime"] = Clock()
138                 
139                 self["ServiceName"] = ServiceName(self.session.nav)
140                 
141                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
142                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
143
144                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
145                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
146         
147         def mainMenu(self):
148                 self.session.open(mainMenu)
149                 
150         def switchChannel(self):
151                 self.session.open(channelSelection)
152
153 # a clock display dialog
154 class clockDisplay(Screen):
155         def okbutton(self):
156                 self.session.close()
157         
158         def __init__(self, session, clock):
159                 Screen.__init__(self, session)
160                 self["theClock"] = clock
161                 b = Button("bye")
162                 b.onClick = [ self.okbutton ]
163                 self["okbutton"] = b
164                 self["title"] = Header("clock dialog: here you see the current uhrzeit!")
165
166 class serviceScan(Screen):
167         def ok(self):
168                 if self["scan"].isDone():
169                         self.close()
170         
171         def __init__(self, session):
172                 Screen.__init__(self, session)
173                 
174                 self["scan_progress"] = ProgressBar()
175                 self["scan_state"] = Label("scan state")
176                 self["scan"] = ServiceScan(self["scan_progress"], self["scan_state"])
177
178                 self["okbutton"] = Button("ok", [self.ok])
179                 self["okbutton"].disable()