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