ed193f389bb511ff4680dc10057e2efb78a31c35
[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"] = ServicePosition(self.session.nav, ServicePosition.TYPE_REMAINING)
55                 # Clock()
56
57                 self["Volume"] = self.volumeBar
58                 
59                 self["ServiceName"] = ServiceName(self.session.nav)
60                 
61                 self["Event_Now"] = EventInfo(self.session.nav, EventInfo.Now)
62                 self["Event_Next"] = EventInfo(self.session.nav, EventInfo.Next)
63
64                 self["Event_Now_Duration"] = EventInfo(self.session.nav, EventInfo.Now_Duration)
65                 self["Event_Next_Duration"] = EventInfo(self.session.nav, EventInfo.Next_Duration)
66                 
67                 self.recording = None
68                 
69                 self.pos = 0
70         
71         def mainMenu(self):
72                 print "loading mainmenu XML..."
73                 menu = mdom.childNodes[0]
74                 assert menu.tagName == "menu", "root element in menu must be 'menu'!"
75                 self.session.open(MainMenu, menu, menu.childNodes)
76
77         def switchChannelUp(self):      
78                 self.servicelist.moveUp()
79                 self.session.execDialog(self.servicelist)
80
81         def switchChannelDown(self):    
82                 self.servicelist.moveDown()
83                 self.session.execDialog(self.servicelist)
84
85         def hide(self): 
86                 self.instance.hide()
87
88         def toggleShow(self):
89                 if self.state == self.STATE_SHOWN:
90 #                       self.instance.hide()
91                         self.startHide()
92                 else:
93 #                       self.instance.show()
94                         self.startShow()
95
96         def     zapUp(self):
97                 self.servicelist.moveUp()
98                 self.servicelist.zap()
99
100         def     zapDown(self):
101                 self.servicelist.moveDown()
102                 self.servicelist.zap()
103
104         def     volUp(self):
105                 eDVBVolumecontrol.getInstance().volumeUp()
106                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
107
108         def     volDown(self):
109                 eDVBVolumecontrol.getInstance().volumeDown()
110                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
111                 
112         def startShow(self):
113                 self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
114                 self.state = self.STATE_SHOWN
115         
116         def startHide(self):
117                 self.instance.m_animation.startMoveAnimation(ePoint(0, 380), ePoint(0, 600), 100)
118                 self.state = self.STATE_HIDDEN
119
120         def     volMute(self):
121                 eDVBVolumecontrol.getInstance().volumeToggleMute()
122                 self.volumeBar.setValue(eDVBVolumecontrol.getInstance().getVolume())
123
124         def     quit(self):
125                 quitMainloop()
126                 
127         def instantRecord(self):
128                 #self.session.open(MessageBox, "this would be an instant recording! do you really know what you're doing?!")
129                 #return
130         
131                 if self.recording != None:
132                         print "remove entry"
133                         self.session.nav.RecordTimer.removeEntry(self.recording)
134                         self.recording = None
135                 else:
136                         serviceref = self.session.nav.getCurrentlyPlayingServiceReference()
137                         
138                         # try to get event info
139                         epg = None
140                         service = self.session.nav.getCurrentService()
141                         if service != None:
142                                 info = iServiceInformationPtr()
143                                 if not service.info(info):
144                                         ev = eServiceEventPtr()
145                                         if info.getEvent(ev, 0) == 0:
146                                                 epg = ev
147                         # fix me, description. 
148                         self.recording = self.session.nav.recordWithTimer(time.time(), time.time() + 30, serviceref, epg, "instant record")
149         
150         def showMovies(self):
151                 self.session.open(MovieSelection)
152