3c776178b799633944e944957238788f54c6ef84
[enigma2.git] / lib / python / Screens / InfoBar.py
1 from Screen import Screen
2 from EpgSelection import EPGSelection
3 from ChannelSelection import ChannelSelection
4 from Components.Clock import Clock
5 from Components.ActionMap import ActionMap
6 from Components.ActionMap import NumberActionMap
7 from Components.Button import Button
8 from Components.ServiceName import ServiceName
9 from Components.EventInfo import EventInfo
10 from Components.ServicePosition import ServicePosition
11 from Components.config import configfile
12 from Components.Label import Label
13
14 from Screens.MessageBox import MessageBox
15 from Screens.MovieSelection import MovieSelection
16 from Screens.Volume import Volume
17 from Screens.Mute import Mute
18 from Screens.Standby import Standby
19
20 from enigma import *
21
22 import time
23
24 # hack alert!
25 from Menu import MainMenu, mdom
26
27 class NumberZap(Screen):
28         def quit(self):
29                 self.Timer.stop()
30                 self.close()
31
32         def keyOK(self):
33                 self.Timer.stop()
34                 print "do the action here"
35                 self.close()
36
37         def keyNumberGlobal(self, number):
38                 self.Timer.start(3000)          #reset timer
39                 self.field = self.field + str(number)
40                 self["number"].setText(self.field)
41                 if len(self.field) >= 4:
42                         self.keyOK()
43
44         def __init__(self, session, number):
45                 Screen.__init__(self, session)
46                 self.field = str(number)
47                 
48                 self["number"] = Label(self.field)
49
50                 self["actions"] = NumberActionMap( [ "SetupActions" ], 
51                         {
52                                 "cancel": self.quit,
53                                 "ok": self.keyOK,
54                                 "1": self.keyNumberGlobal,
55                                 "2": self.keyNumberGlobal,
56                                 "3": self.keyNumberGlobal,
57                                 "4": self.keyNumberGlobal,
58                                 "5": self.keyNumberGlobal,
59                                 "6": self.keyNumberGlobal,
60                                 "7": self.keyNumberGlobal,
61                                 "8": self.keyNumberGlobal,
62                                 "9": self.keyNumberGlobal,
63                                 "0": self.keyNumberGlobal
64                         })
65
66                 self.Timer = eTimer()
67                 self.Timer.timeout.get().append(self.keyOK)
68                 self.Timer.start(3000)
69
70
71 class InfoBar(Screen):
72         STATE_HIDDEN = 0
73         STATE_HIDING = 1
74         STATE_SHOWING = 2
75         STATE_SHOWN = 3
76         
77         def __init__(self, session):
78                 Screen.__init__(self, session)
79
80                 #instantiate forever
81                 self.servicelist = self.session.instantiateDialog(ChannelSelection)
82                 
83                 self.state = self.STATE_HIDDEN
84                 
85                 self.volumeDialog = self.session.instantiateDialog(Volume)
86                 self.muteDialog = self.session.instantiateDialog(Mute)
87                 
88                 self.hideTimer = eTimer()
89                 self.hideTimer.timeout.get().append(self.doTimerHide)
90                 #self.hideTimer.start(1000)
91                 
92                 self.hideVolTimer = eTimer()
93                 self.hideVolTimer.timeout.get().append(self.volHide)
94                 
95                 self.powerKeyTimer = eTimer()
96                 self.powerKeyTimer.timeout.get().append(self.powertimer)
97
98                 #self["actions"] = ActionMap( [ "InfobarActions" ], 
99                 self["actions"] = NumberActionMap( [ "InfobarActions" ], 
100                         {
101                                 "switchChannelUp": self.switchChannelUp,
102                                 "switchChannelDown": self.switchChannelDown,
103                                 "mainMenu": self.mainMenu,
104                                 "zapUp": self.zapUp,
105                                 "zapDown": self.zapDown,
106                                 "volumeUp": self.volUp,
107                                 "volumeDown": self.volDown,
108                                 "volumeMute": self.volMute,
109                                 "instantRecord": self.instantRecord,
110                                 "hide": self.hide,
111                                 "toggleShow": self.toggleShow,
112                                 "showMovies": self.showMovies,
113                                 #"quit": self.quit,
114                                 "powerdown": self.powerdown,
115                                 "powerup": self.powerup,
116                                 "1": self.keyNumberGlobal,
117                                 "2": self.keyNumberGlobal,
118                                 "3": self.keyNumberGlobal,
119                                 "4": self.keyNumberGlobal,
120                                 "5": self.keyNumberGlobal,
121                                 "6": self.keyNumberGlobal,
122                                 "7": self.keyNumberGlobal,
123                                 "8": self.keyNumberGlobal,
124                                 "9": self.keyNumberGlobal,
125                                 "0": self.keyNumberGlobal,
126                                 "showEPGList": self.showEPGList,
127                                 
128                                 "pauseService": self.pauseService,
129                                 "unPauseService": self.unPauseService,
130                         })
131 #               self["okbutton"] = Button("mainMenu", [self.mainMenu])
132                 
133                 self["CurrentTime"] = Clock()
134                 # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
135                 # Clock()
136
137                 self["ServiceName"] = ServiceName(self.session.nav)
138                 
139                 self["Event_Now_StartTime"] = EventInfo(self.session.nav, EventInfo.Now_StartTime)
140                 self["Event_Next_StartTime"] = EventInfo(self.session.nav, EventInfo.Next_StartTime)
141                                 
142                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
143                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
144
145                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
146                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
147                 
148                 self.recording = None
149                 
150                 self.pos = 0
151         
152         def mainMenu(self):
153                 print "loading mainmenu XML..."
154                 menu = mdom.childNodes[0]
155                 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
156                 self.session.open(MainMenu, menu, menu.childNodes)
157
158         def powertimer(self):   
159                 print "PowerOff - Now!"
160                 configfile.save()
161                 quitMainloop()
162         
163         def powerdown(self):
164                 self.powerKeyTimer.start(3000)
165
166         def powerup(self):
167                 self.powerKeyTimer.stop()
168                 self.session.open(Standby, self)
169
170         def keyNumberGlobal(self, number):
171                 print "You pressed number " + str(number)
172                 self.session.open(NumberZap, number)
173
174         def switchChannelUp(self):      
175                 self.servicelist.moveUp()
176                 self.session.execDialog(self.servicelist)
177
178         def switchChannelDown(self):    
179                 self.servicelist.moveDown()
180                 self.session.execDialog(self.servicelist)
181
182         def hide(self): 
183                 self.instance.hide()
184
185         def doTimerHide(self):
186                 if self.state == self.STATE_SHOWN:
187                         self.instance.hide()
188                         self.state = self.STATE_HIDDEN
189
190         def toggleShow(self):
191                 if self.state == self.STATE_SHOWN:
192                         self.instance.hide()
193                         #pls check animation support, sorry
194 #                       self.startHide()
195                         self.state = self.STATE_HIDDEN
196                 else:
197                         self.instance.show()
198 #                       self.startShow()
199                         self.state = self.STATE_SHOWN
200                         #TODO: make it customizable
201                         self.hideTimer.start(5000)
202
203         def     zapUp(self):
204                 self.servicelist.moveUp()
205                 self.servicelist.zap()
206
207         def     zapDown(self):
208                 self.servicelist.moveDown()
209                 self.servicelist.zap()
210
211         def     volUp(self):
212                 eDVBVolumecontrol.getInstance().volumeUp()
213                 self.volumeDialog.instance.show()
214                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
215                 self.hideVolTimer.start(3000)
216
217         def     volDown(self):
218                 eDVBVolumecontrol.getInstance().volumeDown()
219                 self.volumeDialog.instance.show()
220                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
221                 self.hideVolTimer.start(3000)
222                 
223         def volHide(self):
224                 self.volumeDialog.instance.hide()
225
226         def startShow(self):
227                 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
228                 self.state = self.STATE_SHOWN
229         
230         def startHide(self):
231                 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
232                 self.state = self.STATE_HIDDEN
233
234         def     volMute(self):
235                 eDVBVolumecontrol.getInstance().volumeToggleMute()
236                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
237                 
238                 if (eDVBVolumecontrol.getInstance().isMuted()):
239                         self.muteDialog.instance.show()
240                 else:
241                         self.muteDialog.instance.hide()
242
243         def showEPGList(self):
244                 ref=self.session.nav.getCurrentlyPlayingServiceReference()
245                 ptr=eEPGCache.getInstance()
246                 if ptr.startTimeQuery(ref) != -1:
247                         self.session.open(EPGSelection, ref)
248                 else:
249                         print 'no epg for service', ref.toString()
250
251         #def quit(self):
252         #       self.session.open(Standby, self)
253                 #configfile.save()
254                 #quitMainloop()
255         
256         def stopCurrentRecording(self): 
257                 print "remove entry"
258                 self.session.nav.RecordTimer.removeEntry(self.recording)
259                 self.recording = None
260         
261         def startInstantRecording(self):
262                 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
263                         
264                 # try to get event info
265                 epg = None
266                 try:
267                         service = self.session.nav.getCurrentService()
268                         info = service.info()
269                         ev = info.getEvent(0)
270                         epg = ev
271                 except:
272                         pass
273                 
274                 # fix me, description. 
275                 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
276
277         def recordQuestionCallback(self, answer):
278                 if answer == False:
279                         return
280                 
281                 if self.recording != None:
282                         self.stopCurrentRecording()
283                 else:
284                         self.startInstantRecording()
285
286         def instantRecord(self):
287                 if self.recording != None:
288                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
289                 else:
290                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
291
292         def showMovies(self):
293                 self.session.open(MovieSelection)
294
295         def pauseService(self):
296                 self.session.nav.pause(1)
297                 
298         def unPauseService(self):
299                 self.session.nav.pause(0)
300