1 # -*- coding: utf-8 -*-
2 # CurlyTx configuration window
3 # Copyright (C) 2011 Christian Weiske <cweiske@cweiske.de>
4 # License: GPLv3 or later
8 from Screens.Screen import Screen
9 from Screens.HelpMenu import HelpableScreen
10 from Components.ActionMap import ActionMap, NumberActionMap
11 from Components.Sources.StaticText import StaticText
14 from config import createPage, loadDefaultPageOptions
15 from Components.config import config, getConfigListEntry, ConfigSelection
16 from Components.ConfigList import ConfigList, ConfigListScreen
18 class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
20 <screen name="Setup" position="center,center" size="560,430" title="Setup">
21 <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" transparent="1" alphatest="on" />
22 <ePixmap pixmap="skin_default/buttons/green.png" position="140,0" size="140,40" transparent="1" alphatest="on" />
23 <ePixmap pixmap="skin_default/buttons/yellow.png" position="280,0" size="140,40" transparent="1" alphatest="on" />
24 <ePixmap pixmap="skin_default/buttons/blue.png" position="420,0" size="140,40" transparent="1" alphatest="on" />
25 <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" />
26 <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" />
27 <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" />
28 <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" />
29 <widget name="config" position="5,50" size="550,325" scrollbarMode="showOnDemand" />
32 def __init__(self, session):
33 self.skin = CurlyTxSettings.skin
34 Screen.__init__(self, session)
35 HelpableScreen.__init__(self)
36 #self.skinName = [ "CurlyTxSettings", "Setup" ]
37 self.setup_title = _("Settings")
39 self["actions"] = ActionMap(["SetupActions","ColorActions"],
41 "cancel": self.keyCancel,
44 "yellow": self.newPage,
45 "blue": self.deletePage
48 self["key_red"] = StaticText(_("Cancel"))
49 self["key_green"] = StaticText(_("OK"))
50 self["key_yellow"] = StaticText(_("New"))
51 self["key_blue"] = StaticText(_("Delete"))
53 ConfigListScreen.__init__(self, self.getConfigList(), session = self.session)
57 def getConfigList(self):
59 loadDefaultPageOptions()
60 cfg = config.plugins.CurlyTx
63 getConfigListEntry(_("Page:") + " " + x.title.value, x.uri)
67 list.append(getConfigListEntry(_("Default page"), cfg.defaultPage))
68 list.append(getConfigListEntry(_("Show in main menu"), cfg.menuMain))
69 list.append(getConfigListEntry(_("Show in extensions menu"), cfg.menuExtensions))
70 list.append(getConfigListEntry(_("Menu title"), cfg.menuTitle))
71 list.append(getConfigListEntry(_("Page feed URL"), cfg.feedUrl))
75 self.helpList.append((
76 self["actions"], "SetupActions",
77 [("cancel", _("Dismiss all setting changes"))]))
78 self.helpList.append((
79 self["actions"], "SetupActions",
80 [("save", _("Save settings and close screen"))]))
81 self.helpList.append((
82 self["actions"], "SetupActions",
83 [("ok", _("Edit selected page"))]))
84 self.helpList.append((
85 self["actions"], "SetupActions",
86 [("ok", _("Load pages from feed"))]))
87 self.helpList.append((
88 self["actions"], "ColorActions",
89 [("yellow", _("Add new page"))]))
90 self.helpList.append((
91 self["actions"], "ColorActions",
92 [("blue", _("Delete selected page"))]))
95 ConfigListScreen.keyLeft(self)
98 ConfigListScreen.keyRight(self)
100 def deletePage(self):
101 pageCount = len(config.plugins.CurlyTx.pages)
102 if pageCount == 0 or self["config"].getCurrentIndex() >= pageCount:
105 from Screens.MessageBox import MessageBox
106 self.session.openWithCallback(
107 self.deletePageConfirm,
109 _("Really delete this page?\nIt cannot be recovered!")
112 def deletePageConfirm(self, result):
116 id = self["config"].getCurrentIndex()
117 del config.plugins.CurlyTx.pages[id]
119 config.plugins.CurlyTx.pages.save()
121 self["config"].setList(self.getConfigList())
124 from CurlyTxSettings import CurlyTxSettings
125 self.session.openWithCallback(self.pageEdited, CurlyTxPageEdit, createPage(), True)
128 id = self["config"].getCurrentIndex()
129 if id < len(config.plugins.CurlyTx.pages):
130 self.session.openWithCallback(
131 self.pageEdited, CurlyTxPageEdit,
132 config.plugins.CurlyTx.pages[id], False
135 from AtomFeed import AtomFeed
136 AtomFeed(config.plugins.CurlyTx.feedUrl.value, self.feedPagesReceived)
138 def pageEdited(self, page, new):
143 config.plugins.CurlyTx.pages.append(page)
145 self["config"].setList(self.getConfigList())
147 def feedPagesReceived(self, pages):
151 del config.plugins.CurlyTx.pages[:]
153 for pageData in pages:
155 config.plugins.CurlyTx.pages.append(page)
156 page.title.setValue(pageData["title"])
157 page.uri.setValue(pageData["url"])
159 self["config"].setList(self.getConfigList())
162 for i in range(0, len(config.plugins.CurlyTx.pages)):
163 config.plugins.CurlyTx.pages[i].save()
165 config.plugins.CurlyTx.pages.save()
166 ConfigListScreen.keySave(self)
168 def cancelConfirm(self, result):
169 """Overwriting ConfigListScreen.cancelConfirm to call cancelAll method"""
177 for x in self["config"].list:
180 #restore old page configuration
181 cfg = config.plugins.CurlyTx
183 for i in cfg.pages.stored_values:
184 cfg.pages.append(createPage())
188 class CurlyTxPageEdit(Screen, ConfigListScreen):
189 def __init__(self, session, page, new = False):
190 Screen.__init__(self, session)
191 self.skinName = [ "CurlyTxPageEdit", "Setup" ]
193 self["key_red"] = StaticText(_("Cancel"))
194 self["key_green"] = StaticText(_("OK"))
196 self["setupActions"] = ActionMap(["SetupActions"],
199 "cancel": self.keyCancel
205 getConfigListEntry(_("Page URL"), page.uri),
206 getConfigListEntry(_("Title"), page.title),
207 getConfigListEntry(_("Font size"), page.fontSize),
209 ConfigListScreen.__init__(self, list, session = self.session)
212 self.close(self.page, self.new)
215 self.close(None, self.new)