some fixes on the subservices quickzapper
[enigma2.git] / lib / python / Screens / SubservicesQuickzap.py
1 from Screens.Screen import Screen
2 from Components.ActionMap import NumberActionMap
3 from Components.Label import Label
4
5 from Screens.ChoiceBox import ChoiceBox
6 from Screens.MessageBox import MessageBox
7 from InfoBarGenerics import InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarTimeshift, InfoBarSeek, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport
8
9 class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, Screen):
10         def __init__(self, session, subservices):
11                 Screen.__init__(self, session)
12                 for x in [InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarSubtitleSupport, InfoBarExtensions]:
13                         x.__init__(self)
14
15                 self.restoreService = self.session.nav.getCurrentlyPlayingServiceReference()
16                 
17                 self["CurrentSubserviceNumber"] = Label("")
18                 self.currentSubserviceNumberLabel = self["CurrentSubserviceNumber"]
19                 
20                 self.updateSubservices()
21                 self.currentlyPlayingSubservice = 0
22                 
23                 self.onLayoutFinish.append(self.playSubservice)
24                                 
25                 self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ], 
26                         {
27                                 "up": self.showSelection,
28                                 "down": self.showSelection,
29                                 "right": self.nextSubservice,
30                                 "left": self.previousSubservice,
31                                 "green": self.showSelection,
32                                 "exit": self.quitQuestion,
33                                 "1": self.keyNumberGlobal,
34                                 "2": self.keyNumberGlobal,
35                                 "3": self.keyNumberGlobal,
36                                 "4": self.keyNumberGlobal,
37                                 "5": self.keyNumberGlobal,
38                                 "6": self.keyNumberGlobal,
39                                 "7": self.keyNumberGlobal,
40                                 "8": self.keyNumberGlobal,
41                                 "9": self.keyNumberGlobal,
42                                 "0": self.keyNumberGlobal
43                         }, -1)
44
45         
46                 
47         def updateSubservices(self):
48                 self.service = self.session.nav.getCurrentService()
49                 self.subservices = self.service and self.service.subServices()
50                 self.n = self.subservices and self.subservices.getNumberOfSubservices()
51         
52         def nextSubservice(self):
53                 self.updateSubservices()
54                 if self.currentlyPlayingSubservice == self.n - 1:
55                         self.playSubservice(0)
56                 else:
57                         self.playSubservice(self.currentlyPlayingSubservice + 1)
58         
59         def previousSubservice(self):
60                 self.updateSubservices()
61                 if self.currentlyPlayingSubservice == 0:
62                         self.playSubservice(self.n - 1)
63                 else:
64                         self.playSubservice(self.currentlyPlayingSubservice - 1)
65         
66         def getSubserviceIndex(self, service):
67                 self.updateSubservices()
68                 for x in range(self.n):
69                         if service == self.subservices.getSubservice(x):
70                                 return self.n
71         
72         def keyNumberGlobal(self, number):
73                 print number, "pressed"
74                 self.updateSubservices()
75                 if number == 0:
76                         self.playSubservice(self.lastservice)
77                 elif number <= self.n - 1:
78                         self.playSubservice(number)
79         
80         def showSelection(self):
81                 self.updateSubservices()
82                 tlist = []
83                 for x in range(self.n):
84                         i = self.subservices.getSubservice(x)
85                         tlist.append((i.getName(), x))
86
87                 keys = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * self.n
88                 self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = self.currentlyPlayingSubservice, keys = keys)
89         
90         def subserviceSelected(self, service):
91                 print "playing subservice number", service
92                 if service is not None:
93                         self.playSubservice(service[1])
94         
95         def keyOK(self):
96                 pass
97         
98         def quitQuestion(self):
99                 self.session.openWithCallback(self.quit, MessageBox, _("Really exit the subservices quickzap?"))
100         
101         def quit(self, answer):
102                 if answer:
103                         self.session.nav.playService(self.restoreService)
104                         self.close()
105                 
106         def playSubservice(self, number = 0):
107                 newservice = self.subservices.getSubservice(number)
108                 if newservice.valid():
109                         del self.subservices
110                         del self.service
111                         self.lastservice = self.currentlyPlayingSubservice
112                         self.session.nav.playService(newservice)
113                         self.currentlyPlayingSubservice = number
114                         self.currentSubserviceNumberLabel.setText(str(number))
115                         self.doShow()