2 from Screens.Screen import Screen
3 from Screens.MessageBox import MessageBox
4 from Components.ActionMap import ActionMap
5 from Components.Label import Label
6 from Components.Input import Input
7 from Components.GUIComponent import *
8 from Components.Pixmap import Pixmap
9 from Components.MenuList import MenuList
10 from Components.FileList import FileEntryComponent, FileList
11 from Navigation import Navigation
12 import NavigationInstance
13 from Screens.ChannelSelection import SimpleChannelSelection
14 from ServiceReference import ServiceReference
15 from Plugins.Plugin import PluginDescriptor
21 class AlternativeZapping(Screen):
23 <screen position="100,100" size="560,400" title="Services alternatives setup..." >
24 <widget name="red" position="0,0" size="140,40" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
25 <widget name="green" position="140,0" size="140,40" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
26 <widget name="yellow" position="280,0" size="140,40" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
27 <widget name="blue" position="420,0" size="140,40" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
28 <widget name="serviceslist" position="0,40" size="280,360" />
29 <widget name="alternativeslist" position="280,40" size="280,360" selectionDisabled="1" />
31 def __init__(self, session):
32 self.skin = AlternativeZapping.skin
33 Screen.__init__(self, session)
36 self["red"] = self.red
37 self.green = Label(_("Add service"))
38 self["green"] = self.green
39 self.yellow = Label("")
40 self["yellow"] = self.yellow
42 self["blue"] = self.blue
44 self.serviceslist = []
45 self["serviceslist"] = MenuList(self.serviceslist)
47 self.alternativeslist = []
48 self["alternativeslist"] = MenuList(self.alternativeslist)
50 self.onShown.append(self.updateServices)
51 self.onShown.append(self.updateAlternatives)
53 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions", "ColorActions"],
62 "green": self.greenKey,
63 "yellow": self.yellowKey,
71 self["serviceslist"].instance.moveSelection(self["serviceslist"].instance.moveUp)
72 self.updateAlternatives()
75 self["serviceslist"].instance.moveSelection(self["serviceslist"].instance.moveDown)
76 self.updateAlternatives()
85 if len(self.serviceslist) > 0:
86 del alternatives[self["serviceslist"].getCurrent()[1]]
88 self.updateAlternatives()
90 def finishedAlternativeSelection(self, args):
91 alternatives[self["serviceslist"].getCurrent()[1]].append(str(ServiceReference(args)))
92 self.updateAlternatives()
94 def updateServices(self):
95 self.serviceslist = []
97 for x in alternatives.keys():
98 self.serviceslist.append((ServiceReference(x).getServiceName(), x))
100 self["serviceslist"].l.setList(self.serviceslist)
101 if len(self.serviceslist) > 0:
102 self.yellow.setText(_("Add alternative"))
103 self.red.setText(_("Remove service"))
105 self.yellow.setText("")
108 def updateAlternatives(self):
109 self.alternativeslist = []
111 if len(self.serviceslist) > 0:
112 alternativelist = alternatives[self["serviceslist"].getCurrent()[1]]
114 for x in alternativelist:
115 self.alternativeslist.append((ServiceReference(x).getServiceName(), x))
117 self["alternativeslist"].l.setList(self.alternativeslist)
120 self.session.openWithCallback(self.finishedChannelSelection, SimpleChannelSelection, _("Select reference service"))
122 def finishedChannelSelection(self, args):
123 if alternatives.has_key(str(ServiceReference(args))):
126 alternatives[str(ServiceReference(args))] = []
128 self.updateServices()
129 #oldref = self.timer.service_ref
131 #self.timer.service_ref = ServiceReference(args)
132 #config.timerentry.service.vals = (str(self.timer.service_ref.getServiceName()),)
133 #self["config"].invalidate(config.timerentry.service)
135 # print "you pressed cancel"
136 #self.timer.service_ref = oldref
139 if len(self.serviceslist) > 0:
140 self.session.openWithCallback(self.finishedAlternativeSelection, SimpleChannelSelection, _("Select alternative service"))
146 oldPlayService = NavigationInstance.instance.playService
148 def playService(self, ref):
149 if not oldPlayService(ref):
150 if alternatives.has_key(str(ServiceReference(ref))):
151 for x in alternatives[str(ServiceReference(ref))]:
152 if oldPlayService(ServiceReference(x).ref):
157 def autostart(reason):
159 NavigationInstance.instance.playService = type(NavigationInstance.instance.playService)(playService, NavigationInstance, Navigation)
161 def AlternativeZappingSetup(session):
162 session.open(AlternativeZapping)
165 return [PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart),
166 PluginDescriptor(name="Alternative services setup" , description="Defines alternatives for services.", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=AlternativeZappingSetup)]