add encoding and copyright header
[enigma2-curlytx.git] / src / CurlyTxSettings.py
1 # -*- coding: utf-8 -*-
2 # CurlyTx configuration window
3 # Copyright (C) 2011 Christian Weiske <cweiske@cweiske.de>
4
5 from . import _
6
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
11
12 from . import config
13 from config import createPage, loadDefaultPageOptions
14 from Components.config import config, getConfigListEntry, ConfigSelection
15 from Components.ConfigList import ConfigList, ConfigListScreen
16
17 class CurlyTxSettings(ConfigListScreen, HelpableScreen, Screen):
18     skin = """
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" />
29         </screen>"""
30
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")
37
38         self["actions"] = ActionMap(["SetupActions","ColorActions"],
39             {
40                 "cancel": self.keyCancel,
41                 "save": self.keySave,
42                 "ok": self.editPage,
43                 "yellow": self.newPage,
44                 "blue": self.deletePage
45             }, -2)
46
47         self["key_red"]    = StaticText(_("Cancel"))
48         self["key_green"]  = StaticText(_("OK"))
49         self["key_yellow"] = StaticText(_("New"))
50         self["key_blue"]   = StaticText(_("Delete"))
51
52         ConfigListScreen.__init__(self, self.getConfigList(), session = self.session)
53
54         self.loadHelp()
55
56     def getConfigList(self):
57         #reload titles
58         loadDefaultPageOptions()
59         cfg = config.plugins.CurlyTx
60
61         list = [
62             getConfigListEntry(_("Page:") + " " + x.title.value, x.uri)
63                 for x in cfg.pages
64             ]
65         if len(cfg.pages):
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))
71         return list
72
73     def loadHelp(self):
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"))]))
92
93     def keyLeft(self):
94         ConfigListScreen.keyLeft(self)
95
96     def keyRight(self):
97         ConfigListScreen.keyRight(self)
98
99     def deletePage(self):
100         pageCount = len(config.plugins.CurlyTx.pages)
101         if pageCount == 0 or self["config"].getCurrentIndex() >= pageCount:
102             return
103
104         from Screens.MessageBox import MessageBox
105         self.session.openWithCallback(
106             self.deletePageConfirm,
107             MessageBox,
108             _("Really delete this page?\nIt cannot be recovered!")
109             )
110
111     def deletePageConfirm(self, result):
112         if not result:
113             return
114
115         id = self["config"].getCurrentIndex()
116         del config.plugins.CurlyTx.pages[id]
117
118         config.plugins.CurlyTx.pages.save()
119
120         self["config"].setList(self.getConfigList())
121
122     def newPage(self):
123         from CurlyTxSettings import CurlyTxSettings
124         self.session.openWithCallback(self.pageEdited, CurlyTxPageEdit, createPage(), True)
125
126     def editPage(self):
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
132                 )
133         else:
134             from AtomFeed import AtomFeed
135             AtomFeed(config.plugins.CurlyTx.feedUrl.value, self.feedPagesReceived)
136
137     def pageEdited(self, page, new):
138         if not page:
139             return
140
141         if new:
142             config.plugins.CurlyTx.pages.append(page)
143
144         self["config"].setList(self.getConfigList())
145
146     def feedPagesReceived(self, pages):
147         if len(pages) == 0:
148             return
149
150         del config.plugins.CurlyTx.pages[:]
151
152         for pageData in pages:
153             page = createPage()
154             config.plugins.CurlyTx.pages.append(page)
155             page.title.setValue(pageData["title"])
156             page.uri.setValue(pageData["url"])
157
158         self["config"].setList(self.getConfigList())
159
160     def keySave(self):
161         for i in range(0, len(config.plugins.CurlyTx.pages)):
162             config.plugins.CurlyTx.pages[i].save()
163
164         config.plugins.CurlyTx.pages.save()
165         ConfigListScreen.keySave(self)
166
167     def cancelConfirm(self, result):
168         """Overwriting ConfigListScreen.cancelConfirm to call cancelAll method"""
169         if not result:
170             return
171
172         self.cancelAll()
173         self.close()
174
175     def cancelAll(self):
176         for x in self["config"].list:
177             x[1].cancel()
178
179         #restore old page configuration
180         cfg = config.plugins.CurlyTx
181         del cfg.pages[:]
182         for i in cfg.pages.stored_values:
183             cfg.pages.append(createPage())
184
185
186
187 class CurlyTxPageEdit(Screen, ConfigListScreen):
188     def __init__(self, session, page, new = False):
189         Screen.__init__(self, session)
190         self.skinName = [ "CurlyTxPageEdit", "Setup" ]
191
192         self["key_red"]   = StaticText(_("Cancel"))
193         self["key_green"] = StaticText(_("OK"))
194
195         self["setupActions"] = ActionMap(["SetupActions"],
196             {
197                 "save": self.save,
198                 "cancel": self.keyCancel
199             }, -1)
200
201         self.page = page
202         self.new = new
203         list = [
204             getConfigListEntry(_("Page URL"), page.uri),
205             getConfigListEntry(_("Title"), page.title),
206             getConfigListEntry(_("Font size"), page.fontSize),
207             ]
208         ConfigListScreen.__init__(self, list, session = self.session)
209
210     def save(self):
211         self.close(self.page, self.new)
212
213     def keyCancel(self):
214         self.close(None, self.new)