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