replace eServiceReferenceDVB with eServiceReference in some epgcache functions (eServ...
[enigma2.git] / lib / python / Screens / InfoBar.py
1 from Screen import Screen
2 from ChannelSelection import ChannelSelection
3 from Components.Clock import Clock
4 from Components.ActionMap import ActionMap
5 from Components.Button import Button
6 from Components.ServiceName import ServiceName
7 from Components.EventInfo import EventInfo
8 from Components.ServicePosition import ServicePosition
9 from Components.config import configfile
10
11 from Screens.MessageBox import MessageBox
12 from Screens.MovieSelection import MovieSelection
13 from Screens.Volume import Volume
14 from Screens.Mute import Mute
15
16 from enigma import *
17
18 import time
19
20 # hack alert!
21 from Menu import MainMenu, mdom
22
23 class InfoBar(Screen):
24         STATE_HIDDEN = 0
25         STATE_HIDING = 1
26         STATE_SHOWING = 2
27         STATE_SHOWN = 3
28         
29         def __init__(self, session):
30                 Screen.__init__(self, session)
31
32                 #instantiate forever
33                 self.servicelist = self.session.instantiateDialog(ChannelSelection)
34                 
35                 self.state = self.STATE_HIDDEN
36                 
37                 self.volumeDialog = self.session.instantiateDialog(Volume)
38                 self.muteDialog = self.session.instantiateDialog(Mute)
39                 
40                 self.hideTimer = eTimer()
41                 self.hideTimer.timeout.get().append(self.doTimerHide)
42                 #self.hideTimer.start(1000)
43                 
44                 self.hideVolTimer = eTimer()
45                 self.hideVolTimer.timeout.get().append(self.volHide)
46
47                 self["actions"] = ActionMap( [ "InfobarActions" ], 
48                         {
49                                 "switchChannelUp": self.switchChannelUp,
50                                 "switchChannelDown": self.switchChannelDown,
51                                 "mainMenu": self.mainMenu,
52                                 "zapUp": self.zapUp,
53                                 "zapDown": self.zapDown,
54                                 "volumeUp": self.volUp,
55                                 "volumeDown": self.volDown,
56                                 "volumeMute": self.volMute,
57                                 "instantRecord": self.instantRecord,
58                                 "hide": self.hide,
59                                 "toggleShow": self.toggleShow,
60                                 "showMovies": self.showMovies,
61                                 "quit": self.quit
62                         })
63 #               self["okbutton"] = Button("mainMenu", [self.mainMenu])
64                 
65                 self["CurrentTime"] = Clock()
66                 # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
67                 # Clock()
68
69                 self["ServiceName"] = ServiceName(self.session.nav)
70                 
71                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
72                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
73
74                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
75                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
76                 
77                 self.recording = None
78                 
79                 self.pos = 0
80         
81         def mainMenu(self):
82                 print "loading mainmenu XML..."
83                 menu = mdom.childNodes[0]
84                 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
85                 self.session.open(MainMenu, menu, menu.childNodes)
86
87         def switchChannelUp(self):      
88                 self.servicelist.moveUp()
89                 self.session.execDialog(self.servicelist)
90
91         def switchChannelDown(self):    
92                 self.servicelist.moveDown()
93                 self.session.execDialog(self.servicelist)
94
95         def hide(self): 
96                 self.instance.hide()
97
98         def doTimerHide(self):
99                 if self.state == self.STATE_SHOWN:
100                         self.instance.hide()
101                         self.state = self.STATE_HIDDEN
102
103         def toggleShow(self):
104                 if self.state == self.STATE_SHOWN:
105                         self.instance.hide()
106                         #pls check animation support, sorry
107 #                       self.startHide()
108                         self.state = self.STATE_HIDDEN
109                 else:
110                         self.instance.show()
111 #                       self.startShow()
112                         self.state = self.STATE_SHOWN
113                         #TODO: make it customizable
114                         self.hideTimer.start(5000)
115
116         def     zapUp(self):
117                 self.servicelist.moveUp()
118                 self.servicelist.zap()
119
120         def     zapDown(self):
121                 self.servicelist.moveDown()
122                 self.servicelist.zap()
123
124         def     volUp(self):
125                 eDVBVolumecontrol.getInstance().volumeUp()
126                 self.volumeDialog.instance.show()
127                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
128                 self.hideVolTimer.start(3000)
129
130         def     volDown(self):
131                 eDVBVolumecontrol.getInstance().volumeDown()
132                 self.volumeDialog.instance.show()
133                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
134                 self.hideVolTimer.start(3000)
135                 
136         def volHide(self):
137                 self.volumeDialog.instance.hide()
138
139         def startShow(self):
140                 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
141                 self.state = self.STATE_SHOWN
142         
143         def startHide(self):
144                 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
145                 self.state = self.STATE_HIDDEN
146
147         def     volMute(self):
148                 eDVBVolumecontrol.getInstance().volumeToggleMute()
149                 self.volumeDialog.setValue(eDVBVolumecontrol.getInstance().getVolume())
150                 
151                 if (eDVBVolumecontrol.getInstance().isMuted()):
152                         self.muteDialog.instance.show()
153                 else:
154                         self.muteDialog.instance.hide()
155                         
156         def     quit(self):
157                 configfile.save()
158                 quitMainloop()
159         
160         def stopCurrentRecording(self): 
161                 print "remove entry"
162                 self.session.nav.RecordTimer.removeEntry(self.recording)
163                 self.recording = None
164         
165         def startInstantRecording(self):
166                 serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
167                         
168                 # try to get event info
169                 epg = None
170                 try:
171                         service = self.session.nav.getCurrentService()
172                         info = service.info()
173                         ev = info.getEvent(0)
174                         epg = ev
175                 except:
176                         pass
177                 
178                 # fix me, description. 
179                 self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
180
181         def recordQuestionCallback(self, answer):
182                 if answer == False:
183                         return
184                 
185                 if self.recording != None:
186                         self.stopCurrentRecording()
187                 else:
188                         self.startInstantRecording()
189
190         def instantRecord(self):
191                 if self.recording != None:
192                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Do you want to stop the current\n(instant) recording?")
193                 else:
194                         self.session.openWithCallback(self.recordQuestionCallback, MessageBox, "Start recording?")
195
196         def showMovies(self):
197                 self.session.open(MovieSelection)