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.standbyblocked = 0
169 self.powerKeyTimer.start(3000)
172 self.powerKeyTimer.stop()
173 if self.standbyblocked == 0:
174 self.standbyblocked = 1
175 self.session.open(Standby, self)
178 def keyNumberGlobal(self, number):
179 print "You pressed number " + str(number)
180 self.session.open(NumberZap, number)
182 def switchChannelUp(self):
183 self.servicelist.moveUp()
184 self.session.execDialog(self.servicelist)
186 def switchChannelDown(self):
187 self.servicelist.moveDown()
188 self.session.execDialog(self.servicelist)
193 def doTimerHide(self):
194 if self.state == self.STATE_SHOWN:
196 self.state = self.STATE_HIDDEN
198 def toggleShow(self):
199 if self.state == self.STATE_SHOWN:
201 #pls check animation support, sorry
203 self.state = self.STATE_HIDDEN
207 self.state = self.STATE_SHOWN
208 #TODO: make it customizable
209 self.hideTimer.start(5000)
212 self.servicelist.moveUp()
213 self.servicelist.zap()
216 self.servicelist.moveDown()
217 self.servicelist.zap()
220 eDVBVolumecontrol.getInstance().volumeUp()
221 self.volumeDialog.instance.show()
222 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
223 self.hideVolTimer.start(3000)
226 eDVBVolumecontrol.getInstance().volumeDown()
227 self.volumeDialog.instance.show()
228 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
229 self.hideVolTimer.start(3000)
232 self.volumeDialog.instance.hide()
235 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
236 self.state = self.STATE_SHOWN
239 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
240 self.state = self.STATE_HIDDEN
243 eDVBVolumecontrol.getInstance().volumeToggleMute()
244 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
246 if (eDVBVolumecontrol.getInstance().isMuted()):
247 self.muteDialog.instance.show()
249 self.muteDialog.instance.hide()
251 def showEPGList(self):
252 ref=self.session.nav.getCurrentlyPlayingServiceReference()
253 ptr=eEPGCache.getInstance()
254 if ptr.startTimeQuery(ref) != -1:
255 self.session.open(EPGSelection, ref)
257 print 'no epg for service', ref.toString()
260 # self.session.open(Standby, self)
264 def stopCurrentRecording(self):
266 self.session.nav.RecordTimer.removeEntry(self.recording)
267 self.recording = None
269 def startInstantRecording(self):
270 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
272 # try to get event info
275 service = self.session.nav.getCurrentService()
276 info = service.info()
277 ev = info.getEvent(0)
282 # fix me, description.
283 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
285 def recordQuestionCallback(self, answer):
289 if self.recording != None:
290 self.stopCurrentRecording()
292 self.startInstantRecording()
294 def instantRecord(self):
295 if self.recording != None:
296 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
298 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
300 def showMovies(self):
301 self.session.open(MovieSelection)
303 def pauseService(self):
304 self.session.nav.pause(1)
306 def unPauseService(self):
307 self.session.nav.pause(0)
309 def doSeek(self, dir, seektime):
310 service = self.session.nav.getCurrentService()
314 seekable = service.seek()
317 seekable.seekRelative(dir, 90 * seektime)
320 self.doSeek(+1, 10000)
323 self.doSeek(-1, 10000)