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