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
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
20 from ServiceReference import ServiceReference
27 from Menu import MainMenu, mdom
29 class NumberZap(Screen):
36 print "do the action here"
39 def keyNumberGlobal(self, number):
40 self.Timer.start(3000) #reset timer
41 self.field = self.field + str(number)
42 self["number"].setText(self.field)
43 if len(self.field) >= 4:
46 def __init__(self, session, number):
47 Screen.__init__(self, session)
48 self.field = str(number)
50 self["number"] = Label(self.field)
52 self["actions"] = NumberActionMap( [ "SetupActions" ],
56 "1": self.keyNumberGlobal,
57 "2": self.keyNumberGlobal,
58 "3": self.keyNumberGlobal,
59 "4": self.keyNumberGlobal,
60 "5": self.keyNumberGlobal,
61 "6": self.keyNumberGlobal,
62 "7": self.keyNumberGlobal,
63 "8": self.keyNumberGlobal,
64 "9": self.keyNumberGlobal,
65 "0": self.keyNumberGlobal
69 self.Timer.timeout.get().append(self.keyOK)
70 self.Timer.start(3000)
73 class InfoBar(Screen):
79 def __init__(self, session):
80 Screen.__init__(self, session)
83 self.servicelist = self.session.instantiateDialog(ChannelSelection)
85 self.state = self.STATE_HIDDEN
87 self.volumeDialog = self.session.instantiateDialog(Volume)
88 self.muteDialog = self.session.instantiateDialog(Mute)
90 self.hideTimer = eTimer()
91 self.hideTimer.timeout.get().append(self.doTimerHide)
92 #self.hideTimer.start(1000)
94 self.hideVolTimer = eTimer()
95 self.hideVolTimer.timeout.get().append(self.volHide)
97 self.powerKeyTimer = eTimer()
98 self.powerKeyTimer.timeout.get().append(self.powertimer)
100 #self["actions"] = ActionMap( [ "InfobarActions" ],
101 self["actions"] = NumberActionMap( [ "InfobarActions" ],
103 "switchChannelUp": self.switchChannelUp,
104 "switchChannelDown": self.switchChannelDown,
105 "mainMenu": self.mainMenu,
107 "zapDown": self.zapDown,
108 "volumeUp": self.volUp,
109 "volumeDown": self.volDown,
110 "volumeMute": self.volMute,
111 "instantRecord": self.instantRecord,
113 "toggleShow": self.toggleShow,
114 "showMovies": self.showMovies,
116 "powerdown": self.powerdown,
117 "powerup": self.powerup,
118 "1": self.keyNumberGlobal,
119 "2": self.keyNumberGlobal,
120 "3": self.keyNumberGlobal,
121 "4": self.keyNumberGlobal,
122 "5": self.keyNumberGlobal,
123 "6": self.keyNumberGlobal,
124 "7": self.keyNumberGlobal,
125 "8": self.keyNumberGlobal,
126 "9": self.keyNumberGlobal,
127 "0": self.keyNumberGlobal,
128 "showEPGList": self.showEPGList,
130 "pauseService": self.pauseService,
131 "unPauseService": self.unPauseService,
133 "seekFwd": self.seekFwd,
134 "seekBack": self.seekBack,
136 # self["okbutton"] = Button("mainMenu", [self.mainMenu])
138 self["CurrentTime"] = Clock()
139 # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
142 self["ServiceName"] = ServiceName(self.session.nav)
144 self["Event_Now_StartTime"] = EventInfo(self.session.nav, EventInfo.Now_StartTime)
145 self["Event_Next_StartTime"] = EventInfo(self.session.nav, EventInfo.Next_StartTime)
147 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
148 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
150 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
151 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
153 self.recording = None
158 print "loading mainmenu XML..."
159 menu = mdom.childNodes[0]
160 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
161 self.session.open(MainMenu, menu, menu.childNodes)
163 def powertimer(self):
164 print "PowerOff - Now!"
168 self.powerKeyTimer.start(3000)
171 self.powerKeyTimer.stop()
172 self.session.open(Standby, self)
174 def keyNumberGlobal(self, number):
175 print "You pressed number " + str(number)
176 self.session.open(NumberZap, number)
178 def switchChannelUp(self):
179 self.servicelist.moveUp()
180 self.session.execDialog(self.servicelist)
182 def switchChannelDown(self):
183 self.servicelist.moveDown()
184 self.session.execDialog(self.servicelist)
189 def doTimerHide(self):
190 if self.state == self.STATE_SHOWN:
192 self.state = self.STATE_HIDDEN
194 def toggleShow(self):
195 if self.state == self.STATE_SHOWN:
197 #pls check animation support, sorry
199 self.state = self.STATE_HIDDEN
203 self.state = self.STATE_SHOWN
204 #TODO: make it customizable
205 self.hideTimer.start(5000)
208 self.servicelist.moveUp()
209 self.servicelist.zap()
212 self.servicelist.moveDown()
213 self.servicelist.zap()
216 eDVBVolumecontrol.getInstance().volumeUp()
217 self.volumeDialog.instance.show()
218 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
219 self.hideVolTimer.start(3000)
222 eDVBVolumecontrol.getInstance().volumeDown()
223 self.volumeDialog.instance.show()
224 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
225 self.hideVolTimer.start(3000)
228 self.volumeDialog.instance.hide()
231 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
232 self.state = self.STATE_SHOWN
235 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
236 self.state = self.STATE_HIDDEN
239 eDVBVolumecontrol.getInstance().volumeToggleMute()
240 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
242 if (eDVBVolumecontrol.getInstance().isMuted()):
243 self.muteDialog.instance.show()
245 self.muteDialog.instance.hide()
247 def showEPGList(self):
248 ref=self.session.nav.getCurrentlyPlayingServiceReference()
249 ptr=eEPGCache.getInstance()
250 if ptr.startTimeQuery(ref) != -1:
251 self.session.open(EPGSelection, ref)
253 print 'no epg for service', ref.toString()
256 # self.session.open(Standby, self)
260 def stopCurrentRecording(self):
262 self.session.nav.RecordTimer.removeEntry(self.recording)
263 self.recording = None
265 def startInstantRecording(self):
266 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
268 # try to get event info
271 service = self.session.nav.getCurrentService()
272 info = service.info()
273 ev = info.getEvent(0)
278 # fix me, description.
279 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
281 def recordQuestionCallback(self, answer):
285 if self.recording != None:
286 self.stopCurrentRecording()
288 self.startInstantRecording()
290 def instantRecord(self):
291 if self.recording != None:
292 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
294 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
296 def showMovies(self):
297 self.session.open(MovieSelection)
299 def pauseService(self):
300 self.session.nav.pause(1)
302 def unPauseService(self):
303 self.session.nav.pause(0)
305 def doSeek(self, dir, seektime):
306 service = self.session.nav.getCurrentService()
310 seekable = service.seek()
313 seekable.seekRelative(dir, 90 * seektime)
316 self.doSeek(+1, 10000)
319 self.doSeek(-1, 10000)