1 from Screen import Screen
2 from Components.ActionMap import ActionMap
3 from Components.ActionMap import NumberActionMap
4 from Components.Label import Label
5 from Components.config import configfile
6 from ChannelSelection import ChannelSelection
9 from Components.ServiceName import ServiceName
10 from Components.EventInfo import EventInfo
11 from Components.ServicePosition import ServicePosition
13 from EpgSelection import EPGSelection
15 from Screens.MessageBox import MessageBox
16 from Screens.MovieSelection import MovieSelection
17 from Screens.Volume import Volume
18 from Screens.Mute import Mute
19 from Screens.Standby import Standby
21 from enigma import eTimer, eDVBVolumecontrol, quitMainloop
24 from Menu import MainMenu, mdom
26 class InfoBarVolumeControl:
27 """Volume control, handles volUp, volDown, volMute actions and display
28 a corresponding dialog"""
31 self["VolumeActions"] = ActionMap( ["InfobarVolumeActions"] ,
33 "volumeUp": self.volUp,
34 "volumeDown": self.volDown,
35 "volumeMute": self.volMute,
38 self.volumeDialog = self.session.instantiateDialog(Volume)
39 self.muteDialog = self.session.instantiateDialog(Mute)
41 self.hideVolTimer = eTimer()
42 self.hideVolTimer.timeout.get().append(self.volHide)
45 eDVBVolumecontrol.getInstance().volumeUp()
46 self.volumeDialog.instance.show()
47 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
48 self.hideVolTimer.start(3000)
51 eDVBVolumecontrol.getInstance().volumeDown()
52 self.volumeDialog.instance.show()
53 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
54 self.hideVolTimer.start(3000)
57 self.volumeDialog.instance.hide()
60 eDVBVolumecontrol.getInstance().volumeToggleMute()
61 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
63 if (eDVBVolumecontrol.getInstance().isMuted()):
64 self.muteDialog.instance.show()
66 self.muteDialog.instance.hide()
68 class InfoBarShowHide:
69 """ InfoBar show/hide control, accepts toggleShow and hide actions, might start
77 self["ShowHideActions"] = ActionMap( ["InfobarShowHideActions"] ,
79 "toggleShow": self.toggleShow,
83 self.state = self.STATE_HIDDEN
85 self.hideTimer = eTimer()
86 self.hideTimer.timeout.get().append(self.doTimerHide)
87 #self.hideTimer.start(1000)
92 def doTimerHide(self):
93 if self.state == self.STATE_SHOWN:
95 self.state = self.STATE_HIDDEN
98 if self.state == self.STATE_SHOWN:
100 #pls check animation support, sorry
102 self.state = self.STATE_HIDDEN
106 self.state = self.STATE_SHOWN
107 #TODO: make it customizable
108 self.hideTimer.start(5000)
111 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
112 self.state = self.STATE_SHOWN
115 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
116 self.state = self.STATE_HIDDEN
118 class NumberZap(Screen):
125 print "do the action here"
128 def keyNumberGlobal(self, number):
129 self.Timer.start(3000) #reset timer
130 self.field = self.field + str(number)
131 self["number"].setText(self.field)
132 if len(self.field) >= 4:
135 def __init__(self, number):
136 Screen.__init__(self)
137 self.field = str(number)
139 self["number"] = Label(self.field)
141 self["actions"] = NumberActionMap( [ "SetupActions" ],
145 "1": self.keyNumberGlobal,
146 "2": self.keyNumberGlobal,
147 "3": self.keyNumberGlobal,
148 "4": self.keyNumberGlobal,
149 "5": self.keyNumberGlobal,
150 "6": self.keyNumberGlobal,
151 "7": self.keyNumberGlobal,
152 "8": self.keyNumberGlobal,
153 "9": self.keyNumberGlobal,
154 "0": self.keyNumberGlobal
157 self.Timer = eTimer()
158 self.Timer.timeout.get().append(self.keyOK)
159 self.Timer.start(3000)
161 class InfoBarPowerKey:
162 """ PowerKey stuff - handles the powerkey press and powerkey release actions"""
165 self.powerKeyTimer = eTimer()
166 self.powerKeyTimer.timeout.get().append(self.powertimer)
167 self["PowerKeyActions"] = ActionMap( ["PowerKeyActions"],
169 "powerdown": self.powerdown,
170 "powerup": self.powerup,
173 def powertimer(self):
174 print "PowerOff - Now!"
178 self.standbyblocked = 0
179 self.powerKeyTimer.start(3000)
182 self.powerKeyTimer.stop()
183 if self.standbyblocked == 0:
184 self.standbyblocked = 1
185 self.session.open(Standby, self)
188 # self.session.open(Standby, self)
193 class InfoBarNumberZap:
194 """ Handles an initial number for NumberZapping """
196 self["NumberZapActions"] = NumberActionMap( [ "NumberZapActions"],
198 "1": self.keyNumberGlobal,
199 "2": self.keyNumberGlobal,
200 "3": self.keyNumberGlobal,
201 "4": self.keyNumberGlobal,
202 "5": self.keyNumberGlobal,
203 "6": self.keyNumberGlobal,
204 "7": self.keyNumberGlobal,
205 "8": self.keyNumberGlobal,
206 "9": self.keyNumberGlobal,
207 "0": self.keyNumberGlobal,
210 def keyNumberGlobal(self, number):
211 print "You pressed number " + str(number)
212 self.session.open(NumberZap, number)
214 class InfoBarChannelSelection:
215 """ ChannelSelection - handles the channelSelection dialog and the initial
216 channelChange actions which open the channelSelection dialog """
219 self.servicelist = self.session.instantiateDialog(ChannelSelection)
221 self["ChannelSelectActions"] = ActionMap( ["InfoBarChannelSelection"],
223 "switchChannelUp": self.switchChannelUp,
224 "switchChannelDown": self.switchChannelDown,
226 "zapDown": self.zapDown,
229 def switchChannelUp(self):
230 self.servicelist.moveUp()
231 self.session.execDialog(self.servicelist)
233 def switchChannelDown(self):
234 self.servicelist.moveDown()
235 self.session.execDialog(self.servicelist)
238 self.servicelist.moveUp()
239 self.servicelist.zap()
242 self.servicelist.moveDown()
243 self.servicelist.zap()
246 """ Handles a menu action, to open the (main) menu """
248 self["MenuActions"] = ActionMap( [ "InfoBarMenuActions" ],
250 "mainMenu": self.mainMenu,
254 print "loading mainmenu XML..."
255 menu = mdom.childNodes[0]
256 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
257 self.session.open(MainMenu, menu, menu.childNodes)
260 """ EPG - Opens an EPG list when the showEPGList action fires """
262 self["EPGActions"] = ActionMap( [ "InfobarEPGActions" ],
264 "showEPGList": self.showEPGList,
267 def showEPGList(self):
268 ref=self.session.nav.getCurrentlyPlayingServiceReference()
269 ptr=eEPGCache.getInstance()
270 if ptr.startTimeQuery(ref) != -1:
271 self.session.open(EPGSelection, ref)
273 print 'no epg for service', ref.toString()
276 """provides a current/next event info display"""
278 self["Event_Now_StartTime"] = EventInfo(self.session.nav, EventInfo.Now_StartTime)
279 self["Event_Next_StartTime"] = EventInfo(self.session.nav, EventInfo.Next_StartTime)
281 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
282 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
284 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
285 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
287 class InfoBarServiceName:
289 self["ServiceName"] = ServiceName(self.session.nav)
292 """handles PVR specific actions like seeking, pause"""
294 self["PVRActions"] = ActionMap( [ "InfobarPVRActions" ],
296 "pauseService": self.pauseService,
297 "unPauseService": self.unPauseService,
299 "seekFwd": self.seekFwd,
300 "seekBack": self.seekBack,
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)
325 class InfoBarInstantRecord:
326 """Instant Record - handles the instantRecord action in order to
327 start/stop instant records"""
329 self["InstnantRecordActions"] = ActionMap( [ "InfoBarInstantRecord" ],
331 "instantRecord": self.instantRecord,
333 self.recording = None
335 def stopCurrentRecording(self):
336 self.session.nav.RecordTimer.removeEntry(self.recording)
337 self.recording = None
339 def startInstantRecording(self):
340 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
342 # try to get event info
345 service = self.session.nav.getCurrentService()
346 info = service.info()
347 ev = info.getEvent(0)
352 # fix me, description.
353 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
355 def recordQuestionCallback(self, answer):
359 if self.recording != None:
360 self.stopCurrentRecording()
362 self.startInstantRecording()
364 def instantRecord(self):
365 if self.recording != None:
366 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
368 self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")