3 from Screens.Screen import Screen
4 from Screens.HelpMenu import HelpableScreen
5 from Screens.MessageBox import MessageBox
6 from Components.Label import Label
7 from Components.ScrollLabel import ScrollLabel
8 from Components.ActionMap import ActionMap
9 from Components.Sources.StaticText import StaticText
10 from twisted.web import client
11 from enigma import gFont
14 from Components.config import config
16 class CurlyTx(Screen,HelpableScreen):
18 <screen name="CurlyTx" position="center,center" size="560,400" title="CurlyTx" >
19 <ePixmap position="0,0" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
20 <ePixmap position="140,0" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
21 <ePixmap position="280,0" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
22 <ePixmap position="420,0" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
23 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
24 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
25 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
26 <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
27 <widget name="text" position="5,45" size="550,350" font="Console;20" />
34 def __init__(self, session, args = None):
35 #self.skin = CurlyTx.skin
36 Screen.__init__(self, session)
37 HelpableScreen.__init__(self)
38 #self.skinName = [ "CurlyTx", "Setup" ]
40 self["text"] = ScrollLabel("foo")
42 self["key_red"] = StaticText(_("Settings"))
43 self["key_green"] = StaticText(_("Reload"))
44 self["key_yellow"] = StaticText(_("Prev"))
45 self["key_blue"] = StaticText(_("Next"))
48 self["actions"] = ActionMap(
49 ["WizardActions", "ColorActions", "InputActions"], {
53 "down": self.pageDown,
55 "red": self.showSettings,
57 "yellow": self.prevPage,
63 self.loadUrl(config.plugins.CurlyTx.defaultPage.value)
64 self.onLayoutFinish.append(self.setTextFont)
67 self.helpList.append((
68 self["actions"], "WizardActions",
69 [("up", _("Scroll page contents up"))]))
70 self.helpList.append((
71 self["actions"], "WizardActions",
72 [("down", _("Scroll page contents down"))]))
73 self.helpList.append((
74 self["actions"], "ColorActions",
75 [("red", _("Show program settings"))]))
76 self.helpList.append((
77 self["actions"], "ColorActions",
78 [("green", _("Reload current page URL"))]))
79 self.helpList.append((
80 self["actions"], "ColorActions",
81 [("yellow", _("Switch to next configured page URL"))]))
82 self.helpList.append((
83 self["actions"], "ColorActions",
84 [("blue", _("Switch to previous configured page URL"))]))
85 self.helpList.append((
86 self["actions"], "WizardActions",
87 [("ok", _("Close window"))]))
88 self.helpList.append((
89 self["actions"], "WizardActions",
90 [("back", _("Close window"))]))
91 self.helpList.append((
92 self["actions"], "HelpActions",
93 [("displayHelp", _("Show this help screen"))]))
95 def loadButtons(self):
96 pageCount = len(config.plugins.CurlyTx.pages)
98 self["key_green"].setText("")
99 self["key_yellow"].setText("")
100 self["key_blue"].setText("")
102 self["key_green"].setText(_("Reload"))
103 self["key_yellow"].setText("")
104 self["key_blue"].setText("")
106 self["key_green"].setText(_("Reload"))
107 self["key_yellow"].setText(_("Prev"))
108 self["key_blue"].setText(_("Next"))
111 self["text"].pageUp()
114 self["text"].pageDown()
117 if self.currentPage == None:
120 pageId = self.currentPage - 1
122 pageId = len(config.plugins.CurlyTx.pages) - 1
126 if self.currentPage == None:
129 pageId = self.currentPage + 1
130 if pageId > len(config.plugins.CurlyTx.pages) - 1:
135 if self.currentPage == None:
138 self.loadUrl(self.currentPage)
140 def loadUrl(self, pageId):
145 cfg = config.plugins.CurlyTx
146 pageCount = len(cfg.pages)
148 if pageId > (pageCount - 1):
149 if len(cfg.pages) == 0:
152 self["text"].setText("Invalid page " + pageId);
155 url = cfg.pages[pageId].uri.value
156 title = cfg.pages[pageId].title.value
159 title = "{0} [{1}/{2}]".format(title, pageId + 1, pageCount)
161 self.currentPage = pageId
162 self.currentUrl = url
163 self.currentFontSize = cfg.pages[pageId].fontSize.value
167 self["text"].setText("Loading ...\n" + url);
169 client.getPage(url).addCallback(self.urlLoaded).addErrback(self.urlFailed, url)
171 def setTextFont(self):
172 if self["text"].long_text is not None:
173 self["text"].long_text.setFont(gFont("Console", self.currentFontSize))
175 def urlLoaded(self, html):
176 self["text"].setText(html)
178 def urlFailed(self, error, url):
179 self["text"].setText(
180 "Error fetching URL:\n " + error.getErrorMessage()
184 def loadNoPage(self):
185 self["text"].setText("Go and add a page in the settings");
187 def showSettings(self):
188 from CurlyTxSettings import CurlyTxSettings
189 self.session.openWithCallback(self.onSettingsChanged, CurlyTxSettings)
191 def onSettingsChanged(self):
193 if len(config.plugins.CurlyTx.pages) == 0:
194 self.currentPage = None
195 self.loadUrl(self.currentPage)
196 elif self.currentPage == None:
198 self.loadUrl(self.currentPage)