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