use green to add a timer directly from the epgSelection
[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["actions"] = ActionMap( [ "InfobarActions" ], 
96                 self["actions"] = NumberActionMap( [ "InfobarActions" ], 
97                         {
98                                 "switchChannelUp": self.switchChannelUp,
99                                 "switchChannelDown": self.switchChannelDown,
100                                 "mainMenu": self.mainMenu,
101                                 "zapUp": self.zapUp,
102                                 "zapDown": self.zapDown,
103                                 "volumeUp": self.volUp,
104                                 "volumeDown": self.volDown,
105                                 "volumeMute": self.volMute,
106                                 "instantRecord": self.instantRecord,
107                                 "hide": self.hide,
108                                 "toggleShow": self.toggleShow,
109                                 "showMovies": self.showMovies,
110                                 "quit": self.quit,
111                                 "1": self.keyNumberGlobal,
112                                 "2": self.keyNumberGlobal,
113                                 "3": self.keyNumberGlobal,
114                                 "4": self.keyNumberGlobal,
115                                 "5": self.keyNumberGlobal,
116                                 "6": self.keyNumberGlobal,
117                                 "7": self.keyNumberGlobal,
118                                 "8": self.keyNumberGlobal,
119                                 "9": self.keyNumberGlobal,
120                                 "0": self.keyNumberGlobal,
121                                 "showEPGList": self.showEPGList,
122                                 
123                                 "pauseService": self.pauseService,
124                                 "unPauseService": self.unPauseService,
125                         })
126 #               self["okbutton"] = Button("mainMenu", [self.mainMenu])
127                 
128                 self["CurrentTime"] = Clock()
129                 # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
130                 # Clock()
131
132                 self["ServiceName"] = ServiceName(self.session.nav)
133                 
134                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
135                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
136
137                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
138                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
139                 
140                 self.recording = None
141                 
142                 self.pos = 0
143         
144         def mainMenu(self):
145                 print "loading mainmenu XML..."
146                 menu = mdom.childNodes[0]
147                 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
148                 self.session.open(MainMenu, menu, menu.childNodes)
149
150         def keyNumberGlobal(self, number):
151                 print "You pressed number " + str(number)
152                 self.session.open(NumberZap, number)
153
154         def switchChannelUp(self):      
155                 self.servicelist.moveUp()
156                 self.session.execDialog(self.servicelist)
157
158         def switchChannelDown(self):    
159                 self.servicelist.moveDown()
160                 self.session.execDialog(self.servicelist)
161
162         def hide(self): 
163                 self.instance.hide()
164
165         def doTimerHide(self):
166                 if self.state == self.STATE_SHOWN:
167                         self.instance.hide()
168                         self.state = self.STATE_HIDDEN
169
170         def toggleShow(self):
171                 if self.state == self.STATE_SHOWN:
172                         self.instance.hide()
173                         #pls check animation support, sorry
174 #                       self.startHide()
175                         self.state = self.STATE_HIDDEN
176                 else:
177                         self.instance.show()
178 #                       self.startShow()
179                         self.state = self.STATE_SHOWN
180                         #TODO: make it customizable
181                         self.hideTimer.start(5000)
182
183         def     zapUp(self):
184                 self.servicelist.moveUp()
185                 self.servicelist.zap()
186
187         def     zapDown(self):
188                 self.servicelist.moveDown()
189                 self.servicelist.zap()
190
191         def     volUp(self):
192                 eDVBVolumecontrol.getInstance().volumeUp()
193                 self.volumeDialog.instance.show()
194                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
195                 self.hideVolTimer.start(3000)
196
197         def     volDown(self):
198                 eDVBVolumecontrol.getInstance().volumeDown()
199                 self.volumeDialog.instance.show()
200                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
201                 self.hideVolTimer.start(3000)
202                 
203         def volHide(self):
204                 self.volumeDialog.instance.hide()
205
206         def startShow(self):
207                 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
208                 self.state = self.STATE_SHOWN
209         
210         def startHide(self):
211                 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
212                 self.state = self.STATE_HIDDEN
213
214         def     volMute(self):
215                 eDVBVolumecontrol.getInstance().volumeToggleMute()
216                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
217                 
218                 if (eDVBVolumecontrol.getInstance().isMuted()):
219                         self.muteDialog.instance.show()
220                 else:
221                         self.muteDialog.instance.hide()
222
223         def showEPGList(self):
224                 self.session.open(EPGSelection, self.session.nav.getCurrentlyPlayingServiceReference())
225
226         def quit(self):
227                 self.session.open(Standby)
228                 #configfile.save()
229                 #quitMainloop()
230         
231         def stopCurrentRecording(self): 
232                 print "remove entry"
233                 self.session.nav.RecordTimer.removeEntry(self.recording)
234                 self.recording = None
235         
236         def startInstantRecording(self):
237                 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
238                         
239                 # try to get event info
240                 epg = None
241                 try:
242                         service = self.session.nav.getCurrentService()
243                         info = service.info()
244                         ev = info.getEvent(0)
245                         epg = ev
246                 except:
247                         pass
248                 
249                 # fix me, description. 
250                 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 3600, serviceref, epg, "instant record")
251
252         def recordQuestionCallback(self, answer):
253                 if answer == False:
254                         return
255                 
256                 if self.recording != None:
257                         self.stopCurrentRecording()
258                 else:
259                         self.startInstantRecording()
260
261         def instantRecord(self):
262                 if self.recording != None:
263                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
264                 else:
265                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
266
267         def showMovies(self):
268                 self.session.open(MovieSelection)
269
270         def pauseService(self):
271                 self.session.nav.pause(1)
272                 
273         def unPauseService(self):
274                 self.session.nav.pause(0)