1 # -*- coding: utf-8 -*-
2 # CurlyTx configuration window
3 # Copyright (C) 2011 Christian Weiske <cweiske@cweiske.de>
7 from Screens.Screen import Screen
8 from Screens.HelpMenu import HelpableScreen
9 from Components.ActionMap import ActionMap, NumberActionMap
10 from Components.Sources.StaticText import StaticText
13 from config import createPage, loadDefaultPageOptions
14 from Components.config import config, getConfigListEntry, ConfigSelection
15 from Components.ConfigList import ConfigList, ConfigListScreen
17 class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
19 <screen name="Setup" position="center,center" size="560,430" title="Setup">
20 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
21 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
22 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
23 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
24 <widget source="key_red" render="Label" position="0,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
25 <widget source="key_green" render="Label" position="140,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
26 <widget source="key_yellow" render="Label" position="280,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#a08500" transparent="1" />
27 <widget source="key_blue" render="Label" position="420,0" zPosition="1" size="140,40" font="Regular;20" valign="center" halign="center" backgroundColor="#18188b" transparent="1" />
28 <widget name="config" position="5,50" size="550,325" scrollbarMode="showOnDemand" />
31 def __init__(self, session):
32 self.skin = CurlyTxSettings.skin
33 Screen.__init__(self, session)
34 HelpableScreen.__init__(self)
35 #self.skinName = [ "CurlyTxSettings", "Setup" ]
36 self.setup_title = _("Settings")
38 self["actions"] = ActionMap(["SetupActions","ColorActions"],
40 "cancel": self.keyCancel,
43 "yellow": self.newPage,
44 "blue": self.deletePage
47 self["key_red"] = StaticText(_("Cancel"))
48 self["key_green"] = StaticText(_("OK"))
49 self["key_yellow"] = StaticText(_("New"))
50 self["key_blue"] = StaticText(_("Delete"))
52 ConfigListScreen.__init__(self, self.getConfigList(), session = self.session)
56 def getConfigList(self):
58 loadDefaultPageOptions()
59 cfg = config.plugins.CurlyTx
62 getConfigListEntry(_("Page:") + " " + x.title.value, x.uri)
66 list.append(getConfigListEntry(_("Default page"), cfg.defaultPage))
67 list.append(getConfigListEntry(_("Show in main menu"), cfg.menuMain))
68 list.append(getConfigListEntry(_("Show in extensions menu"), cfg.menuExtensions))
69 list.append(getConfigListEntry(_("Menu title"), cfg.menuTitle))
70 list.append(getConfigListEntry(_("Page feed URL"), cfg.feedUrl))
74 self.helpList.append((
75 self["actions"], "SetupActions",
76 [("cancel", _("Dismiss all setting changes"))]))
77 self.helpList.append((
78 self["actions"], "SetupActions",
79 [("save", _("Save settings and close screen"))]))
80 self.helpList.append((
81 self["actions"], "SetupActions",
82 [("ok", _("Edit selected page"))]))
83 self.helpList.append((
84 self["actions"], "SetupActions",
85 [("ok", _("Load pages from feed"))]))
86 self.helpList.append((
87 self["actions"], "ColorActions",
88 [("yellow", _("Add new page"))]))
89 self.helpList.append((
90 self["actions"], "ColorActions",
91 [("blue", _("Delete selected page"))]))
94 ConfigListScreen.keyLeft(self)
97 ConfigListScreen.keyRight(self)
100 pageCount = len(config.plugins.CurlyTx.pages)
101 if pageCount == 0 or self["config"].getCurrentIndex() >= pageCount:
104 from Screens.MessageBox import MessageBox
105 self.session.openWithCallback(
106 self.deletePageConfirm,
108 _("Really delete this page?\nIt cannot be recovered!")
111 def deletePageConfirm(self, result):
115 id = self["config"].getCurrentIndex()
116 del config.plugins.CurlyTx.pages[id]
118 config.plugins.CurlyTx.pages.save()
120 self["config"].setList(self.getConfigList())
123 from CurlyTxSettings import CurlyTxSettings
124 self.session.openWithCallback(self.pageEdited, CurlyTxPageEdit, createPage(), True)
127 id = self["config"].getCurrentIndex()
128 if id < len(config.plugins.CurlyTx.pages):
129 self.session.openWithCallback(
130 self.pageEdited, CurlyTxPageEdit,
131 config.plugins.CurlyTx.pages[id], False
134 from AtomFeed import AtomFeed
135 AtomFeed(config.plugins.CurlyTx.feedUrl.value, self.feedPagesReceived)
137 def pageEdited(self, page, new):
142 config.plugins.CurlyTx.pages.append(page)
144 self["config"].setList(self.getConfigList())
146 def feedPagesReceived(self, pages):
150 del config.plugins.CurlyTx.pages[:]
152 for pageData in pages:
154 config.plugins.CurlyTx.pages.append(page)
155 page.title.setValue(pageData["title"])
156 page.uri.setValue(pageData["url"])
158 self["config"].setList(self.getConfigList())
161 for i in range(0, len(config.plugins.CurlyTx.pages)):
162 config.plugins.CurlyTx.pages[i].save()
164 config.plugins.CurlyTx.pages.save()
165 ConfigListScreen.keySave(self)
167 def cancelConfirm(self, result):
168 """Overwriting ConfigListScreen.cancelConfirm to call cancelAll method"""
176 for x in self["config"].list:
179 #restore old page configuration
180 cfg = config.plugins.CurlyTx
182 for i in cfg.pages.stored_values:
183 cfg.pages.append(createPage())
187 class CurlyTxPageEdit(Screen, ConfigListScreen):
188 def __init__(self, session, page, new = False):
189 Screen.__init__(self, session)
190 self.skinName = [ "CurlyTxPageEdit", "Setup" ]
192 self["key_red"] = StaticText(_("Cancel"))
193 self["key_green"] = StaticText(_("OK"))
195 self["setupActions"] = ActionMap(["SetupActions"],
198 "cancel": self.keyCancel
204 getConfigListEntry(_("Page URL"), page.uri),
205 getConfigListEntry(_("Title"), page.title),
206 getConfigListEntry(_("Font size"), page.fontSize),
208 ConfigListScreen.__init__(self, list, session = self.session)
211 self.close(self.page, self.new)
214 self.close(None, self.new)