1 from Components.GUIComponent import GUIComponent
2 from Components.MultiContent import MultiContentEntryText
3 from enigma import eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_WRAP
5 class RSSBaseList(GUIComponent):
6 """Base List Component for RSSFeeds."""
7 def __init__(self, entries, itemheight):
8 GUIComponent.__init__(self)
10 self.itemheight = itemheight
11 self.l = eListboxPythonMultiContent()
12 self.l.setFont(0, gFont("Regular", 22))
13 self.l.setFont(1, gFont("Regular", 18))
14 self.l.setList(self.list)
16 self.onSelectionChanged = [ ]
18 def connectSelChanged(self, fnc):
19 if not fnc in self.onSelectionChanged:
20 self.onSelectionChanged.append(fnc)
22 def disconnectSelChanged(self, fnc):
23 if fnc in self.onSelectionChanged:
24 self.onSelectionChanged.remove(fnc)
26 def selectionChanged(self):
27 for x in self.onSelectionChanged:
35 def postWidgetCreate(self, instance):
36 instance.setContent(self.l)
37 instance.setItemHeight(self.itemheight)
38 instance.selectionChanged.get().append(self.selectionChanged)
40 def preWidgetRemove(self, instance):
41 instance.selectionChanged.get().remove(self.selectionChanged)
42 instance.setContent(None)
44 def getCurrentEntry(self):
45 return self.l.getCurrentSelection()
47 def getCurrentIndex(self):
48 return self.instance.getCurrentIndex()
50 def moveToIndex(self, index):
51 self.instance.moveSelectionTo(index)
53 def moveToEntry(self, identifier):
57 self.instance.moveSelection(self.instance.moveDown)
60 self.instance.moveSelection(self.instance.moveUp)
65 class RSSFeedList(RSSBaseList):
66 def __init__(self, entries):
67 RSSBaseList.__init__(self, entries, 100)
68 self.l.setBuildFunc(self.buildListboxEntry)
70 def moveToEntry(self, feed):
76 if feed.uri == x[0].uri:
77 self.instance.moveSelectionTo(idx)
81 def buildListboxEntry(self, feed):
83 width = self.l.getItemSize().width()
84 res.append(MultiContentEntryText(pos=(0, 0), size=(width, 75), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = feed.title))
85 res.append(MultiContentEntryText(pos=(0, 75), size=(width, 20), font=1, flags = RT_HALIGN_LEFT, text = feed.description))
88 def getCurrentEntry(self):
89 # We know that the list will never be empty...
90 return self.l.getCurrentSelection()[0]
92 class RSSEntryList(RSSBaseList):
93 def __init__(self, entries):
94 RSSBaseList.__init__(self, entries, 50)
95 self.l.setBuildFunc(self.buildListboxEntry)
97 def moveToEntry(self, entry):
104 self.instance.moveSelectionTo(idx)
108 def buildListboxEntry(self, title, link, summary, enclosures):
110 width = self.l.getItemSize().width()
111 res.append(MultiContentEntryText(pos=(0, 3), size=(width, 50), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = title))