- fix infobar a bit
[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.VolumeBar import VolumeBar
5 from Components.ActionMap import ActionMap
6 from Components.Button import Button
7 from Components.ServiceName import ServiceName
8 from Components.EventInfo import EventInfo
9 from Components.ServicePosition import ServicePosition
10
11 from Screens.MessageBox import MessageBox
12 from Screens.MovieSelection import MovieSelection
13
14 from enigma import *
15
16 import time
17
18 # hack alert!
19 from Menu import MainMenu, mdom
20
21 class InfoBar(Screen):
22         STATE_HIDDEN = 0
23         STATE_HIDING = 1
24         STATE_SHOWING = 2
25         STATE_SHOWN = 3
26         
27         def __init__(self, session):
28                 Screen.__init__(self, session)
29
30                 #instantiate forever
31                 self.servicelist = self.session.instantiateDialog(ChannelSelection)
32                 self.volumeBar = VolumeBar()            
33                 
34                 self.state = self.STATE_HIDDEN
35
36                 self["actions"] = ActionMap( [ "InfobarActions" ], 
37                         {
38                                 "switchChannelUp": self.switchChannelUp,
39                                 "switchChannelDown": self.switchChannelDown,
40                                 "mainMenu": self.mainMenu,
41                                 "zapUp": self.zapUp,
42                                 "zapDown": self.zapDown,
43                                 "volumeUp": self.volUp,
44                                 "volumeDown": self.volDown,
45                                 "volumeMute": self.volMute,
46                                 "instantRecord": self.instantRecord,
47                                 "hide": self.hide,
48                                 "toggleShow": self.toggleShow,
49                                 "showMovies": self.showMovies,
50                                 "quit": self.quit
51                         })
52 #               self["okbutton"] = Button("mainMenu", [self.mainMenu])
53                 
54                 self["CurrentTime"] = Clock()
55                 # ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
56                 # Clock()
57
58                 self["Volume"] = self.volumeBar
59                 
60                 self["ServiceName"] = ServiceName(self.session.nav)
61                 
62                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
63                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
64
65                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
66                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
67                 
68                 self.recording = None
69                 
70                 self.pos = 0
71         
72         def mainMenu(self):
73                 print "loading mainmenu XML..."
74                 menu = mdom.childNodes[0]
75                 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
76                 self.session.open(MainMenu, menu, menu.childNodes)
77
78         def switchChannelUp(self):      
79                 self.servicelist.moveUp()
80                 self.session.execDialog(self.servicelist)
81
82         def switchChannelDown(self):    
83                 self.servicelist.moveDown()
84                 self.session.execDialog(self.servicelist)
85
86         def hide(self): 
87                 self.instance.hide()
88
89         def toggleShow(self):
90                 if self.state == self.STATE_SHOWN:
91 #                       self.instance.hide()
92                         self.startHide()
93                 else:
94 #                       self.instance.show()
95                         self.startShow()
96
97         def     zapUp(self):
98                 self.servicelist.moveUp()
99                 self.servicelist.zap()
100
101         def     zapDown(self):
102                 self.servicelist.moveDown()
103                 self.servicelist.zap()
104
105         def     volUp(self):
106                 eDVBVolumecontrol.getInstance().volumeUp()
107                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
108
109         def     volDown(self):
110                 eDVBVolumecontrol.getInstance().volumeDown()
111                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
112                 
113         def startShow(self):
114                 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
115                 self.state = self.STATE_SHOWN
116         
117         def startHide(self):
118                 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
119                 self.state = self.STATE_HIDDEN
120
121         def     volMute(self):
122                 eDVBVolumecontrol.getInstance().volumeToggleMute()
123                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
124
125         def     quit(self):
126                 quitMainloop()
127                 
128         def instantRecord(self):
129                 #self.session.open(MessageBox, "this would be an instant recording! do you really know what you're doing?!")
130                 #return
131         
132                 if self.recording != None:
133                         print "remove entry"
134                         self.session.nav.RecordTimer.removeEntry(self.recording)
135                         self.recording = None
136                 else:
137                         serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
138                         
139                         # try to get event info
140                         epg = None
141                         service = self.session.nav.getCurrentService()
142                         if service != None:
143                                 info = iServiceInformationPtr()
144                                 if not service.info(info):
145                                         ev = eServiceEventPtr()
146                                         if info.getEvent(ev, 0) == 0:
147                                                 epg = ev
148                         # fix me, description. 
149                         self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
150         
151         def showMovies(self):
152                 self.session.open(MovieSelection)
153