from Screens.MessageBox import MessageBox
from Components.ActionMap import ActionMap
-from Components.Label import Label
from Components.ScrollLabel import ScrollLabel
from Components.Sources.List import List
+from Components.Sources.StaticText import StaticText
from RSSList import RSSFeedList
+class RSSSummary(Screen):
+ skin = """
+ <screen position="0,0" size="132,64">
+ <widget source="parent.title" render="Label" position="6,4" size="120,21" font="Regular;18" />
+ <widget source="entry" render="Label" position="6,25" size="120,21" font="Regular;16" />
+ <widget source="global.CurrentTime" render="Label" position="56,46" size="82,18" font="Regular;16" >
+ <convert type="ClockToText">WithSeconds</convert>
+ </widget>
+ </screen>"""
+
+ def __init__(self, session, parent):
+ Screen.__init__(self, session, parent = parent)
+ self["entry"] = StaticText("")
+ parent.onChangedEntry.append(self.selectionChanged)
+ self.onShow.append(parent.updateInfo)
+ self.onClose.append(self.removeWatcher)
+
+ def removeWatcher(self):
+ self.parent.onChangedEntry.remove(self.selectionChanged)
+
+ def selectionChanged(self, text):
+ self["entry"].text = text
+
class RSSBaseView(Screen):
"""Base Screen for all Screens used in SimpleRSS"""
def __init__(self, session, poller, parent = None):
Screen.__init__(self, session, parent)
+ self["title"] = StaticText()
+ self.onChangedEntry = []
self.rssPoller = poller
self.pollDialog = None
+ def createSummary(self):
+ return RSSSummary
+
+ def setTitle(self, title):
+ Screen.setTitle(self, title)
+ self["title"].text = title
+
def errorPolling(self, errmsg = ""):
# An error occured while polling
self.session.open(
"""Shows a RSS Item"""
skin = """
- <screen position="100,100" size="460,420" title="Simple RSS Reader" >
- <widget name="info" position="0,0" size="460, 20" halign="right" font="Regular; 18" />
+ <screen position="center,center" size="460,420" title="Simple RSS Reader" >
+ <widget source="info" render="Label" position="0,0" size="460, 20" halign="right" font="Regular; 18" />
<widget name="content" position="0,20" size="460,400" font="Regular; 22" />
</screen>"""
self.entries = entries
if cur_idx is not None and entries is not None:
- self["info"] = Label(_("Entry %s/%s") % (cur_idx+1, entries))
+ self["info"] = StaticText(_("Entry %s/%s") % (cur_idx+1, entries))
else:
- self["info"] = Label()
+ self["info"] = StaticText()
if data:
self["content"] = ScrollLabel(''.join((data[0], '\n\n', data[2], '\n\n', str(len(data[3])), ' ', _("Enclosures"))))
def setConditionalTitle(self):
self.setTitle(_("Simple RSS Reader: %s") % (self.feedTitle))
+ def updateInfo(self):
+ if self.data:
+ text = self.data[0]
+ else:
+ text = _("No such Item.")
+
+ for x in self.onChangedEntry:
+ try:
+ x(text)
+ except Exception:
+ pass
+
def up(self):
self["content"].pageUp()
def setContent(self):
if self.cur_idx is not None and self.entries is not None:
- self["info"].setText(_("Entry %s/%s") % (self.cur_idx+1, self.entries))
+ self["info"].text = _("Entry %s/%s") % (self.cur_idx+1, self.entries)
else:
- self["info"].setText("")
+ self["info"].text = ""
data = self.data
if data:
self["content"].setText(''.join((data[0], '\n\n', data[2], '\n\n', str(len(data[3])), ' ', _("Enclosures"))))
else:
self["content"].setText(_("No such Item."))
+ self.updateInfo()
def selectEnclosure(self):
if self.data is not None:
"""Shows a RSS-Feed"""
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" />
+ <screen position="center,center" size="460,415" title="Simple RSS Reader" >
+ <widget source="info" render="Label" position="0,0" size="460,20" halign="right" font="Regular; 18" />
<widget source="content" render="Listbox" position="0,20" size="460,300" scrollbarMode="showOnDemand">
<convert type="TemplatedMultiContent">
{"template": [
}
</convert>
</widget>
- <widget name="summary" position="0,320" size="460,95" font="Regular;16" />
+ <widget source="summary" render="Label" position="0,320" size="460,95" font="Regular;16" />
</screen>"""
def __init__(self, session, feed=None, newItems=False, parent=None, rssPoller=None,id=None):
self.id = id
self["content"] = List(self.feed.history)
- self["summary"] = Label()
- self["info"] = Label()
+ self["summary"] = StaticText()
+ self["info"] = StaticText()
if not newItems:
self["actions"] = ActionMap([ "OkCancelActions", "ChannelSelectBaseActions", "MenuActions", "ColorActions" ],
self.onExecBegin.append(self.startTimer)
self["content"].onSelectionChanged.append(self.updateInfo)
- self.onLayoutFinish.extend([self.updateInfo, self.setConditionalTitle])
+ self.onLayoutFinish.extend((
+ self.updateInfo,
+ self.setConditionalTitle
+ ))
def startTimer(self):
self.timer.startLongTimer(5)
def updateInfo(self):
current_entry = self["content"].current
if current_entry:
- self["summary"].setText(current_entry[2])
+ self["summary"].text = current_entry[2]
cur_idx = self["content"].index
- self["info"].setText(_("Entry %s/%s") % (cur_idx+1, len(self.feed.history)))
+ self["info"].text = _("Entry %s/%s") % (cur_idx+1, len(self.feed.history))
+ summary_text = current_entry[0]
else:
- self["summary"].setText(_("Feed is empty."))
- self["info"].setText("")
+ self["summary"].text = _("Feed is empty.")
+ self["info"].text = ""
+ summary_text = _("Feed is empty.")
+
+ for x in self.onChangedEntry:
+ try:
+ x(summary_text)
+ except Exception:
+ pass
def menu(self):
if self.id > 0:
"""Shows an Overview over all RSS-Feeds known to rssPoller"""
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" />
+ <screen position="center,center" size="460,415" title="Simple RSS Reader" >
+ <widget source="info" render="Label" position="0,0" size="460,20" halign="right" font="Regular; 18" />
<widget name="content" position="0,20" size="460,300" scrollbarMode="showOnDemand" />
- <widget name="summary" position="0,320" size="460,95" font="Regular;16" />
+ <widget source="summary" render="Label" position="0,320" size="460,95" font="Regular;16" />
</screen>"""
def __init__(self, session, poller):
# We always have at least "New Items"-Feed
self["content"] = RSSFeedList(self.feeds)
- self["summary"] = Label(' '.join((str(len(self.feeds[0][0].history)), _("Entries"))))
- self["info"] = Label(_("Feed %s/%s") % (1, len(self.feeds)))
+ self["summary"] = StaticText(' '.join((str(len(self.feeds[0][0].history)), _("Entries"))))
+ self["info"] = StaticText(_("Feed %s/%s") % (1, len(self.feeds)))
self["content"].connectSelChanged(self.updateInfo)
self.onLayoutFinish.append(self.__show)
def updateInfo(self):
current_entry = self["content"].getCurrent()
- self["summary"].setText(' '.join((str(len(current_entry.history)), _("Entries"))))
- self["info"].setText(_("Feed %s/%s") % (self["content"].getSelectedIndex()+1, len(self.feeds)))
+ self["summary"].text = ' '.join((str(len(current_entry.history)), _("Entries")))
+ self["info"].text = _("Feed %s/%s") % (self["content"].getSelectedIndex()+1, len(self.feeds))
+ summary_text = current_entry.title
+
+ for x in self.onChangedEntry:
+ try:
+ x(summary_text)
+ except Exception:
+ pass
def menu(self):
from Screens.ChoiceBox import ChoiceBox