- alphabetize autotimers in overview,
[vuplus_dvbapp-plugin] / autotimer / src / AutoTimerOverview.py
1 # for localized messages
2 from . import _
3
4 # GUI (Screens)
5 from Screens.Screen import Screen
6 from Screens.HelpMenu import HelpableScreen
7 from Screens.MessageBox import MessageBox
8 from Screens.ChoiceBox import ChoiceBox
9 from AutoTimerEditor import AutoTimerEditor
10 from AutoTimerSettings import AutoTimerSettings
11 from AutoTimerPreview import AutoTimerPreview
12 from AutoTimerImporter import AutoTimerImportSelector
13
14 # GUI (Components)
15 from AutoTimerList import AutoTimerList
16 from Components.ActionMap import HelpableActionMap
17 from Components.Button import Button
18
19 # Plugin
20 from AutoTimerComponent import AutoTimerComponent
21
22 class AutoTimerOverview(Screen, HelpableScreen):
23         """Overview of AutoTimers"""
24
25         skin = """<screen name="AutoTimerOverview" position="140,148" size="460,265" title="AutoTimer Overview">
26                         <widget name="entries" position="5,5" size="450,200" scrollbarMode="showOnDemand" />
27                         <ePixmap position="0,220" zPosition="1" size="140,40" pixmap="skin_default/buttons/green.png" alphatest="on" />
28                         <ePixmap position="140,220" zPosition="1" size="140,40" pixmap="skin_default/buttons/yellow.png" alphatest="on" />
29                         <ePixmap position="280,220" zPosition="1" size="140,40" pixmap="skin_default/buttons/blue.png" alphatest="on" />
30                         <ePixmap position="422,230" zPosition="1" size="35,25" pixmap="skin_default/buttons/key_menu.png" alphatest="on" />
31                         <widget name="key_green" position="0,220" zPosition="2" size="140,40" halign="center" valign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
32                         <widget name="key_yellow" position="140,220" zPosition="2" size="140,40" halign="center" valign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
33                         <widget name="key_blue" position="280,220" zPosition="2" size="140,40" halign="center" valign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />
34                 </screen>"""
35
36         def __init__(self, session, autotimer):
37                 Screen.__init__(self, session)
38                 HelpableScreen.__init__(self)
39
40                 # Save autotimer
41                 self.autotimer = autotimer
42
43                 self.changed = False
44
45                 # Button Labels
46                 self["key_green"] = Button(_("Save"))
47                 self["key_yellow"] = Button(_("Delete"))
48                 self["key_blue"] = Button(_("Add"))
49
50                 # Create List of Timers
51                 self["entries"] = AutoTimerList(self.autotimer.getTupleTimerList())
52
53                 # Define Actions
54                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
55                         {
56                                 "ok": (self.ok, _("Edit selected AutoTimer")),
57                                 "cancel": (self.cancel, _("Close and forget changes")),
58                         }
59                 )
60
61                 self["MenuActions"] = HelpableActionMap(self, "MenuActions",
62                         {
63                                 "menu": (self.menu, _("Open Context Menu"))
64                         }
65                 )
66
67                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
68                         {
69                                 "green": (self.save, _("Close and save changes")),
70                                 "yellow": (self.remove, _("Remove selected AutoTimer")),
71                                 "blue": (self.add, _("Add new AutoTimer")),
72                         }
73                 )
74
75         def add(self):
76                 newTimer = self.autotimer.defaultTimer.clone()
77                 newTimer.id = self.autotimer.getUniqueId()
78                 
79                 self.session.openWithCallback(
80                         self.addCallback,
81                         AutoTimerEditor,
82                         newTimer
83                 )
84
85         def editCallback(self, ret):
86                 if ret:
87                         self.changed = True
88                         self.refresh()
89
90         def addCallback(self, ret):
91                 if ret:
92                         self.changed = True
93                         self.autotimer.add(ret)
94                         self.refresh()
95
96         def importCallback(self, ret):
97                 if ret:
98                         self.session.openWithCallback(
99                                 self.addCallback,
100                                 AutoTimerEditor,
101                                 ret
102                         )
103
104         def refresh(self, res = None):
105                 # Re-assign List
106                 cur = self["entries"].getCurrent()
107                 self["entries"].setList(self.autotimer.getSortedTupleTimerList())
108                 self["entries"].moveToEntry(cur)
109
110         def ok(self):
111                 # Edit selected Timer
112                 current = self["entries"].getCurrent()
113                 if current is not None:
114                         self.session.openWithCallback(
115                                 self.editCallback,
116                                 AutoTimerEditor,
117                                 current
118                         )
119
120         def remove(self):
121                 # Remove selected Timer
122                 cur = self["entries"].getCurrent()
123                 if cur is not None:
124                         self.session.openWithCallback(
125                                 self.removeCallback,
126                                 MessageBox,
127                                 _("Do you really want to delete %s?") % (cur.name),
128                         )
129
130         def removeCallback(self, ret):
131                 cur = self["entries"].getCurrent()
132                 if ret and cur:
133                         self.autotimer.remove(cur.id)
134                         self.refresh()
135
136         def cancel(self):
137                 if self.changed:
138                         self.session.openWithCallback(
139                                 self.cancelConfirm,
140                                 MessageBox,
141                                 _("Really close without saving settings?")
142                         )
143                 else:
144                         self.close(None)
145
146         def cancelConfirm(self, ret):
147                 if ret:
148                         # Invalidate config mtime to force re-read on next run
149                         self.autotimer.configMtime = -1
150
151                         # Close and indicated that we canceled by returning None
152                         self.close(None)
153
154         def menu(self):
155                 self.session.openWithCallback(
156                         self.menuCallback,
157                         ChoiceBox,
158                         list = [
159                                 (_("Preview"), "preview"),
160                                 (_("Import"), "import"),
161                                 (_("Setup"), "setup"),
162                                 (_("Edit new timer defaults"), "defaults"),
163                         ],
164                 )
165
166         def menuCallback(self, ret):
167                 ret = ret and ret[1]
168                 if ret:
169                         if ret == "preview":
170                                 total, new, modified, timers = self.autotimer.parseEPG(simulateOnly = True)
171                                 self.session.open(
172                                         AutoTimerPreview,
173                                         timers
174                                 )
175                         elif ret == "import":
176                                 newTimer = self.autotimer.defaultTimer.clone()
177                                 newTimer.id = self.autotimer.getUniqueId()
178
179                                 self.session.openWithCallback(
180                                         self.importCallback,
181                                         AutoTimerImportSelector,
182                                         newTimer
183                                 )
184                         elif ret == "setup":
185                                 self.session.open(
186                                         AutoTimerSettings
187                                 )
188                         elif ret == "defaults":
189                                 self.session.open(
190                                         AutoTimerEditor,
191                                         self.autotimer.defaultTimer,
192                                         editingDefaults = True
193                                 )
194
195         def save(self):
196                 # Just close here, saving will be done by cb
197                 self.close(self.session)