1 from enigma import iPlayableService, loadPNG, iRdsDecoder
2 from Screens.Screen import Screen
3 from Components.ActionMap import NumberActionMap
4 from Components.ServiceEventTracker import ServiceEventTracker
5 from Components.Pixmap import Pixmap
6 from Components.Label import Label
7 from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE
9 class RdsInfoDisplay(Screen):
12 def __init__(self, session):
13 Screen.__init__(self, session)
15 self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
17 iPlayableService.evEnd: self.__serviceStopped,
18 iPlayableService.evUpdatedRadioText: self.RadioTextChanged,
19 iPlayableService.evUpdatedRtpText: self.RtpTextChanged,
20 iPlayableService.evUpdatedRassInteractivePicMask: self.RassInteractivePicMaskChanged,
23 self["RadioText"] = Label()
24 self["RtpText"] = Label()
25 self["RassLogo"] = Pixmap()
27 self.onLayoutFinish.append(self.hideWidgets)
28 self.rassInteractivePossible=False
29 self.onRassInteractivePossibilityChanged = [ ]
31 def hideWidgets(self):
32 for x in (self["RadioText"],self["RtpText"],self["RassLogo"]):
35 def RadioTextChanged(self):
36 service = self.session.nav.getCurrentService()
37 decoder = service and service.rdsDecoder()
38 rdsText = decoder and decoder.getText(iRdsDecoder.RadioText)
39 if rdsText and len(rdsText):
40 self["RadioText"].setText(rdsText)
41 self["RadioText"].show()
43 self["RadioText"].hide()
45 def RtpTextChanged(self):
46 service = self.session.nav.getCurrentService()
47 decoder = service and service.rdsDecoder()
48 rtpText = decoder and decoder.getText(iRdsDecoder.RtpText)
49 if rtpText and len(rtpText):
50 self["RtpText"].setText(rtpText)
51 self["RtpText"].show()
53 self["RtpText"].hide()
55 def RassInteractivePicMaskChanged(self):
56 if not self.rassInteractivePossible:
57 service = self.session.nav.getCurrentService()
58 decoder = service and service.rdsDecoder()
59 mask = decoder and decoder.getRassInteractiveMask()
60 if mask[0] & 1: #rass interactive index page available
61 self["RassLogo"].show()
62 self.rassInteractivePossible = True
63 for x in self.onRassInteractivePossibilityChanged:
66 def __serviceStopped(self):
68 if self.rassInteractivePossible:
69 self.rassInteractivePossible = False
70 for x in self.onRassInteractivePossibilityChanged:
73 class RassInteractive(Screen):
74 def __init__(self, session):
75 Screen.__init__(self, session)
77 self["actions"] = NumberActionMap( [ "NumberActions", "RassInteractiveActions" ],
80 "0": lambda x : self.numPressed(0),
81 "1": lambda x : self.numPressed(1),
82 "2": lambda x : self.numPressed(2),
83 "3": lambda x : self.numPressed(3),
84 "4": lambda x : self.numPressed(4),
85 "5": lambda x : self.numPressed(5),
86 "6": lambda x : self.numPressed(6),
87 "7": lambda x : self.numPressed(7),
88 "8": lambda x : self.numPressed(8),
89 "9": lambda x : self.numPressed(9),
90 "nextPage": self.nextPage,
91 "prevPage": self.prevPage,
92 "nextSubPage": self.nextSubPage,
93 "prevSubPage": self.prevSubPage
96 self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
98 iPlayableService.evUpdatedRassInteractivePicMask: self.recvRassInteractivePicMaskChanged
101 self["subpages_1"] = Pixmap()
102 self["subpages_2"] = Pixmap()
103 self["subpages_3"] = Pixmap()
104 self["subpages_4"] = Pixmap()
105 self["subpages_5"] = Pixmap()
106 self["subpages_6"] = Pixmap()
107 self["subpages_7"] = Pixmap()
108 self["subpages_8"] = Pixmap()
109 self["subpages_9"] = Pixmap()
110 self["Marker"] = Label(">")
113 1 : self["subpages_1"],
114 2 : self["subpages_2"],
115 3 : self["subpages_3"],
116 4 : self["subpages_4"],
117 5 : self["subpages_5"],
118 6 : self["subpages_6"],
119 7 : self["subpages_7"],
120 8 : self["subpages_8"],
121 9 : self["subpages_9"] }
124 1 : loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "rass_page1.png")),
125 2 : loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "rass_page2.png")),
126 3 : loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "rass_page3.png")),
127 4 : loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "rass_page4.png")) }
130 self.current_subpage=0;
131 self.showRassPage(0,0)
132 self.onLayoutFinish.append(self.updateSubPagePixmaps)
134 def updateSubPagePixmaps(self):
135 service = self.session.nav.getCurrentService()
136 decoder = service and service.rdsDecoder()
137 if not decoder: # this should never happen
138 print "NO RDS DECODER in showRassPage"
140 mask = decoder.getRassInteractiveMask()
143 subpage_cnt = self.countAvailSubpages(page, mask)
144 subpage = self.subpage[page]
147 png = self.subpage_png[subpage_cnt]
149 subpage.instance.setPixmap(png)
152 print "rass png missing"
157 def recvRassInteractivePicMaskChanged(self):
158 self.updateSubPagePixmaps()
160 def showRassPage(self, page, subpage):
161 service = self.session.nav.getCurrentService()
162 decoder = service and service.rdsDecoder()
163 if not decoder: # this should never happen
164 print "NO RDS DECODER in showRassPage"
166 decoder.showRassInteractivePic(page, subpage)
167 page_diff = page - self.current_page
168 self.current_page = page
170 current_pos = self["Marker"].getPosition()
173 self["Marker"].setPosition(current_pos[0],y)
175 def getMaskForPage(self, page, masks=None):
177 service = self.session.nav.getCurrentService()
178 decoder = service and service.rdsDecoder()
179 if not decoder: # this should never happen
180 print "NO RDS DECODER in getMaskForPage"
181 masks = decoder.getRassInteractiveMask()
183 mask = masks[(page*4)/8]
190 def countAvailSubpages(self, page, masks):
191 mask = self.getMaskForPage(page, masks)
201 page = self.current_page
206 mask = self.getMaskForPage(page)
207 self.numPressed(page)
211 page = self.current_page
217 mask = self.getMaskForPage(page)
218 self.numPressed(page)
220 def nextSubPage(self):
221 self.numPressed(self.current_page)
223 def prevSubPage(self):
224 num = self.current_page
225 mask = self.getMaskForPage(num)
226 cur_bit = 1 << self.current_subpage
233 if tmp == cur_bit: # no other subpage avail
235 if mask & tmp: # next subpage found
237 while tmp > 1: # convert bit to subpage
240 self.current_subpage = subpage
241 self.showRassPage(num, subpage)
244 def numPressed(self, num):
245 mask = self.getMaskForPage(num)
246 if self.current_page == num:
248 cur_bit = 1 << self.current_subpage
256 if tmp == 8 and cur_bit < 16:
262 if tmp == cur_bit: # no other subpage avail
264 if mask & tmp: # next subpage found
266 while tmp > 1: # convert bit to subpage
269 self.current_subpage = subpage
270 self.showRassPage(num, subpage)