from skin import parseFont
-class RSSBaseList(MenuList):
- """Base List Component for RSSFeeds."""
-
- def __init__(self, entries, itemheight):
+class RSSFeedList(MenuList):
+ def __init__(self, entries):
MenuList.__init__(self, entries, False, content = eListboxPythonMultiContent)
l = self.l
l.setFont(0, gFont("Regular", 22))
self.descriptionFont = gFont("Regular", 18)
l.setFont(1, self.descriptionFont)
- l.setItemHeight(itemheight)
+ l.setItemHeight(100)
+ l.setBuildFunc(self.buildListboxEntry)
def applySkin(self, desktop, parent):
attribs = [ ]
if fnc in self.onSelectionChanged:
self.onSelectionChanged.remove(fnc)
- def moveToEntry(self, identifier):
- pass
-
def invalidate(self):
self.l.invalidate()
-class RSSFeedList(RSSBaseList):
- def __init__(self, entries):
- RSSBaseList.__init__(self, entries, 100)
- self.l.setBuildFunc(self.buildListboxEntry)
-
def moveToEntry(self, feed):
if feed is None:
return
# We know that the list will never be empty...
return self.l.getCurrentSelection()[0]
-class RSSEntryList(RSSBaseList):
- def __init__(self, entries):
- RSSBaseList.__init__(self, entries, 50)
- self.l.setBuildFunc(self.buildListboxEntry)
-
- def moveToEntry(self, entry):
- if entry is None:
- return
-
- idx = 0
- for x in self.list:
- if entry[0] == x[0]:
- self.instance.moveSelectionTo(idx)
- break
- idx += 1
-
- def buildListboxEntry(self, title, link, summary, enclosures):
- size = self.l.getItemSize()
- return [
- None,
- MultiContentEntryText(pos=(0, 3), size=(size.width(), size.height() - 3), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = title)
- ]
-
from Components.ActionMap import ActionMap
from Components.Label import Label
from Components.ScrollLabel import ScrollLabel
+from Components.Sources.List import List
-from RSSList import RSSFeedList, RSSEntryList
+from RSSList import RSSFeedList
class RSSBaseView(Screen):
"""Base Screen for all Screens used in SimpleRSS"""
skin = """
<screen position="100,100" size="460,415" title="Simple RSS Reader" >
<widget name="info" position="0,0" size="460,20" halign="right" font="Regular; 18" />
- <widget name="content" position="0,20" size="460,300" scrollbarMode="showOnDemand" />
+ <widget source="content" render="Listbox" position="0,20" size="460,300" scrollbarMode="showOnDemand">
+ <convert type="TemplatedMultiContent">
+ {"template": [
+ MultiContentEntryText(pos=(0, 3), size=(460, 294), font=0, flags = RT_HALIGN_LEFT|RT_WRAP, text = 0)
+ ],
+ "fonts": [gFont("Regular", 22)],
+ "itemHeight": 50
+ }
+ </convert>
+ </widget>
<widget name="summary" position="0,320" size="460,95" font="Regular;16" />
</screen>"""
self.newItems = newItems
self.id = id
- self["content"] = RSSEntryList(self.feed.history)
+ self["content"] = List(self.feed.history)
self["summary"] = Label()
self["info"] = Label()
self.timer.callback.append(self.timerTick)
self.onExecBegin.append(self.startTimer)
- self["content"].connectSelChanged(self.updateInfo)
+ self["content"].onSelectionChanged.append(self.updateInfo)
self.onLayoutFinish.extend([self.updateInfo, self.setConditionalTitle])
def startTimer(self):
print "[SimpleRSS] SimpleRSSFeed called back"
if id is None or id+1 == self.id:
- # TODO: do we really need this?
- current_entry = self["content"].getCurrent()
- self["content"].moveToEntry(current_entry)
-
- self["content"].invalidate()
+ self["content"].updateList(self.feed.history)
self.setConditionalTitle()
self.updateInfo()
self.setTitle(_("Simple RSS Reader: %s") % (self.feed.title))
def updateInfo(self):
- current_entry = self["content"].getCurrent()
+ current_entry = self["content"].current
if current_entry:
self["summary"].setText(current_entry[2])
- cur_idx = self["content"].getSelectedIndex()
+ cur_idx = self["content"].index
self["info"].setText(_("Entry %s/%s") % (cur_idx+1, len(self.feed.history)))
else:
self["summary"].setText(_("Feed is empty."))
self.singleUpdate(self.id-1)
def nextEntry(self):
- self["content"].down()
- return (self["content"].getCurrent(), self["content"].getSelectedIndex(), len(self.feed.history))
+ self["content"].selectNext()
+ return (self["content"].current, self["content"].index, len(self.feed.history))
def previousEntry(self):
- self["content"].up()
- return (self["content"].getCurrent(), self["content"].getSelectedIndex(), len(self.feed.history))
+ self["content"].selectPrevious()
+ return (self["content"].current, self["content"].index, len(self.feed.history))
- # TODO: Fix moving back to previously marked entry (same goes for self.previous)
def next(self):
# Show next Feed
if self.parent is not None:
(self.feed, self.id) = self.parent.nextFeed()
- #current_entry = self["content"].getCurrent()
- self["content"].setList(self.feed.history) # Update list
- self["content"].moveToIndex(0)
- #self["content"].moveToEntry(current_entry)
- self.updateInfo() # In case entry is no longer in history
+ self["content"].list = self.feed.history
+ self["content"].index = 0
+ self.updateInfo()
self.setConditionalTitle() # Update title
return (self.feed.title, self.feed.history, self.id)
return (self.feed.title, self.feed.history, self.id)
# Show previous Feed
if self.parent is not None:
(self.feed, self.id) = self.parent.previousFeed()
- #current_entry = self["content"].getCurrent()
- self["content"].setList(self.feed.history) # Update list
- self["content"].moveToIndex(0)
- #self["content"].moveToEntry(current_entry)
- self.updateInfo() # In case entry is no longer in history
+ self["content"].list = self.feed.history
+ self["content"].index = 0
+ self.updateInfo()
self.setConditionalTitle() # Update title
return (self.feed.title, self.feed.history, self.id)
return (self.feed.title, self.feed.history, self.id)
self.singleUpdate(self.id-1)
def showCurrentEntry(self):
- current_entry = self["content"].getCurrent()
- if current_entry is None: # empty list
+ current_entry = self["content"].current
+ if not current_entry: # empty list
return
self.session.openWithCallback(
self.updateInfo,
RSSEntryView,
current_entry,
- cur_idx=self["content"].getSelectedIndex(),
- entries=len(self.feed.history),
- feedTitle=self.feed.title,
- parent=self
+ cur_idx = self["content"].index,
+ entries = len(self.feed.history),
+ feedTitle = self.feed.title,
+ parent = self
)
def selectEnclosure(self):
- current_entry = self["content"].getCurrent()
- if current_entry is None: # empty list
+ current_entry = self["content"].current
+ if not current_entry: # empty list
return
RSSBaseView.selectEnclosure(self, current_entry[3])