Merge lp:~knny-myer/timer-applet/interval-timer into lp:timer-applet
- interval-timer
- Merge into timer-applet
Proposed by
Kenny Meyer
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 342 | ||||
Proposed branch: | lp:~knny-myer/timer-applet/interval-timer | ||||
Merge into: | lp:timer-applet | ||||
Diff against target: |
2351 lines (+895/-326) (has conflicts) 16 files modified
timer-applet/THANKS (+1/-0) timer-applet/data/TimerApplet.xml (+1/-0) timer-applet/data/timer-applet.glade (+164/-11) timer-applet/po/bn.po (+140/-69) timer-applet/po/es.po (+107/-69) timer-applet/po/messages.pot (+96/-69) timer-applet/src/timerapplet/controllers/GlobalController.py (+18/-6) timer-applet/src/timerapplet/controllers/TimerApplet.py (+135/-69) timer-applet/src/timerapplet/core/PresetsStore.py (+41/-13) timer-applet/src/timerapplet/core/Timer.py (+25/-2) timer-applet/src/timerapplet/ui/AddEditPresetDialog.py (+12/-2) timer-applet/src/timerapplet/ui/Makefile.am (+1/-0) timer-applet/src/timerapplet/ui/StartNextTimerDialog.py (+66/-0) timer-applet/src/timerapplet/ui/StartTimerDialog.py (+49/-14) timer-applet/src/timerapplet/ui/__init__.py (+1/-0) timer-applet/src/timerapplet/utils.py (+38/-2) Text conflict in timer-applet/po/es.po |
||||
To merge this branch: | bzr merge lp:~knny-myer/timer-applet/interval-timer | ||||
Related bugs: |
|
||||
Related blueprints: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Kenny Meyer | Approve | ||
Review via email: mp+35571@code.launchpad.net |
Commit message
Description of the change
Added feature for defining a next timer in the presets menu.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'timer-applet/THANKS' | |||
2 | --- timer-applet/THANKS 2010-07-23 23:21:41 +0000 | |||
3 | +++ timer-applet/THANKS 2010-09-15 19:27:52 +0000 | |||
4 | @@ -1,5 +1,6 @@ | |||
5 | 1 | Timer Applet THANKS: | 1 | Timer Applet THANKS: |
6 | 2 | 2 | ||
7 | 3 | Dave Atkins | ||
8 | 3 | Ben Harrison | 4 | Ben Harrison |
9 | 4 | Philipp Kern | 5 | Philipp Kern |
10 | 5 | Paco Molinero | 6 | Paco Molinero |
11 | 6 | 7 | ||
12 | === modified file 'timer-applet/data/TimerApplet.xml' | |||
13 | --- timer-applet/data/TimerApplet.xml 2007-04-15 05:04:58 +0000 | |||
14 | +++ timer-applet/data/TimerApplet.xml 2010-09-15 19:27:52 +0000 | |||
15 | @@ -6,6 +6,7 @@ | |||
16 | 6 | <menuitem verb="ContinueTimer" name="Continue Item" _label="_Continue"/> | 6 | <menuitem verb="ContinueTimer" name="Continue Item" _label="_Continue"/> |
17 | 7 | <menuitem verb="StopTimer" name="Stop Item" _label="_Stop"/> | 7 | <menuitem verb="StopTimer" name="Stop Item" _label="_Stop"/> |
18 | 8 | <menuitem verb="RestartTimer" name="Restart Item" _label="R_estart"/> | 8 | <menuitem verb="RestartTimer" name="Restart Item" _label="R_estart"/> |
19 | 9 | <menuitem verb="StartNextTimer" name="Start next item" _label="Next"/> | ||
20 | 9 | <submenu name="Presets" _label="Pre_sets"> | 10 | <submenu name="Presets" _label="Pre_sets"> |
21 | 10 | </submenu> | 11 | </submenu> |
22 | 11 | <separator name="Separator1"/> | 12 | <separator name="Separator1"/> |
23 | 12 | 13 | ||
24 | === modified file 'timer-applet/data/timer-applet.glade' | |||
25 | --- timer-applet/data/timer-applet.glade 2010-08-02 00:21:28 +0000 | |||
26 | +++ timer-applet/data/timer-applet.glade 2010-09-15 19:27:52 +0000 | |||
27 | @@ -74,33 +74,131 @@ | |||
28 | 74 | <widget class="GtkVBox" id="vbox1"> | 74 | <widget class="GtkVBox" id="vbox1"> |
29 | 75 | <property name="visible">True</property> | 75 | <property name="visible">True</property> |
30 | 76 | <child> | 76 | <child> |
32 | 77 | <widget class="GtkHBox" id="hbox1"> | 77 | <widget class="GtkFrame" id="frame1"> |
33 | 78 | <property name="visible">True</property> | 78 | <property name="visible">True</property> |
39 | 79 | <child> | 79 | <property name="label_xalign">0</property> |
40 | 80 | <widget class="GtkEntry" id="command_entry"> | 80 | <property name="shadow_type">none</property> |
41 | 81 | <property name="visible">True</property> | 81 | <child> |
42 | 82 | <property name="can_focus">True</property> | 82 | <widget class="GtkAlignment" id="alignment1"> |
43 | 83 | <signal name="changed" handler="command_entry_changed_cb"/> | 83 | <property name="visible">True</property> |
44 | 84 | <property name="left_padding">12</property> | ||
45 | 85 | <child> | ||
46 | 86 | <widget class="GtkVBox" id="vbox2"> | ||
47 | 87 | <property name="visible">True</property> | ||
48 | 88 | <child> | ||
49 | 89 | <widget class="GtkTable" id="table1"> | ||
50 | 90 | <property name="visible">True</property> | ||
51 | 91 | <property name="n_rows">2</property> | ||
52 | 92 | <child> | ||
53 | 93 | <widget class="GtkComboBoxEntry" id="next_timer_combo_entry"> | ||
54 | 94 | <property name="visible">True</property> | ||
55 | 95 | </widget> | ||
56 | 96 | <packing> | ||
57 | 97 | <property name="y_padding">3</property> | ||
58 | 98 | </packing> | ||
59 | 99 | </child> | ||
60 | 100 | <child> | ||
61 | 101 | <widget class="GtkCheckButton" id="auto_start_check"> | ||
62 | 102 | <property name="label" translatable="yes">Start automatically</property> | ||
63 | 103 | <property name="visible">True</property> | ||
64 | 104 | <property name="sensitive">False</property> | ||
65 | 105 | <property name="can_focus">True</property> | ||
66 | 106 | <property name="receives_default">False</property> | ||
67 | 107 | <property name="draw_indicator">True</property> | ||
68 | 108 | </widget> | ||
69 | 109 | <packing> | ||
70 | 110 | <property name="top_attach">1</property> | ||
71 | 111 | <property name="bottom_attach">2</property> | ||
72 | 112 | <property name="y_padding">3</property> | ||
73 | 113 | </packing> | ||
74 | 114 | </child> | ||
75 | 115 | </widget> | ||
76 | 116 | <packing> | ||
77 | 117 | <property name="position">0</property> | ||
78 | 118 | </packing> | ||
79 | 119 | </child> | ||
80 | 120 | </widget> | ||
81 | 121 | </child> | ||
82 | 122 | </widget> | ||
83 | 123 | </child> | ||
84 | 124 | <child> | ||
85 | 125 | <widget class="GtkLabel" id="label2"> | ||
86 | 126 | <property name="visible">True</property> | ||
87 | 127 | <property name="label" translatable="yes"><b>Define next timer</b></property> | ||
88 | 128 | <property name="use_markup">True</property> | ||
89 | 84 | </widget> | 129 | </widget> |
90 | 85 | <packing> | 130 | <packing> |
93 | 86 | <property name="padding">5</property> | 131 | <property name="type">label_item</property> |
92 | 87 | <property name="position">0</property> | ||
94 | 88 | </packing> | 132 | </packing> |
95 | 89 | </child> | 133 | </child> |
96 | 90 | </widget> | 134 | </widget> |
97 | 91 | <packing> | 135 | <packing> |
98 | 92 | <property name="padding">2</property> | ||
99 | 93 | <property name="position">0</property> | 136 | <property name="position">0</property> |
100 | 94 | </packing> | 137 | </packing> |
101 | 95 | </child> | 138 | </child> |
102 | 96 | <child> | 139 | <child> |
103 | 140 | <widget class="GtkFrame" id="frame2"> | ||
104 | 141 | <property name="visible">True</property> | ||
105 | 142 | <property name="label_xalign">0</property> | ||
106 | 143 | <property name="shadow_type">none</property> | ||
107 | 144 | <child> | ||
108 | 145 | <widget class="GtkAlignment" id="alignment2"> | ||
109 | 146 | <property name="visible">True</property> | ||
110 | 147 | <property name="left_padding">12</property> | ||
111 | 148 | <child> | ||
112 | 149 | <widget class="GtkHBox" id="hbox2"> | ||
113 | 150 | <property name="visible">True</property> | ||
114 | 151 | <property name="border_width">3</property> | ||
115 | 152 | <child> | ||
116 | 153 | <widget class="GtkLabel" id="command_label"> | ||
117 | 154 | <property name="width_request">50</property> | ||
118 | 155 | <property name="visible">True</property> | ||
119 | 156 | <property name="has_tooltip">True</property> | ||
120 | 157 | <property name="ypad">5</property> | ||
121 | 158 | <property name="label" translatable="yes">Execute:</property> | ||
122 | 159 | </widget> | ||
123 | 160 | <packing> | ||
124 | 161 | <property name="position">0</property> | ||
125 | 162 | </packing> | ||
126 | 163 | </child> | ||
127 | 164 | <child> | ||
128 | 165 | <widget class="GtkEntry" id="command_entry"> | ||
129 | 166 | <property name="visible">True</property> | ||
130 | 167 | <property name="can_focus">True</property> | ||
131 | 168 | <signal name="changed" handler="command_entry_changed_cb"/> | ||
132 | 169 | </widget> | ||
133 | 170 | <packing> | ||
134 | 171 | <property name="padding">5</property> | ||
135 | 172 | <property name="position">1</property> | ||
136 | 173 | </packing> | ||
137 | 174 | </child> | ||
138 | 175 | </widget> | ||
139 | 176 | </child> | ||
140 | 177 | </widget> | ||
141 | 178 | </child> | ||
142 | 179 | <child> | ||
143 | 180 | <widget class="GtkLabel" id="label3"> | ||
144 | 181 | <property name="visible">True</property> | ||
145 | 182 | <property name="label" translatable="yes"><b>Run custom command</b></property> | ||
146 | 183 | <property name="use_markup">True</property> | ||
147 | 184 | </widget> | ||
148 | 185 | <packing> | ||
149 | 186 | <property name="type">label_item</property> | ||
150 | 187 | </packing> | ||
151 | 188 | </child> | ||
152 | 189 | </widget> | ||
153 | 190 | <packing> | ||
154 | 191 | <property name="position">1</property> | ||
155 | 192 | </packing> | ||
156 | 193 | </child> | ||
157 | 194 | <child> | ||
158 | 97 | <widget class="GtkLabel" id="invalid_command_label"> | 195 | <widget class="GtkLabel" id="invalid_command_label"> |
159 | 98 | <property name="visible">True</property> | 196 | <property name="visible">True</property> |
160 | 99 | <property name="app_paintable">True</property> | 197 | <property name="app_paintable">True</property> |
161 | 100 | <property name="use_markup">True</property> | 198 | <property name="use_markup">True</property> |
162 | 101 | </widget> | 199 | </widget> |
163 | 102 | <packing> | 200 | <packing> |
165 | 103 | <property name="position">1</property> | 201 | <property name="position">2</property> |
166 | 104 | </packing> | 202 | </packing> |
167 | 105 | </child> | 203 | </child> |
168 | 106 | </widget> | 204 | </widget> |
169 | @@ -109,7 +207,7 @@ | |||
170 | 109 | <widget class="GtkLabel" id="label_command"> | 207 | <widget class="GtkLabel" id="label_command"> |
171 | 110 | <property name="visible">True</property> | 208 | <property name="visible">True</property> |
172 | 111 | <property name="tooltip" translatable="yes">Run executable after timer finished.</property> | 209 | <property name="tooltip" translatable="yes">Run executable after timer finished.</property> |
174 | 112 | <property name="label" translatable="yes">Run executable</property> | 210 | <property name="label" translatable="yes">Advanced</property> |
175 | 113 | </widget> | 211 | </widget> |
176 | 114 | <packing> | 212 | <packing> |
177 | 115 | <property name="type">label_item</property> | 213 | <property name="type">label_item</property> |
178 | @@ -632,6 +730,7 @@ | |||
179 | 632 | <widget class="GtkAlignment" id="alignment2"> | 730 | <widget class="GtkAlignment" id="alignment2"> |
180 | 633 | <property name="visible">True</property> | 731 | <property name="visible">True</property> |
181 | 634 | <property name="left_padding">12</property> | 732 | <property name="left_padding">12</property> |
182 | 733 | <property name="right_padding">12</property> | ||
183 | 635 | <child> | 734 | <child> |
184 | 636 | <widget class="GtkEntry" id="name_entry"> | 735 | <widget class="GtkEntry" id="name_entry"> |
185 | 637 | <property name="visible">True</property> | 736 | <property name="visible">True</property> |
186 | @@ -704,6 +803,7 @@ | |||
187 | 704 | <widget class="GtkAlignment" id="alignment1"> | 803 | <widget class="GtkAlignment" id="alignment1"> |
188 | 705 | <property name="visible">True</property> | 804 | <property name="visible">True</property> |
189 | 706 | <property name="left_padding">12</property> | 805 | <property name="left_padding">12</property> |
190 | 806 | <property name="right_padding">12</property> | ||
191 | 707 | <child> | 807 | <child> |
192 | 708 | <widget class="GtkEntry" id="command_entry"> | 808 | <widget class="GtkEntry" id="command_entry"> |
193 | 709 | <property name="visible">True</property> | 809 | <property name="visible">True</property> |
194 | @@ -728,6 +828,59 @@ | |||
195 | 728 | <property name="position">2</property> | 828 | <property name="position">2</property> |
196 | 729 | </packing> | 829 | </packing> |
197 | 730 | </child> | 830 | </child> |
198 | 831 | <child> | ||
199 | 832 | <widget class="GtkFrame" id="frame4"> | ||
200 | 833 | <property name="visible">True</property> | ||
201 | 834 | <property name="label_xalign">0</property> | ||
202 | 835 | <property name="shadow_type">none</property> | ||
203 | 836 | <child> | ||
204 | 837 | <widget class="GtkAlignment" id="alignment4"> | ||
205 | 838 | <property name="visible">True</property> | ||
206 | 839 | <property name="left_padding">12</property> | ||
207 | 840 | <property name="right_padding">12</property> | ||
208 | 841 | <child> | ||
209 | 842 | <widget class="GtkVBox" id="vbox1"> | ||
210 | 843 | <property name="visible">True</property> | ||
211 | 844 | <child> | ||
212 | 845 | <widget class="GtkEntry" id="next_timer_entry"> | ||
213 | 846 | <property name="visible">True</property> | ||
214 | 847 | <property name="can_focus">True</property> | ||
215 | 848 | </widget> | ||
216 | 849 | <packing> | ||
217 | 850 | <property name="position">0</property> | ||
218 | 851 | </packing> | ||
219 | 852 | </child> | ||
220 | 853 | <child> | ||
221 | 854 | <widget class="GtkCheckButton" id="auto_start_check"> | ||
222 | 855 | <property name="label" translatable="yes">Initiate automatically</property> | ||
223 | 856 | <property name="visible">True</property> | ||
224 | 857 | <property name="can_focus">True</property> | ||
225 | 858 | <property name="receives_default">False</property> | ||
226 | 859 | <property name="draw_indicator">True</property> | ||
227 | 860 | </widget> | ||
228 | 861 | <packing> | ||
229 | 862 | <property name="position">1</property> | ||
230 | 863 | </packing> | ||
231 | 864 | </child> | ||
232 | 865 | </widget> | ||
233 | 866 | </child> | ||
234 | 867 | </widget> | ||
235 | 868 | </child> | ||
236 | 869 | <child> | ||
237 | 870 | <widget class="GtkLabel" id="label2"> | ||
238 | 871 | <property name="visible">True</property> | ||
239 | 872 | <property name="label" translatable="yes"><b>Interval timer</b></property> | ||
240 | 873 | <property name="use_markup">True</property> | ||
241 | 874 | </widget> | ||
242 | 875 | <packing> | ||
243 | 876 | <property name="type">label_item</property> | ||
244 | 877 | </packing> | ||
245 | 878 | </child> | ||
246 | 879 | </widget> | ||
247 | 880 | <packing> | ||
248 | 881 | <property name="position">3</property> | ||
249 | 882 | </packing> | ||
250 | 883 | </child> | ||
251 | 731 | </widget> | 884 | </widget> |
252 | 732 | <packing> | 885 | <packing> |
253 | 733 | <property name="position">1</property> | 886 | <property name="position">1</property> |
254 | 734 | 887 | ||
255 | === modified file 'timer-applet/po/bn.po' | |||
256 | --- timer-applet/po/bn.po 2010-07-11 03:37:51 +0000 | |||
257 | +++ timer-applet/po/bn.po 2010-09-15 19:27:52 +0000 | |||
258 | @@ -7,7 +7,7 @@ | |||
259 | 7 | msgstr "" | 7 | msgstr "" |
260 | 8 | "Project-Id-Version: timer-applet\n" | 8 | "Project-Id-Version: timer-applet\n" |
261 | 9 | "Report-Msgid-Bugs-To: \n" | 9 | "Report-Msgid-Bugs-To: \n" |
263 | 10 | "POT-Creation-Date: 2010-07-10 05:19+0000\n" | 10 | "POT-Creation-Date: 2010-09-15 15:16-0400\n" |
264 | 11 | "PO-Revision-Date: 2010-07-10 05:12+0000\n" | 11 | "PO-Revision-Date: 2010-07-10 05:12+0000\n" |
265 | 12 | "Last-Translator: Khandakar Mujahidul Islam <suzan229@gmail.com>\n" | 12 | "Last-Translator: Khandakar Mujahidul Islam <suzan229@gmail.com>\n" |
266 | 13 | "Language-Team: Bengali <bn@li.org>\n" | 13 | "Language-Team: Bengali <bn@li.org>\n" |
267 | @@ -39,123 +39,175 @@ | |||
268 | 39 | msgstr "" | 39 | msgstr "" |
269 | 40 | 40 | ||
270 | 41 | #: ../data/TimerApplet.xml.h:2 | 41 | #: ../data/TimerApplet.xml.h:2 |
271 | 42 | msgid "Next" | ||
272 | 43 | msgstr "" | ||
273 | 44 | |||
274 | 45 | #: ../data/TimerApplet.xml.h:3 | ||
275 | 42 | msgid "Pa_use" | 46 | msgid "Pa_use" |
276 | 43 | msgstr "স্থগিত (_ত)" | 47 | msgstr "স্থগিত (_ত)" |
277 | 44 | 48 | ||
279 | 45 | #: ../data/TimerApplet.xml.h:3 | 49 | #: ../data/TimerApplet.xml.h:4 |
280 | 46 | msgid "Pre_sets" | 50 | msgid "Pre_sets" |
281 | 47 | msgstr "" | 51 | msgstr "" |
282 | 48 | 52 | ||
284 | 49 | #: ../data/TimerApplet.xml.h:4 | 53 | #: ../data/TimerApplet.xml.h:5 |
285 | 50 | msgid "R_estart" | 54 | msgid "R_estart" |
286 | 51 | msgstr "পুনরায় চালু (_ল)" | 55 | msgstr "পুনরায় চালু (_ল)" |
287 | 52 | 56 | ||
289 | 53 | #: ../data/TimerApplet.xml.h:5 | 57 | #: ../data/TimerApplet.xml.h:6 |
290 | 54 | msgid "_About" | 58 | msgid "_About" |
291 | 55 | msgstr "পরিচিতি (_প)" | 59 | msgstr "পরিচিতি (_প)" |
292 | 56 | 60 | ||
294 | 57 | #: ../data/TimerApplet.xml.h:6 | 61 | #: ../data/TimerApplet.xml.h:7 |
295 | 58 | msgid "_Continue" | 62 | msgid "_Continue" |
296 | 59 | msgstr "এগিয়ে যান" | 63 | msgstr "এগিয়ে যান" |
297 | 60 | 64 | ||
299 | 61 | #: ../data/TimerApplet.xml.h:7 | 65 | #: ../data/TimerApplet.xml.h:8 |
300 | 62 | msgid "_Preferences" | 66 | msgid "_Preferences" |
301 | 63 | msgstr "পছন্দ (_ছ)" | 67 | msgstr "পছন্দ (_ছ)" |
302 | 64 | 68 | ||
304 | 65 | #: ../data/TimerApplet.xml.h:8 | 69 | #: ../data/TimerApplet.xml.h:9 |
305 | 66 | msgid "_Stop" | 70 | msgid "_Stop" |
306 | 67 | msgstr "থামাও(_ও)" | 71 | msgstr "থামাও(_ও)" |
307 | 68 | 72 | ||
308 | 69 | #: ../data/timer-applet.glade.h:1 | 73 | #: ../data/timer-applet.glade.h:1 |
309 | 74 | msgid "<b>Custom command</b>" | ||
310 | 75 | msgstr "" | ||
311 | 76 | |||
312 | 77 | #: ../data/timer-applet.glade.h:2 | ||
313 | 78 | msgid "<b>Define next timer</b>" | ||
314 | 79 | msgstr "" | ||
315 | 80 | |||
316 | 81 | #: ../data/timer-applet.glade.h:3 | ||
317 | 82 | msgid "<b>Interval timer</b>" | ||
318 | 83 | msgstr "" | ||
319 | 84 | |||
320 | 85 | #: ../data/timer-applet.glade.h:4 | ||
321 | 86 | msgid "<b>Run custom command</b>" | ||
322 | 87 | msgstr "" | ||
323 | 88 | |||
324 | 89 | #: ../data/timer-applet.glade.h:5 | ||
325 | 70 | msgid "<b>_Duration</b>" | 90 | msgid "<b>_Duration</b>" |
326 | 71 | msgstr "" | 91 | msgstr "" |
327 | 72 | 92 | ||
329 | 73 | #: ../data/timer-applet.glade.h:2 | 93 | #: ../data/timer-applet.glade.h:6 |
330 | 74 | msgid "<b>_Name</b>" | 94 | msgid "<b>_Name</b>" |
331 | 75 | msgstr "" | 95 | msgstr "" |
332 | 76 | 96 | ||
334 | 77 | #: ../data/timer-applet.glade.h:3 | 97 | #: ../data/timer-applet.glade.h:7 |
335 | 78 | msgid "<b>_Presets</b>" | 98 | msgid "<b>_Presets</b>" |
336 | 79 | msgstr "" | 99 | msgstr "" |
337 | 80 | 100 | ||
339 | 81 | #: ../data/timer-applet.glade.h:4 | 101 | #: ../data/timer-applet.glade.h:8 |
340 | 82 | msgid "A timer applet for the perfect egg and beyond!" | 102 | msgid "A timer applet for the perfect egg and beyond!" |
341 | 83 | msgstr "" | 103 | msgstr "" |
342 | 84 | 104 | ||
344 | 85 | #: ../data/timer-applet.glade.h:5 | 105 | #: ../data/timer-applet.glade.h:9 |
345 | 86 | #: ../src/timerapplet/controllers/GlobalController.py:47 | 106 | #: ../src/timerapplet/controllers/GlobalController.py:47 |
346 | 87 | msgid "Add Preset" | 107 | msgid "Add Preset" |
347 | 88 | msgstr "" | 108 | msgstr "" |
348 | 89 | 109 | ||
350 | 90 | #: ../data/timer-applet.glade.h:6 | 110 | #: ../data/timer-applet.glade.h:10 |
351 | 111 | msgid "Advanced" | ||
352 | 112 | msgstr "" | ||
353 | 113 | |||
354 | 114 | #: ../data/timer-applet.glade.h:11 | ||
355 | 91 | msgid "Choose A Sound File" | 115 | msgid "Choose A Sound File" |
356 | 92 | msgstr "" | 116 | msgstr "" |
357 | 93 | 117 | ||
359 | 94 | #: ../data/timer-applet.glade.h:7 | 118 | #: ../data/timer-applet.glade.h:12 |
360 | 119 | msgid "Execute:" | ||
361 | 120 | msgstr "" | ||
362 | 121 | |||
363 | 122 | #: ../data/timer-applet.glade.h:13 | ||
364 | 123 | msgid "Initiate automatically" | ||
365 | 124 | msgstr "" | ||
366 | 125 | |||
367 | 126 | #: ../data/timer-applet.glade.h:14 | ||
368 | 95 | msgid "Mana_ge Presets" | 127 | msgid "Mana_ge Presets" |
369 | 96 | msgstr "" | 128 | msgstr "" |
370 | 97 | 129 | ||
372 | 98 | #: ../data/timer-applet.glade.h:8 | 130 | #: ../data/timer-applet.glade.h:15 |
373 | 99 | msgid "Manage Presets" | 131 | msgid "Manage Presets" |
374 | 100 | msgstr "" | 132 | msgstr "" |
375 | 101 | 133 | ||
385 | 102 | #. TRANSLATORS: Replace this string with your names, one name per line. | 134 | #: ../data/timer-applet.glade.h:16 |
386 | 103 | #: ../data/timer-applet.glade.h:10 | 135 | msgid "Run custom command after timer has ended." |
387 | 104 | msgid "" | 136 | msgstr "" |
388 | 105 | "Miguel Anxo Bouzada\n" | 137 | |
389 | 106 | "Bundo\n" | 138 | #: ../data/timer-applet.glade.h:17 |
390 | 107 | "Cédric VALMARY (Tot en òc) 16 points" | 139 | msgid "Run executable after timer finished." |
391 | 108 | msgstr "" | 140 | msgstr "" |
392 | 109 | 141 | ||
393 | 110 | #: ../data/timer-applet.glade.h:13 | 142 | #: ../data/timer-applet.glade.h:18 |
394 | 111 | msgid "S_ave as Preset" | 143 | msgid "S_ave as Preset" |
395 | 112 | msgstr "" | 144 | msgstr "" |
396 | 113 | 145 | ||
398 | 114 | #: ../data/timer-applet.glade.h:14 | 146 | #: ../data/timer-applet.glade.h:19 |
399 | 147 | msgid "S_how pulsing panel icon" | ||
400 | 148 | msgstr "" | ||
401 | 149 | |||
402 | 150 | #: ../data/timer-applet.glade.h:20 | ||
403 | 115 | msgid "S_tart Timer" | 151 | msgid "S_tart Timer" |
404 | 116 | msgstr "" | 152 | msgstr "" |
405 | 117 | 153 | ||
407 | 118 | #: ../data/timer-applet.glade.h:15 | 154 | #: ../data/timer-applet.glade.h:21 |
408 | 155 | msgid "Show pulsing panel icon after timer has ended." | ||
409 | 156 | msgstr "" | ||
410 | 157 | |||
411 | 158 | #: ../data/timer-applet.glade.h:22 | ||
412 | 119 | msgid "Start Timer" | 159 | msgid "Start Timer" |
413 | 120 | msgstr "সময় চালু করুন" | 160 | msgstr "সময় চালু করুন" |
414 | 121 | 161 | ||
416 | 122 | #: ../data/timer-applet.glade.h:16 | 162 | #: ../data/timer-applet.glade.h:23 |
417 | 163 | msgid "Start automatically" | ||
418 | 164 | msgstr "" | ||
419 | 165 | |||
420 | 166 | #: ../data/timer-applet.glade.h:24 | ||
421 | 123 | msgid "Timer Applet" | 167 | msgid "Timer Applet" |
422 | 124 | msgstr "" | 168 | msgstr "" |
423 | 125 | 169 | ||
425 | 126 | #: ../data/timer-applet.glade.h:17 | 170 | #: ../data/timer-applet.glade.h:25 |
426 | 127 | msgid "Timer Preferences" | 171 | msgid "Timer Preferences" |
427 | 128 | msgstr "" | 172 | msgstr "" |
428 | 129 | 173 | ||
430 | 130 | #: ../data/timer-applet.glade.h:18 | 174 | #: ../data/timer-applet.glade.h:26 |
431 | 131 | msgid "Use c_ustom sound" | 175 | msgid "Use c_ustom sound" |
432 | 132 | msgstr "" | 176 | msgstr "" |
433 | 133 | 177 | ||
435 | 134 | #: ../data/timer-applet.glade.h:19 | 178 | #: ../data/timer-applet.glade.h:27 |
436 | 135 | msgid "Use d_efault sound" | 179 | msgid "Use d_efault sound" |
437 | 136 | msgstr "" | 180 | msgstr "" |
438 | 137 | 181 | ||
440 | 138 | #: ../data/timer-applet.glade.h:20 | 182 | #: ../data/timer-applet.glade.h:28 |
441 | 139 | msgid "_Add..." | 183 | msgid "_Add..." |
442 | 140 | msgstr "যোগ করুন... (_A)" | 184 | msgstr "যোগ করুন... (_A)" |
443 | 141 | 185 | ||
445 | 142 | #: ../data/timer-applet.glade.h:21 | 186 | #: ../data/timer-applet.glade.h:29 |
446 | 143 | msgid "_Delete" | 187 | msgid "_Delete" |
447 | 144 | msgstr "মুছে ফেলো (_D)" | 188 | msgstr "মুছে ফেলো (_D)" |
448 | 145 | 189 | ||
450 | 146 | #: ../data/timer-applet.glade.h:22 | 190 | #: ../data/timer-applet.glade.h:30 |
451 | 147 | msgid "_Edit..." | 191 | msgid "_Edit..." |
452 | 148 | msgstr "" | 192 | msgstr "" |
453 | 149 | 193 | ||
455 | 150 | #: ../data/timer-applet.glade.h:23 | 194 | #: ../data/timer-applet.glade.h:31 |
456 | 151 | msgid "_Name:" | 195 | msgid "_Name:" |
457 | 152 | msgstr "" | 196 | msgstr "" |
458 | 153 | 197 | ||
460 | 154 | #: ../data/timer-applet.glade.h:24 | 198 | #: ../data/timer-applet.glade.h:32 |
461 | 155 | msgid "_Play notification sound" | 199 | msgid "_Play notification sound" |
462 | 156 | msgstr "" | 200 | msgstr "" |
463 | 157 | 201 | ||
465 | 158 | #: ../data/timer-applet.glade.h:25 | 202 | #: ../data/timer-applet.glade.h:33 |
466 | 203 | msgid "_Show popup notification" | ||
467 | 204 | msgstr "" | ||
468 | 205 | |||
469 | 206 | #: ../data/timer-applet.glade.h:34 | ||
470 | 207 | msgid "_Show popup notification after timer has ended." | ||
471 | 208 | msgstr "" | ||
472 | 209 | |||
473 | 210 | #: ../data/timer-applet.glade.h:35 | ||
474 | 159 | msgid "_Show remaining time while timer is running" | 211 | msgid "_Show remaining time while timer is running" |
475 | 160 | msgstr "" | 212 | msgstr "" |
476 | 161 | 213 | ||
477 | @@ -187,63 +239,64 @@ | |||
478 | 187 | msgstr "" | 239 | msgstr "" |
479 | 188 | 240 | ||
480 | 189 | #: ../data/timer-applet.schemas.in.h:7 | 241 | #: ../data/timer-applet.schemas.in.h:7 |
481 | 242 | msgid "Show Popup notification" | ||
482 | 243 | msgstr "" | ||
483 | 244 | |||
484 | 245 | #: ../data/timer-applet.schemas.in.h:8 | ||
485 | 246 | msgid "Show Popup notification in the notification area" | ||
486 | 247 | msgstr "" | ||
487 | 248 | |||
488 | 249 | #: ../data/timer-applet.schemas.in.h:9 | ||
489 | 250 | msgid "Show Pulsing icon" | ||
490 | 251 | msgstr "" | ||
491 | 252 | |||
492 | 253 | #: ../data/timer-applet.schemas.in.h:10 | ||
493 | 254 | msgid "Show pulsing tray icon when timer finished" | ||
494 | 255 | msgstr "" | ||
495 | 256 | |||
496 | 257 | #: ../data/timer-applet.schemas.in.h:11 | ||
497 | 190 | msgid "Show remaining time" | 258 | msgid "Show remaining time" |
498 | 191 | msgstr "" | 259 | msgstr "" |
499 | 192 | 260 | ||
501 | 193 | #: ../data/timer-applet.schemas.in.h:8 | 261 | #: ../data/timer-applet.schemas.in.h:12 |
502 | 194 | msgid "Show the remaining time while the timer is running or paused" | 262 | msgid "Show the remaining time while the timer is running or paused" |
503 | 195 | msgstr "" | 263 | msgstr "" |
504 | 196 | 264 | ||
506 | 197 | #: ../data/timer-applet.schemas.in.h:9 | 265 | #: ../data/timer-applet.schemas.in.h:13 |
507 | 198 | msgid "Use a custom notification sound" | 266 | msgid "Use a custom notification sound" |
508 | 199 | msgstr "" | 267 | msgstr "" |
509 | 200 | 268 | ||
511 | 201 | #: ../data/timer-applet.schemas.in.h:10 | 269 | #: ../data/timer-applet.schemas.in.h:14 |
512 | 202 | msgid "" | 270 | msgid "" |
513 | 203 | "Use the custom notification sound specified in custom_notification_sound_path" | 271 | "Use the custom notification sound specified in custom_notification_sound_path" |
514 | 204 | msgstr "" | 272 | msgstr "" |
515 | 205 | 273 | ||
517 | 206 | #: ../src/timerapplet/controllers/GlobalController.py:60 | 274 | #: ../src/timerapplet/controllers/GlobalController.py:62 |
518 | 207 | msgid "Edit Preset" | 275 | msgid "Edit Preset" |
519 | 208 | msgstr "" | 276 | msgstr "" |
520 | 209 | 277 | ||
537 | 210 | #. HH:MM:SS | 278 | #: ../src/timerapplet/controllers/TimerApplet.py:99 |
522 | 211 | #: ../src/timerapplet/controllers/TimerApplet.py:45 | ||
523 | 212 | #: ../src/timerapplet/controllers/TimerApplet.py:360 | ||
524 | 213 | #, python-format | ||
525 | 214 | msgid "%02d:%02d:%02d" | ||
526 | 215 | msgstr "" | ||
527 | 216 | |||
528 | 217 | #. HH:MM | ||
529 | 218 | #. MM:SS | ||
530 | 219 | #: ../src/timerapplet/controllers/TimerApplet.py:49 | ||
531 | 220 | #: ../src/timerapplet/controllers/TimerApplet.py:52 | ||
532 | 221 | #, python-format | ||
533 | 222 | msgid "%02d:%02d" | ||
534 | 223 | msgstr "" | ||
535 | 224 | |||
536 | 225 | #: ../src/timerapplet/controllers/TimerApplet.py:111 | ||
538 | 226 | msgid "Continue timer countdown?" | 279 | msgid "Continue timer countdown?" |
539 | 227 | msgstr "" | 280 | msgstr "" |
540 | 228 | 281 | ||
542 | 229 | #: ../src/timerapplet/controllers/TimerApplet.py:112 | 282 | #: ../src/timerapplet/controllers/TimerApplet.py:100 |
543 | 230 | msgid "The timer is currently paused. Would you like to continue countdown?" | 283 | msgid "The timer is currently paused. Would you like to continue countdown?" |
544 | 231 | msgstr "" | 284 | msgstr "" |
545 | 232 | 285 | ||
547 | 233 | #: ../src/timerapplet/controllers/TimerApplet.py:192 | 286 | #: ../src/timerapplet/controllers/TimerApplet.py:194 |
548 | 234 | msgid "Click to start a new timer countdown." | 287 | msgid "Click to start a new timer countdown." |
549 | 235 | msgstr "" | 288 | msgstr "" |
550 | 236 | 289 | ||
552 | 237 | #: ../src/timerapplet/controllers/TimerApplet.py:197 | 290 | #: ../src/timerapplet/controllers/TimerApplet.py:199 |
553 | 238 | msgid "Paused. Click to continue timer countdown." | 291 | msgid "Paused. Click to continue timer countdown." |
554 | 239 | msgstr "" | 292 | msgstr "" |
555 | 240 | 293 | ||
557 | 241 | #: ../src/timerapplet/controllers/TimerApplet.py:200 | 294 | #: ../src/timerapplet/controllers/TimerApplet.py:202 |
558 | 242 | msgid "Finished" | 295 | msgid "Finished" |
559 | 243 | msgstr "কাজটি সম্পূর্ণ হয়েছে" | 296 | msgstr "কাজটি সম্পূর্ণ হয়েছে" |
560 | 244 | 297 | ||
561 | 245 | #. "<timer name>" finished at <time> | 298 | #. "<timer name>" finished at <time> |
563 | 246 | #: ../src/timerapplet/controllers/TimerApplet.py:205 | 299 | #: ../src/timerapplet/controllers/TimerApplet.py:207 |
564 | 247 | #, python-format | 300 | #, python-format |
565 | 248 | msgid "" | 301 | msgid "" |
566 | 249 | "\"%s\" finished at %s.\n" | 302 | "\"%s\" finished at %s.\n" |
567 | @@ -251,7 +304,7 @@ | |||
568 | 251 | msgstr "" | 304 | msgstr "" |
569 | 252 | 305 | ||
570 | 253 | #. Timer finished at <time> | 306 | #. Timer finished at <time> |
572 | 254 | #: ../src/timerapplet/controllers/TimerApplet.py:208 | 307 | #: ../src/timerapplet/controllers/TimerApplet.py:210 |
573 | 255 | #, python-format | 308 | #, python-format |
574 | 256 | msgid "" | 309 | msgid "" |
575 | 257 | "Timer finished at %s.\n" | 310 | "Timer finished at %s.\n" |
576 | @@ -259,41 +312,48 @@ | |||
577 | 259 | msgstr "" | 312 | msgstr "" |
578 | 260 | 313 | ||
579 | 261 | #. HH:MM:SS (<timer name>) | 314 | #. HH:MM:SS (<timer name>) |
581 | 262 | #: ../src/timerapplet/controllers/TimerApplet.py:357 | 315 | #: ../src/timerapplet/controllers/TimerApplet.py:386 |
582 | 263 | #, python-format | 316 | #, python-format |
583 | 264 | msgid "%02d:%02d:%02d (%s)" | 317 | msgid "%02d:%02d:%02d (%s)" |
584 | 265 | msgstr "" | 318 | msgstr "" |
585 | 266 | 319 | ||
586 | 320 | #. HH:MM:SS | ||
587 | 321 | #: ../src/timerapplet/controllers/TimerApplet.py:389 | ||
588 | 322 | #: ../src/timerapplet/utils.py:52 | ||
589 | 323 | #, python-format | ||
590 | 324 | msgid "%02d:%02d:%02d" | ||
591 | 325 | msgstr "" | ||
592 | 326 | |||
593 | 267 | #. "<timer name>" Finished | 327 | #. "<timer name>" Finished |
595 | 268 | #: ../src/timerapplet/controllers/TimerApplet.py:379 | 328 | #: ../src/timerapplet/controllers/TimerApplet.py:411 |
596 | 269 | #, python-format | 329 | #, python-format |
597 | 270 | msgid "\"%s\" Finished" | 330 | msgid "\"%s\" Finished" |
598 | 271 | msgstr "" | 331 | msgstr "" |
599 | 272 | 332 | ||
600 | 273 | #. "<timer name>" finished at <time> | 333 | #. "<timer name>" finished at <time> |
602 | 274 | #: ../src/timerapplet/controllers/TimerApplet.py:382 | 334 | #: ../src/timerapplet/controllers/TimerApplet.py:414 |
603 | 275 | #, python-format | 335 | #, python-format |
604 | 276 | msgid "\"%s\" finished at %s" | 336 | msgid "\"%s\" finished at %s" |
605 | 277 | msgstr "" | 337 | msgstr "" |
606 | 278 | 338 | ||
608 | 279 | #: ../src/timerapplet/controllers/TimerApplet.py:384 | 339 | #: ../src/timerapplet/controllers/TimerApplet.py:416 |
609 | 280 | msgid "Timer Finished" | 340 | msgid "Timer Finished" |
610 | 281 | msgstr "" | 341 | msgstr "" |
611 | 282 | 342 | ||
612 | 283 | #. Timer finished at <time> | 343 | #. Timer finished at <time> |
614 | 284 | #: ../src/timerapplet/controllers/TimerApplet.py:387 | 344 | #: ../src/timerapplet/controllers/TimerApplet.py:419 |
615 | 285 | #, python-format | 345 | #, python-format |
616 | 286 | msgid "Timer finished at %s" | 346 | msgid "Timer finished at %s" |
617 | 287 | msgstr "" | 347 | msgstr "" |
618 | 288 | 348 | ||
620 | 289 | #: ../src/timerapplet/controllers/TimerApplet.py:394 | 349 | #: ../src/timerapplet/controllers/TimerApplet.py:426 |
621 | 290 | #, python-format | 350 | #, python-format |
622 | 291 | msgid "Timer finished about <b>%d second</b> ago" | 351 | msgid "Timer finished about <b>%d second</b> ago" |
623 | 292 | msgid_plural "Timer finished about <b>%d seconds</b> ago" | 352 | msgid_plural "Timer finished about <b>%d seconds</b> ago" |
624 | 293 | msgstr[0] "" | 353 | msgstr[0] "" |
625 | 294 | msgstr[1] "" | 354 | msgstr[1] "" |
626 | 295 | 355 | ||
628 | 296 | #: ../src/timerapplet/controllers/TimerApplet.py:399 | 356 | #: ../src/timerapplet/controllers/TimerApplet.py:431 |
629 | 297 | #, python-format | 357 | #, python-format |
630 | 298 | msgid "Timer finished about <b>%d minute</b> ago" | 358 | msgid "Timer finished about <b>%d minute</b> ago" |
631 | 299 | msgid_plural "Timer finished about <b>%d minutes</b> ago" | 359 | msgid_plural "Timer finished about <b>%d minutes</b> ago" |
632 | @@ -316,6 +376,10 @@ | |||
633 | 316 | msgid "_Continue Timer" | 376 | msgid "_Continue Timer" |
634 | 317 | msgstr "" | 377 | msgstr "" |
635 | 318 | 378 | ||
636 | 379 | #: ../src/timerapplet/ui/StartTimerDialog.py:186 | ||
637 | 380 | msgid "<b>Command not found.</b>" | ||
638 | 381 | msgstr "" | ||
639 | 382 | |||
640 | 319 | #: ../src/timerapplet/ui/DurationChooser.py:31 | 383 | #: ../src/timerapplet/ui/DurationChooser.py:31 |
641 | 320 | msgid "_Hours:" | 384 | msgid "_Hours:" |
642 | 321 | msgstr "ঘন্টা:(_ঘ)" | 385 | msgstr "ঘন্টা:(_ঘ)" |
643 | @@ -328,8 +392,15 @@ | |||
644 | 328 | msgid "_Seconds:" | 392 | msgid "_Seconds:" |
645 | 329 | msgstr "সেকেন্ড:(_ড)" | 393 | msgstr "সেকেন্ড:(_ড)" |
646 | 330 | 394 | ||
647 | 395 | #. HH:MM | ||
648 | 396 | #. MM:SS | ||
649 | 397 | #: ../src/timerapplet/utils.py:56 ../src/timerapplet/utils.py:59 | ||
650 | 398 | #, python-format | ||
651 | 399 | msgid "%02d:%02d" | ||
652 | 400 | msgstr "" | ||
653 | 401 | |||
654 | 331 | #. <preset name> (HH:MM:SS) | 402 | #. <preset name> (HH:MM:SS) |
656 | 332 | #: ../src/timerapplet/utils.py:42 | 403 | #: ../src/timerapplet/utils.py:69 |
657 | 333 | #, python-format | 404 | #, python-format |
658 | 334 | msgid "%s (%02d:%02d:%02d)" | 405 | msgid "%s (%02d:%02d:%02d)" |
659 | 335 | msgstr "" | 406 | msgstr "" |
660 | 336 | 407 | ||
661 | === modified file 'timer-applet/po/es.po' | |||
662 | --- timer-applet/po/es.po 2010-08-04 03:30:23 +0000 | |||
663 | +++ timer-applet/po/es.po 2010-09-15 19:27:52 +0000 | |||
664 | @@ -7,8 +7,13 @@ | |||
665 | 7 | msgstr "" | 7 | msgstr "" |
666 | 8 | "Project-Id-Version: timer-applet 0.5\n" | 8 | "Project-Id-Version: timer-applet 0.5\n" |
667 | 9 | "Report-Msgid-Bugs-To: \n" | 9 | "Report-Msgid-Bugs-To: \n" |
668 | 10 | <<<<<<< TREE | ||
669 | 10 | "POT-Creation-Date: 2010-08-01 20:20-0400\n" | 11 | "POT-Creation-Date: 2010-08-01 20:20-0400\n" |
670 | 11 | "PO-Revision-Date: 2010-08-03 01:36+0000\n" | 12 | "PO-Revision-Date: 2010-08-03 01:36+0000\n" |
671 | 13 | ======= | ||
672 | 14 | "POT-Creation-Date: 2010-09-15 15:16-0400\n" | ||
673 | 15 | "PO-Revision-Date: 2010-08-02 00:13+0000\n" | ||
674 | 16 | >>>>>>> MERGE-SOURCE | ||
675 | 12 | "Last-Translator: Kenny Meyer <knny.myer@gmail.com>\n" | 17 | "Last-Translator: Kenny Meyer <knny.myer@gmail.com>\n" |
676 | 13 | "Language-Team: Spanish <es@li.org>\n" | 18 | "Language-Team: Spanish <es@li.org>\n" |
677 | 14 | "MIME-Version: 1.0\n" | 19 | "MIME-Version: 1.0\n" |
678 | @@ -39,30 +44,34 @@ | |||
679 | 39 | msgstr "Admi_nistrar preestablecidos" | 44 | msgstr "Admi_nistrar preestablecidos" |
680 | 40 | 45 | ||
681 | 41 | #: ../data/TimerApplet.xml.h:2 | 46 | #: ../data/TimerApplet.xml.h:2 |
682 | 47 | msgid "Next" | ||
683 | 48 | msgstr "" | ||
684 | 49 | |||
685 | 50 | #: ../data/TimerApplet.xml.h:3 | ||
686 | 42 | msgid "Pa_use" | 51 | msgid "Pa_use" |
687 | 43 | msgstr "Pa_usa" | 52 | msgstr "Pa_usa" |
688 | 44 | 53 | ||
690 | 45 | #: ../data/TimerApplet.xml.h:3 | 54 | #: ../data/TimerApplet.xml.h:4 |
691 | 46 | msgid "Pre_sets" | 55 | msgid "Pre_sets" |
692 | 47 | msgstr "Preestable_cidos" | 56 | msgstr "Preestable_cidos" |
693 | 48 | 57 | ||
695 | 49 | #: ../data/TimerApplet.xml.h:4 | 58 | #: ../data/TimerApplet.xml.h:5 |
696 | 50 | msgid "R_estart" | 59 | msgid "R_estart" |
697 | 51 | msgstr "R_einiciar" | 60 | msgstr "R_einiciar" |
698 | 52 | 61 | ||
700 | 53 | #: ../data/TimerApplet.xml.h:5 | 62 | #: ../data/TimerApplet.xml.h:6 |
701 | 54 | msgid "_About" | 63 | msgid "_About" |
702 | 55 | msgstr "_Acerca de" | 64 | msgstr "_Acerca de" |
703 | 56 | 65 | ||
705 | 57 | #: ../data/TimerApplet.xml.h:6 | 66 | #: ../data/TimerApplet.xml.h:7 |
706 | 58 | msgid "_Continue" | 67 | msgid "_Continue" |
707 | 59 | msgstr "_Continuar" | 68 | msgstr "_Continuar" |
708 | 60 | 69 | ||
710 | 61 | #: ../data/TimerApplet.xml.h:7 | 70 | #: ../data/TimerApplet.xml.h:8 |
711 | 62 | msgid "_Preferences" | 71 | msgid "_Preferences" |
712 | 63 | msgstr "_Preferencias" | 72 | msgstr "_Preferencias" |
713 | 64 | 73 | ||
715 | 65 | #: ../data/TimerApplet.xml.h:8 | 74 | #: ../data/TimerApplet.xml.h:9 |
716 | 66 | msgid "_Stop" | 75 | msgid "_Stop" |
717 | 67 | msgstr "_Detener" | 76 | msgstr "_Detener" |
718 | 68 | 77 | ||
719 | @@ -71,115 +80,141 @@ | |||
720 | 71 | msgstr "<b>Comando personalizado</b>" | 80 | msgstr "<b>Comando personalizado</b>" |
721 | 72 | 81 | ||
722 | 73 | #: ../data/timer-applet.glade.h:2 | 82 | #: ../data/timer-applet.glade.h:2 |
723 | 83 | msgid "<b>Define next timer</b>" | ||
724 | 84 | msgstr "" | ||
725 | 85 | |||
726 | 86 | #: ../data/timer-applet.glade.h:3 | ||
727 | 87 | #, fuzzy | ||
728 | 88 | msgid "<b>Interval timer</b>" | ||
729 | 89 | msgstr "<b>_Nombre</b>" | ||
730 | 90 | |||
731 | 91 | #: ../data/timer-applet.glade.h:4 | ||
732 | 92 | #, fuzzy | ||
733 | 93 | msgid "<b>Run custom command</b>" | ||
734 | 94 | msgstr "<b>Comando personalizado</b>" | ||
735 | 95 | |||
736 | 96 | #: ../data/timer-applet.glade.h:5 | ||
737 | 74 | msgid "<b>_Duration</b>" | 97 | msgid "<b>_Duration</b>" |
738 | 75 | msgstr "<b>_Duración</b>" | 98 | msgstr "<b>_Duración</b>" |
739 | 76 | 99 | ||
741 | 77 | #: ../data/timer-applet.glade.h:3 | 100 | #: ../data/timer-applet.glade.h:6 |
742 | 78 | msgid "<b>_Name</b>" | 101 | msgid "<b>_Name</b>" |
743 | 79 | msgstr "<b>_Nombre</b>" | 102 | msgstr "<b>_Nombre</b>" |
744 | 80 | 103 | ||
746 | 81 | #: ../data/timer-applet.glade.h:4 | 104 | #: ../data/timer-applet.glade.h:7 |
747 | 82 | msgid "<b>_Presets</b>" | 105 | msgid "<b>_Presets</b>" |
748 | 83 | msgstr "<b>_Preestablecidos</b>" | 106 | msgstr "<b>_Preestablecidos</b>" |
749 | 84 | 107 | ||
751 | 85 | #: ../data/timer-applet.glade.h:5 | 108 | #: ../data/timer-applet.glade.h:8 |
752 | 86 | msgid "A timer applet for the perfect egg and beyond!" | 109 | msgid "A timer applet for the perfect egg and beyond!" |
753 | 87 | msgstr "Una miniaplicación cronómetro para el huevo perfecto y más!" | 110 | msgstr "Una miniaplicación cronómetro para el huevo perfecto y más!" |
754 | 88 | 111 | ||
756 | 89 | #: ../data/timer-applet.glade.h:6 | 112 | #: ../data/timer-applet.glade.h:9 |
757 | 90 | #: ../src/timerapplet/controllers/GlobalController.py:47 | 113 | #: ../src/timerapplet/controllers/GlobalController.py:47 |
758 | 91 | msgid "Add Preset" | 114 | msgid "Add Preset" |
759 | 92 | msgstr "Agregar Preestablecido" | 115 | msgstr "Agregar Preestablecido" |
760 | 93 | 116 | ||
762 | 94 | #: ../data/timer-applet.glade.h:7 | 117 | #: ../data/timer-applet.glade.h:10 |
763 | 118 | msgid "Advanced" | ||
764 | 119 | msgstr "" | ||
765 | 120 | |||
766 | 121 | #: ../data/timer-applet.glade.h:11 | ||
767 | 95 | msgid "Choose A Sound File" | 122 | msgid "Choose A Sound File" |
768 | 96 | msgstr "Elegir un archivo de sonido" | 123 | msgstr "Elegir un archivo de sonido" |
769 | 97 | 124 | ||
771 | 98 | #: ../data/timer-applet.glade.h:8 | 125 | #: ../data/timer-applet.glade.h:12 |
772 | 126 | msgid "Execute:" | ||
773 | 127 | msgstr "" | ||
774 | 128 | |||
775 | 129 | #: ../data/timer-applet.glade.h:13 | ||
776 | 130 | msgid "Initiate automatically" | ||
777 | 131 | msgstr "" | ||
778 | 132 | |||
779 | 133 | #: ../data/timer-applet.glade.h:14 | ||
780 | 99 | msgid "Mana_ge Presets" | 134 | msgid "Mana_ge Presets" |
781 | 100 | msgstr "Adminis_trar preestablecidos" | 135 | msgstr "Adminis_trar preestablecidos" |
782 | 101 | 136 | ||
784 | 102 | #: ../data/timer-applet.glade.h:9 | 137 | #: ../data/timer-applet.glade.h:15 |
785 | 103 | msgid "Manage Presets" | 138 | msgid "Manage Presets" |
786 | 104 | msgstr "Administrar Preestablecidos" | 139 | msgstr "Administrar Preestablecidos" |
787 | 105 | 140 | ||
789 | 106 | #: ../data/timer-applet.glade.h:10 | 141 | #: ../data/timer-applet.glade.h:16 |
790 | 107 | msgid "Run custom command after timer has ended." | 142 | msgid "Run custom command after timer has ended." |
791 | 108 | msgstr "Ejecutar un comando personalizado al terminarse el tiempo." | 143 | msgstr "Ejecutar un comando personalizado al terminarse el tiempo." |
792 | 109 | 144 | ||
798 | 110 | #: ../data/timer-applet.glade.h:11 | 145 | #: ../data/timer-applet.glade.h:17 |
794 | 111 | msgid "Run executable" | ||
795 | 112 | msgstr "Ejecutar" | ||
796 | 113 | |||
797 | 114 | #: ../data/timer-applet.glade.h:12 | ||
799 | 115 | msgid "Run executable after timer finished." | 146 | msgid "Run executable after timer finished." |
800 | 116 | msgstr "Ejecutar al terminarse el tiempo." | 147 | msgstr "Ejecutar al terminarse el tiempo." |
801 | 117 | 148 | ||
803 | 118 | #: ../data/timer-applet.glade.h:13 | 149 | #: ../data/timer-applet.glade.h:18 |
804 | 119 | msgid "S_ave as Preset" | 150 | msgid "S_ave as Preset" |
805 | 120 | msgstr "G_uardar como preestablecido" | 151 | msgstr "G_uardar como preestablecido" |
806 | 121 | 152 | ||
808 | 122 | #: ../data/timer-applet.glade.h:14 | 153 | #: ../data/timer-applet.glade.h:19 |
809 | 123 | msgid "S_how pulsing panel icon" | 154 | msgid "S_how pulsing panel icon" |
810 | 124 | msgstr "_Mostrar pulso del icono del panel" | 155 | msgstr "_Mostrar pulso del icono del panel" |
811 | 125 | 156 | ||
813 | 126 | #: ../data/timer-applet.glade.h:15 | 157 | #: ../data/timer-applet.glade.h:20 |
814 | 127 | msgid "S_tart Timer" | 158 | msgid "S_tart Timer" |
815 | 128 | msgstr "Iniciar cronómetro" | 159 | msgstr "Iniciar cronómetro" |
816 | 129 | 160 | ||
818 | 130 | #: ../data/timer-applet.glade.h:16 | 161 | #: ../data/timer-applet.glade.h:21 |
819 | 131 | msgid "Show pulsing panel icon after timer has ended." | 162 | msgid "Show pulsing panel icon after timer has ended." |
820 | 132 | msgstr "_Mostrar pulso del icono del panel al terminarse el cronómetro." | 163 | msgstr "_Mostrar pulso del icono del panel al terminarse el cronómetro." |
821 | 133 | 164 | ||
823 | 134 | #: ../data/timer-applet.glade.h:17 | 165 | #: ../data/timer-applet.glade.h:22 |
824 | 135 | msgid "Start Timer" | 166 | msgid "Start Timer" |
825 | 136 | msgstr "Iniciar cronómetro" | 167 | msgstr "Iniciar cronómetro" |
826 | 137 | 168 | ||
828 | 138 | #: ../data/timer-applet.glade.h:18 | 169 | #: ../data/timer-applet.glade.h:23 |
829 | 170 | msgid "Start automatically" | ||
830 | 171 | msgstr "" | ||
831 | 172 | |||
832 | 173 | #: ../data/timer-applet.glade.h:24 | ||
833 | 139 | msgid "Timer Applet" | 174 | msgid "Timer Applet" |
834 | 140 | msgstr "Miniaplicación cronómetro" | 175 | msgstr "Miniaplicación cronómetro" |
835 | 141 | 176 | ||
837 | 142 | #: ../data/timer-applet.glade.h:19 | 177 | #: ../data/timer-applet.glade.h:25 |
838 | 143 | msgid "Timer Preferences" | 178 | msgid "Timer Preferences" |
839 | 144 | msgstr "Preferencias del cronómetro" | 179 | msgstr "Preferencias del cronómetro" |
840 | 145 | 180 | ||
842 | 146 | #: ../data/timer-applet.glade.h:20 | 181 | #: ../data/timer-applet.glade.h:26 |
843 | 147 | msgid "Use c_ustom sound" | 182 | msgid "Use c_ustom sound" |
844 | 148 | msgstr "_Usar sonido personalizado" | 183 | msgstr "_Usar sonido personalizado" |
845 | 149 | 184 | ||
847 | 150 | #: ../data/timer-applet.glade.h:21 | 185 | #: ../data/timer-applet.glade.h:27 |
848 | 151 | msgid "Use d_efault sound" | 186 | msgid "Use d_efault sound" |
849 | 152 | msgstr "Usar sonido pr_edeterminado" | 187 | msgstr "Usar sonido pr_edeterminado" |
850 | 153 | 188 | ||
852 | 154 | #: ../data/timer-applet.glade.h:22 | 189 | #: ../data/timer-applet.glade.h:28 |
853 | 155 | msgid "_Add..." | 190 | msgid "_Add..." |
854 | 156 | msgstr "_Añadir…" | 191 | msgstr "_Añadir…" |
855 | 157 | 192 | ||
857 | 158 | #: ../data/timer-applet.glade.h:23 | 193 | #: ../data/timer-applet.glade.h:29 |
858 | 159 | msgid "_Delete" | 194 | msgid "_Delete" |
859 | 160 | msgstr "_Borrar" | 195 | msgstr "_Borrar" |
860 | 161 | 196 | ||
862 | 162 | #: ../data/timer-applet.glade.h:24 | 197 | #: ../data/timer-applet.glade.h:30 |
863 | 163 | msgid "_Edit..." | 198 | msgid "_Edit..." |
864 | 164 | msgstr "_Editar..." | 199 | msgstr "_Editar..." |
865 | 165 | 200 | ||
867 | 166 | #: ../data/timer-applet.glade.h:25 | 201 | #: ../data/timer-applet.glade.h:31 |
868 | 167 | msgid "_Name:" | 202 | msgid "_Name:" |
869 | 168 | msgstr "_Nombre:" | 203 | msgstr "_Nombre:" |
870 | 169 | 204 | ||
872 | 170 | #: ../data/timer-applet.glade.h:26 | 205 | #: ../data/timer-applet.glade.h:32 |
873 | 171 | msgid "_Play notification sound" | 206 | msgid "_Play notification sound" |
874 | 172 | msgstr "Re_producir sonido de notificación" | 207 | msgstr "Re_producir sonido de notificación" |
875 | 173 | 208 | ||
877 | 174 | #: ../data/timer-applet.glade.h:27 | 209 | #: ../data/timer-applet.glade.h:33 |
878 | 175 | msgid "_Show popup notification" | 210 | msgid "_Show popup notification" |
879 | 176 | msgstr "Mo_strar notificación emergente" | 211 | msgstr "Mo_strar notificación emergente" |
880 | 177 | 212 | ||
882 | 178 | #: ../data/timer-applet.glade.h:28 | 213 | #: ../data/timer-applet.glade.h:34 |
883 | 179 | msgid "_Show popup notification after timer has ended." | 214 | msgid "_Show popup notification after timer has ended." |
884 | 180 | msgstr "Mo_strar notificación emergente al terminarse el tiempo." | 215 | msgstr "Mo_strar notificación emergente al terminarse el tiempo." |
885 | 181 | 216 | ||
887 | 182 | #: ../data/timer-applet.glade.h:29 | 217 | #: ../data/timer-applet.glade.h:35 |
888 | 183 | msgid "_Show remaining time while timer is running" | 218 | msgid "_Show remaining time while timer is running" |
889 | 184 | msgstr "_Muestra el tiempo restante mientras cuenta" | 219 | msgstr "_Muestra el tiempo restante mientras cuenta" |
890 | 185 | 220 | ||
891 | @@ -248,47 +283,32 @@ | |||
892 | 248 | "Usar el sonido de notificación personalizado especificado en " | 283 | "Usar el sonido de notificación personalizado especificado en " |
893 | 249 | "custom_notification_sound_path" | 284 | "custom_notification_sound_path" |
894 | 250 | 285 | ||
896 | 251 | #: ../src/timerapplet/controllers/GlobalController.py:61 | 286 | #: ../src/timerapplet/controllers/GlobalController.py:62 |
897 | 252 | msgid "Edit Preset" | 287 | msgid "Edit Preset" |
898 | 253 | msgstr "Editar Preestablecido" | 288 | msgstr "Editar Preestablecido" |
899 | 254 | 289 | ||
916 | 255 | #. HH:MM:SS | 290 | #: ../src/timerapplet/controllers/TimerApplet.py:99 |
901 | 256 | #: ../src/timerapplet/controllers/TimerApplet.py:49 | ||
902 | 257 | #: ../src/timerapplet/controllers/TimerApplet.py:395 | ||
903 | 258 | #, python-format | ||
904 | 259 | msgid "%02d:%02d:%02d" | ||
905 | 260 | msgstr "%02d:%02d:%02d" | ||
906 | 261 | |||
907 | 262 | #. HH:MM | ||
908 | 263 | #. MM:SS | ||
909 | 264 | #: ../src/timerapplet/controllers/TimerApplet.py:53 | ||
910 | 265 | #: ../src/timerapplet/controllers/TimerApplet.py:56 | ||
911 | 266 | #, python-format | ||
912 | 267 | msgid "%02d:%02d" | ||
913 | 268 | msgstr "%02d:%02d" | ||
914 | 269 | |||
915 | 270 | #: ../src/timerapplet/controllers/TimerApplet.py:119 | ||
917 | 271 | msgid "Continue timer countdown?" | 291 | msgid "Continue timer countdown?" |
918 | 272 | msgstr "¿Continuar temporizador?" | 292 | msgstr "¿Continuar temporizador?" |
919 | 273 | 293 | ||
921 | 274 | #: ../src/timerapplet/controllers/TimerApplet.py:120 | 294 | #: ../src/timerapplet/controllers/TimerApplet.py:100 |
922 | 275 | msgid "The timer is currently paused. Would you like to continue countdown?" | 295 | msgid "The timer is currently paused. Would you like to continue countdown?" |
923 | 276 | msgstr "El temporizador está pausado. ¿Desea continuar la cuenta?" | 296 | msgstr "El temporizador está pausado. ¿Desea continuar la cuenta?" |
924 | 277 | 297 | ||
926 | 278 | #: ../src/timerapplet/controllers/TimerApplet.py:209 | 298 | #: ../src/timerapplet/controllers/TimerApplet.py:194 |
927 | 279 | msgid "Click to start a new timer countdown." | 299 | msgid "Click to start a new timer countdown." |
928 | 280 | msgstr "Click para iniciar un nuevo temporizador" | 300 | msgstr "Click para iniciar un nuevo temporizador" |
929 | 281 | 301 | ||
931 | 282 | #: ../src/timerapplet/controllers/TimerApplet.py:214 | 302 | #: ../src/timerapplet/controllers/TimerApplet.py:199 |
932 | 283 | msgid "Paused. Click to continue timer countdown." | 303 | msgid "Paused. Click to continue timer countdown." |
933 | 284 | msgstr "Pausado. Pulse para continuar el temporizador." | 304 | msgstr "Pausado. Pulse para continuar el temporizador." |
934 | 285 | 305 | ||
936 | 286 | #: ../src/timerapplet/controllers/TimerApplet.py:217 | 306 | #: ../src/timerapplet/controllers/TimerApplet.py:202 |
937 | 287 | msgid "Finished" | 307 | msgid "Finished" |
938 | 288 | msgstr "Finalizado" | 308 | msgstr "Finalizado" |
939 | 289 | 309 | ||
940 | 290 | #. "<timer name>" finished at <time> | 310 | #. "<timer name>" finished at <time> |
942 | 291 | #: ../src/timerapplet/controllers/TimerApplet.py:222 | 311 | #: ../src/timerapplet/controllers/TimerApplet.py:207 |
943 | 292 | #, python-format | 312 | #, python-format |
944 | 293 | msgid "" | 313 | msgid "" |
945 | 294 | "\"%s\" finished at %s.\n" | 314 | "\"%s\" finished at %s.\n" |
946 | @@ -298,7 +318,7 @@ | |||
947 | 298 | "Click para detener el temporizador." | 318 | "Click para detener el temporizador." |
948 | 299 | 319 | ||
949 | 300 | #. Timer finished at <time> | 320 | #. Timer finished at <time> |
951 | 301 | #: ../src/timerapplet/controllers/TimerApplet.py:225 | 321 | #: ../src/timerapplet/controllers/TimerApplet.py:210 |
952 | 302 | #, python-format | 322 | #, python-format |
953 | 303 | msgid "" | 323 | msgid "" |
954 | 304 | "Timer finished at %s.\n" | 324 | "Timer finished at %s.\n" |
955 | @@ -308,41 +328,48 @@ | |||
956 | 308 | "Click para detener el temporizador." | 328 | "Click para detener el temporizador." |
957 | 309 | 329 | ||
958 | 310 | #. HH:MM:SS (<timer name>) | 330 | #. HH:MM:SS (<timer name>) |
960 | 311 | #: ../src/timerapplet/controllers/TimerApplet.py:392 | 331 | #: ../src/timerapplet/controllers/TimerApplet.py:386 |
961 | 312 | #, python-format | 332 | #, python-format |
962 | 313 | msgid "%02d:%02d:%02d (%s)" | 333 | msgid "%02d:%02d:%02d (%s)" |
963 | 314 | msgstr "%02d:%02d:%02d (%s)" | 334 | msgstr "%02d:%02d:%02d (%s)" |
964 | 315 | 335 | ||
965 | 336 | #. HH:MM:SS | ||
966 | 337 | #: ../src/timerapplet/controllers/TimerApplet.py:389 | ||
967 | 338 | #: ../src/timerapplet/utils.py:52 | ||
968 | 339 | #, python-format | ||
969 | 340 | msgid "%02d:%02d:%02d" | ||
970 | 341 | msgstr "%02d:%02d:%02d" | ||
971 | 342 | |||
972 | 316 | #. "<timer name>" Finished | 343 | #. "<timer name>" Finished |
974 | 317 | #: ../src/timerapplet/controllers/TimerApplet.py:416 | 344 | #: ../src/timerapplet/controllers/TimerApplet.py:411 |
975 | 318 | #, python-format | 345 | #, python-format |
976 | 319 | msgid "\"%s\" Finished" | 346 | msgid "\"%s\" Finished" |
977 | 320 | msgstr "\"%s\" Finalizado" | 347 | msgstr "\"%s\" Finalizado" |
978 | 321 | 348 | ||
979 | 322 | #. "<timer name>" finished at <time> | 349 | #. "<timer name>" finished at <time> |
981 | 323 | #: ../src/timerapplet/controllers/TimerApplet.py:419 | 350 | #: ../src/timerapplet/controllers/TimerApplet.py:414 |
982 | 324 | #, python-format | 351 | #, python-format |
983 | 325 | msgid "\"%s\" finished at %s" | 352 | msgid "\"%s\" finished at %s" |
984 | 326 | msgstr "\"%s\" terminó a las %s" | 353 | msgstr "\"%s\" terminó a las %s" |
985 | 327 | 354 | ||
987 | 328 | #: ../src/timerapplet/controllers/TimerApplet.py:421 | 355 | #: ../src/timerapplet/controllers/TimerApplet.py:416 |
988 | 329 | msgid "Timer Finished" | 356 | msgid "Timer Finished" |
989 | 330 | msgstr "El tiempo terminó" | 357 | msgstr "El tiempo terminó" |
990 | 331 | 358 | ||
991 | 332 | #. Timer finished at <time> | 359 | #. Timer finished at <time> |
993 | 333 | #: ../src/timerapplet/controllers/TimerApplet.py:424 | 360 | #: ../src/timerapplet/controllers/TimerApplet.py:419 |
994 | 334 | #, python-format | 361 | #, python-format |
995 | 335 | msgid "Timer finished at %s" | 362 | msgid "Timer finished at %s" |
996 | 336 | msgstr "El tiempo terminó a las %s" | 363 | msgstr "El tiempo terminó a las %s" |
997 | 337 | 364 | ||
999 | 338 | #: ../src/timerapplet/controllers/TimerApplet.py:431 | 365 | #: ../src/timerapplet/controllers/TimerApplet.py:426 |
1000 | 339 | #, python-format | 366 | #, python-format |
1001 | 340 | msgid "Timer finished about <b>%d second</b> ago" | 367 | msgid "Timer finished about <b>%d second</b> ago" |
1002 | 341 | msgid_plural "Timer finished about <b>%d seconds</b> ago" | 368 | msgid_plural "Timer finished about <b>%d seconds</b> ago" |
1003 | 342 | msgstr[0] "El tiempo terminó hace %d segundo atrás" | 369 | msgstr[0] "El tiempo terminó hace %d segundo atrás" |
1004 | 343 | msgstr[1] "El tiempo terminó hace %d segundos atrás" | 370 | msgstr[1] "El tiempo terminó hace %d segundos atrás" |
1005 | 344 | 371 | ||
1007 | 345 | #: ../src/timerapplet/controllers/TimerApplet.py:436 | 372 | #: ../src/timerapplet/controllers/TimerApplet.py:431 |
1008 | 346 | #, python-format | 373 | #, python-format |
1009 | 347 | msgid "Timer finished about <b>%d minute</b> ago" | 374 | msgid "Timer finished about <b>%d minute</b> ago" |
1010 | 348 | msgid_plural "Timer finished about <b>%d minutes</b> ago" | 375 | msgid_plural "Timer finished about <b>%d minutes</b> ago" |
1011 | @@ -365,7 +392,7 @@ | |||
1012 | 365 | msgid "_Continue Timer" | 392 | msgid "_Continue Timer" |
1013 | 366 | msgstr "_Continuar temporizador" | 393 | msgstr "_Continuar temporizador" |
1014 | 367 | 394 | ||
1016 | 368 | #: ../src/timerapplet/ui/StartTimerDialog.py:174 | 395 | #: ../src/timerapplet/ui/StartTimerDialog.py:186 |
1017 | 369 | msgid "<b>Command not found.</b>" | 396 | msgid "<b>Command not found.</b>" |
1018 | 370 | msgstr "<b>Comando no encontrado.</b>" | 397 | msgstr "<b>Comando no encontrado.</b>" |
1019 | 371 | 398 | ||
1020 | @@ -381,12 +408,22 @@ | |||
1021 | 381 | msgid "_Seconds:" | 408 | msgid "_Seconds:" |
1022 | 382 | msgstr "_Segundos:" | 409 | msgstr "_Segundos:" |
1023 | 383 | 410 | ||
1024 | 411 | #. HH:MM | ||
1025 | 412 | #. MM:SS | ||
1026 | 413 | #: ../src/timerapplet/utils.py:56 ../src/timerapplet/utils.py:59 | ||
1027 | 414 | #, python-format | ||
1028 | 415 | msgid "%02d:%02d" | ||
1029 | 416 | msgstr "%02d:%02d" | ||
1030 | 417 | |||
1031 | 384 | #. <preset name> (HH:MM:SS) | 418 | #. <preset name> (HH:MM:SS) |
1033 | 385 | #: ../src/timerapplet/utils.py:43 | 419 | #: ../src/timerapplet/utils.py:69 |
1034 | 386 | #, python-format | 420 | #, python-format |
1035 | 387 | msgid "%s (%02d:%02d:%02d)" | 421 | msgid "%s (%02d:%02d:%02d)" |
1036 | 388 | msgstr "%s (%02d:%02d:%02d)" | 422 | msgstr "%s (%02d:%02d:%02d)" |
1037 | 389 | 423 | ||
1038 | 424 | #~ msgid "Run executable" | ||
1039 | 425 | #~ msgstr "Ejecutar" | ||
1040 | 426 | |||
1041 | 390 | #~ msgid "Get a notification after a specified interval of time elapses" | 427 | #~ msgid "Get a notification after a specified interval of time elapses" |
1042 | 391 | #~ msgstr "Notificar después de haber transcurrido un intervalo específico." | 428 | #~ msgstr "Notificar después de haber transcurrido un intervalo específico." |
1043 | 392 | 429 | ||
1044 | @@ -486,7 +523,8 @@ | |||
1045 | 486 | #~ msgstr "¿Continuar el temporizador?" | 523 | #~ msgstr "¿Continuar el temporizador?" |
1046 | 487 | 524 | ||
1047 | 488 | #~ msgid "" | 525 | #~ msgid "" |
1049 | 489 | #~ "The timer is currently paused. Would you like to continue countdown from %s?" | 526 | #~ "The timer is currently paused. Would you like to continue countdown from %" |
1050 | 527 | #~ "s?" | ||
1051 | 490 | #~ msgstr "" | 528 | #~ msgstr "" |
1052 | 491 | #~ "El temporizador está pausado. ¿Quiere continuar la cuenta atrás desde %s?" | 529 | #~ "El temporizador está pausado. ¿Quiere continuar la cuenta atrás desde %s?" |
1053 | 492 | 530 | ||
1054 | 493 | 531 | ||
1055 | === modified file 'timer-applet/po/messages.pot' | |||
1056 | --- timer-applet/po/messages.pot 2010-08-02 00:21:28 +0000 | |||
1057 | +++ timer-applet/po/messages.pot 2010-09-15 19:27:52 +0000 | |||
1058 | @@ -8,7 +8,7 @@ | |||
1059 | 8 | msgstr "" | 8 | msgstr "" |
1060 | 9 | "Project-Id-Version: PACKAGE VERSION\n" | 9 | "Project-Id-Version: PACKAGE VERSION\n" |
1061 | 10 | "Report-Msgid-Bugs-To: \n" | 10 | "Report-Msgid-Bugs-To: \n" |
1063 | 11 | "POT-Creation-Date: 2010-08-01 20:20-0400\n" | 11 | "POT-Creation-Date: 2010-09-15 15:16-0400\n" |
1064 | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
1065 | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | 13 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
1066 | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" | 14 | "Language-Team: LANGUAGE <LL@li.org>\n" |
1067 | @@ -38,30 +38,34 @@ | |||
1068 | 38 | msgstr "" | 38 | msgstr "" |
1069 | 39 | 39 | ||
1070 | 40 | #: ../data/TimerApplet.xml.h:2 | 40 | #: ../data/TimerApplet.xml.h:2 |
1071 | 41 | msgid "Next" | ||
1072 | 42 | msgstr "" | ||
1073 | 43 | |||
1074 | 44 | #: ../data/TimerApplet.xml.h:3 | ||
1075 | 41 | msgid "Pa_use" | 45 | msgid "Pa_use" |
1076 | 42 | msgstr "" | 46 | msgstr "" |
1077 | 43 | 47 | ||
1079 | 44 | #: ../data/TimerApplet.xml.h:3 | 48 | #: ../data/TimerApplet.xml.h:4 |
1080 | 45 | msgid "Pre_sets" | 49 | msgid "Pre_sets" |
1081 | 46 | msgstr "" | 50 | msgstr "" |
1082 | 47 | 51 | ||
1084 | 48 | #: ../data/TimerApplet.xml.h:4 | 52 | #: ../data/TimerApplet.xml.h:5 |
1085 | 49 | msgid "R_estart" | 53 | msgid "R_estart" |
1086 | 50 | msgstr "" | 54 | msgstr "" |
1087 | 51 | 55 | ||
1089 | 52 | #: ../data/TimerApplet.xml.h:5 | 56 | #: ../data/TimerApplet.xml.h:6 |
1090 | 53 | msgid "_About" | 57 | msgid "_About" |
1091 | 54 | msgstr "" | 58 | msgstr "" |
1092 | 55 | 59 | ||
1094 | 56 | #: ../data/TimerApplet.xml.h:6 | 60 | #: ../data/TimerApplet.xml.h:7 |
1095 | 57 | msgid "_Continue" | 61 | msgid "_Continue" |
1096 | 58 | msgstr "" | 62 | msgstr "" |
1097 | 59 | 63 | ||
1099 | 60 | #: ../data/TimerApplet.xml.h:7 | 64 | #: ../data/TimerApplet.xml.h:8 |
1100 | 61 | msgid "_Preferences" | 65 | msgid "_Preferences" |
1101 | 62 | msgstr "" | 66 | msgstr "" |
1102 | 63 | 67 | ||
1104 | 64 | #: ../data/TimerApplet.xml.h:8 | 68 | #: ../data/TimerApplet.xml.h:9 |
1105 | 65 | msgid "_Stop" | 69 | msgid "_Stop" |
1106 | 66 | msgstr "" | 70 | msgstr "" |
1107 | 67 | 71 | ||
1108 | @@ -70,115 +74,139 @@ | |||
1109 | 70 | msgstr "" | 74 | msgstr "" |
1110 | 71 | 75 | ||
1111 | 72 | #: ../data/timer-applet.glade.h:2 | 76 | #: ../data/timer-applet.glade.h:2 |
1112 | 77 | msgid "<b>Define next timer</b>" | ||
1113 | 78 | msgstr "" | ||
1114 | 79 | |||
1115 | 80 | #: ../data/timer-applet.glade.h:3 | ||
1116 | 81 | msgid "<b>Interval timer</b>" | ||
1117 | 82 | msgstr "" | ||
1118 | 83 | |||
1119 | 84 | #: ../data/timer-applet.glade.h:4 | ||
1120 | 85 | msgid "<b>Run custom command</b>" | ||
1121 | 86 | msgstr "" | ||
1122 | 87 | |||
1123 | 88 | #: ../data/timer-applet.glade.h:5 | ||
1124 | 73 | msgid "<b>_Duration</b>" | 89 | msgid "<b>_Duration</b>" |
1125 | 74 | msgstr "" | 90 | msgstr "" |
1126 | 75 | 91 | ||
1128 | 76 | #: ../data/timer-applet.glade.h:3 | 92 | #: ../data/timer-applet.glade.h:6 |
1129 | 77 | msgid "<b>_Name</b>" | 93 | msgid "<b>_Name</b>" |
1130 | 78 | msgstr "" | 94 | msgstr "" |
1131 | 79 | 95 | ||
1133 | 80 | #: ../data/timer-applet.glade.h:4 | 96 | #: ../data/timer-applet.glade.h:7 |
1134 | 81 | msgid "<b>_Presets</b>" | 97 | msgid "<b>_Presets</b>" |
1135 | 82 | msgstr "" | 98 | msgstr "" |
1136 | 83 | 99 | ||
1138 | 84 | #: ../data/timer-applet.glade.h:5 | 100 | #: ../data/timer-applet.glade.h:8 |
1139 | 85 | msgid "A timer applet for the perfect egg and beyond!" | 101 | msgid "A timer applet for the perfect egg and beyond!" |
1140 | 86 | msgstr "" | 102 | msgstr "" |
1141 | 87 | 103 | ||
1143 | 88 | #: ../data/timer-applet.glade.h:6 | 104 | #: ../data/timer-applet.glade.h:9 |
1144 | 89 | #: ../src/timerapplet/controllers/GlobalController.py:47 | 105 | #: ../src/timerapplet/controllers/GlobalController.py:47 |
1145 | 90 | msgid "Add Preset" | 106 | msgid "Add Preset" |
1146 | 91 | msgstr "" | 107 | msgstr "" |
1147 | 92 | 108 | ||
1149 | 93 | #: ../data/timer-applet.glade.h:7 | 109 | #: ../data/timer-applet.glade.h:10 |
1150 | 110 | msgid "Advanced" | ||
1151 | 111 | msgstr "" | ||
1152 | 112 | |||
1153 | 113 | #: ../data/timer-applet.glade.h:11 | ||
1154 | 94 | msgid "Choose A Sound File" | 114 | msgid "Choose A Sound File" |
1155 | 95 | msgstr "" | 115 | msgstr "" |
1156 | 96 | 116 | ||
1158 | 97 | #: ../data/timer-applet.glade.h:8 | 117 | #: ../data/timer-applet.glade.h:12 |
1159 | 118 | msgid "Execute:" | ||
1160 | 119 | msgstr "" | ||
1161 | 120 | |||
1162 | 121 | #: ../data/timer-applet.glade.h:13 | ||
1163 | 122 | msgid "Initiate automatically" | ||
1164 | 123 | msgstr "" | ||
1165 | 124 | |||
1166 | 125 | #: ../data/timer-applet.glade.h:14 | ||
1167 | 98 | msgid "Mana_ge Presets" | 126 | msgid "Mana_ge Presets" |
1168 | 99 | msgstr "" | 127 | msgstr "" |
1169 | 100 | 128 | ||
1171 | 101 | #: ../data/timer-applet.glade.h:9 | 129 | #: ../data/timer-applet.glade.h:15 |
1172 | 102 | msgid "Manage Presets" | 130 | msgid "Manage Presets" |
1173 | 103 | msgstr "" | 131 | msgstr "" |
1174 | 104 | 132 | ||
1176 | 105 | #: ../data/timer-applet.glade.h:10 | 133 | #: ../data/timer-applet.glade.h:16 |
1177 | 106 | msgid "Run custom command after timer has ended." | 134 | msgid "Run custom command after timer has ended." |
1178 | 107 | msgstr "" | 135 | msgstr "" |
1179 | 108 | 136 | ||
1185 | 109 | #: ../data/timer-applet.glade.h:11 | 137 | #: ../data/timer-applet.glade.h:17 |
1181 | 110 | msgid "Run executable" | ||
1182 | 111 | msgstr "" | ||
1183 | 112 | |||
1184 | 113 | #: ../data/timer-applet.glade.h:12 | ||
1186 | 114 | msgid "Run executable after timer finished." | 138 | msgid "Run executable after timer finished." |
1187 | 115 | msgstr "" | 139 | msgstr "" |
1188 | 116 | 140 | ||
1190 | 117 | #: ../data/timer-applet.glade.h:13 | 141 | #: ../data/timer-applet.glade.h:18 |
1191 | 118 | msgid "S_ave as Preset" | 142 | msgid "S_ave as Preset" |
1192 | 119 | msgstr "" | 143 | msgstr "" |
1193 | 120 | 144 | ||
1195 | 121 | #: ../data/timer-applet.glade.h:14 | 145 | #: ../data/timer-applet.glade.h:19 |
1196 | 122 | msgid "S_how pulsing panel icon" | 146 | msgid "S_how pulsing panel icon" |
1197 | 123 | msgstr "" | 147 | msgstr "" |
1198 | 124 | 148 | ||
1200 | 125 | #: ../data/timer-applet.glade.h:15 | 149 | #: ../data/timer-applet.glade.h:20 |
1201 | 126 | msgid "S_tart Timer" | 150 | msgid "S_tart Timer" |
1202 | 127 | msgstr "" | 151 | msgstr "" |
1203 | 128 | 152 | ||
1205 | 129 | #: ../data/timer-applet.glade.h:16 | 153 | #: ../data/timer-applet.glade.h:21 |
1206 | 130 | msgid "Show pulsing panel icon after timer has ended." | 154 | msgid "Show pulsing panel icon after timer has ended." |
1207 | 131 | msgstr "" | 155 | msgstr "" |
1208 | 132 | 156 | ||
1210 | 133 | #: ../data/timer-applet.glade.h:17 | 157 | #: ../data/timer-applet.glade.h:22 |
1211 | 134 | msgid "Start Timer" | 158 | msgid "Start Timer" |
1212 | 135 | msgstr "" | 159 | msgstr "" |
1213 | 136 | 160 | ||
1215 | 137 | #: ../data/timer-applet.glade.h:18 | 161 | #: ../data/timer-applet.glade.h:23 |
1216 | 162 | msgid "Start automatically" | ||
1217 | 163 | msgstr "" | ||
1218 | 164 | |||
1219 | 165 | #: ../data/timer-applet.glade.h:24 | ||
1220 | 138 | msgid "Timer Applet" | 166 | msgid "Timer Applet" |
1221 | 139 | msgstr "" | 167 | msgstr "" |
1222 | 140 | 168 | ||
1224 | 141 | #: ../data/timer-applet.glade.h:19 | 169 | #: ../data/timer-applet.glade.h:25 |
1225 | 142 | msgid "Timer Preferences" | 170 | msgid "Timer Preferences" |
1226 | 143 | msgstr "" | 171 | msgstr "" |
1227 | 144 | 172 | ||
1229 | 145 | #: ../data/timer-applet.glade.h:20 | 173 | #: ../data/timer-applet.glade.h:26 |
1230 | 146 | msgid "Use c_ustom sound" | 174 | msgid "Use c_ustom sound" |
1231 | 147 | msgstr "" | 175 | msgstr "" |
1232 | 148 | 176 | ||
1234 | 149 | #: ../data/timer-applet.glade.h:21 | 177 | #: ../data/timer-applet.glade.h:27 |
1235 | 150 | msgid "Use d_efault sound" | 178 | msgid "Use d_efault sound" |
1236 | 151 | msgstr "" | 179 | msgstr "" |
1237 | 152 | 180 | ||
1239 | 153 | #: ../data/timer-applet.glade.h:22 | 181 | #: ../data/timer-applet.glade.h:28 |
1240 | 154 | msgid "_Add..." | 182 | msgid "_Add..." |
1241 | 155 | msgstr "" | 183 | msgstr "" |
1242 | 156 | 184 | ||
1244 | 157 | #: ../data/timer-applet.glade.h:23 | 185 | #: ../data/timer-applet.glade.h:29 |
1245 | 158 | msgid "_Delete" | 186 | msgid "_Delete" |
1246 | 159 | msgstr "" | 187 | msgstr "" |
1247 | 160 | 188 | ||
1249 | 161 | #: ../data/timer-applet.glade.h:24 | 189 | #: ../data/timer-applet.glade.h:30 |
1250 | 162 | msgid "_Edit..." | 190 | msgid "_Edit..." |
1251 | 163 | msgstr "" | 191 | msgstr "" |
1252 | 164 | 192 | ||
1254 | 165 | #: ../data/timer-applet.glade.h:25 | 193 | #: ../data/timer-applet.glade.h:31 |
1255 | 166 | msgid "_Name:" | 194 | msgid "_Name:" |
1256 | 167 | msgstr "" | 195 | msgstr "" |
1257 | 168 | 196 | ||
1259 | 169 | #: ../data/timer-applet.glade.h:26 | 197 | #: ../data/timer-applet.glade.h:32 |
1260 | 170 | msgid "_Play notification sound" | 198 | msgid "_Play notification sound" |
1261 | 171 | msgstr "" | 199 | msgstr "" |
1262 | 172 | 200 | ||
1264 | 173 | #: ../data/timer-applet.glade.h:27 | 201 | #: ../data/timer-applet.glade.h:33 |
1265 | 174 | msgid "_Show popup notification" | 202 | msgid "_Show popup notification" |
1266 | 175 | msgstr "" | 203 | msgstr "" |
1267 | 176 | 204 | ||
1269 | 177 | #: ../data/timer-applet.glade.h:28 | 205 | #: ../data/timer-applet.glade.h:34 |
1270 | 178 | msgid "_Show popup notification after timer has ended." | 206 | msgid "_Show popup notification after timer has ended." |
1271 | 179 | msgstr "" | 207 | msgstr "" |
1272 | 180 | 208 | ||
1274 | 181 | #: ../data/timer-applet.glade.h:29 | 209 | #: ../data/timer-applet.glade.h:35 |
1275 | 182 | msgid "_Show remaining time while timer is running" | 210 | msgid "_Show remaining time while timer is running" |
1276 | 183 | msgstr "" | 211 | msgstr "" |
1277 | 184 | 212 | ||
1278 | @@ -242,47 +270,32 @@ | |||
1279 | 242 | "Use the custom notification sound specified in custom_notification_sound_path" | 270 | "Use the custom notification sound specified in custom_notification_sound_path" |
1280 | 243 | msgstr "" | 271 | msgstr "" |
1281 | 244 | 272 | ||
1283 | 245 | #: ../src/timerapplet/controllers/GlobalController.py:61 | 273 | #: ../src/timerapplet/controllers/GlobalController.py:62 |
1284 | 246 | msgid "Edit Preset" | 274 | msgid "Edit Preset" |
1285 | 247 | msgstr "" | 275 | msgstr "" |
1286 | 248 | 276 | ||
1303 | 249 | #. HH:MM:SS | 277 | #: ../src/timerapplet/controllers/TimerApplet.py:99 |
1288 | 250 | #: ../src/timerapplet/controllers/TimerApplet.py:49 | ||
1289 | 251 | #: ../src/timerapplet/controllers/TimerApplet.py:395 | ||
1290 | 252 | #, python-format | ||
1291 | 253 | msgid "%02d:%02d:%02d" | ||
1292 | 254 | msgstr "" | ||
1293 | 255 | |||
1294 | 256 | #. HH:MM | ||
1295 | 257 | #. MM:SS | ||
1296 | 258 | #: ../src/timerapplet/controllers/TimerApplet.py:53 | ||
1297 | 259 | #: ../src/timerapplet/controllers/TimerApplet.py:56 | ||
1298 | 260 | #, python-format | ||
1299 | 261 | msgid "%02d:%02d" | ||
1300 | 262 | msgstr "" | ||
1301 | 263 | |||
1302 | 264 | #: ../src/timerapplet/controllers/TimerApplet.py:119 | ||
1304 | 265 | msgid "Continue timer countdown?" | 278 | msgid "Continue timer countdown?" |
1305 | 266 | msgstr "" | 279 | msgstr "" |
1306 | 267 | 280 | ||
1308 | 268 | #: ../src/timerapplet/controllers/TimerApplet.py:120 | 281 | #: ../src/timerapplet/controllers/TimerApplet.py:100 |
1309 | 269 | msgid "The timer is currently paused. Would you like to continue countdown?" | 282 | msgid "The timer is currently paused. Would you like to continue countdown?" |
1310 | 270 | msgstr "" | 283 | msgstr "" |
1311 | 271 | 284 | ||
1313 | 272 | #: ../src/timerapplet/controllers/TimerApplet.py:209 | 285 | #: ../src/timerapplet/controllers/TimerApplet.py:194 |
1314 | 273 | msgid "Click to start a new timer countdown." | 286 | msgid "Click to start a new timer countdown." |
1315 | 274 | msgstr "" | 287 | msgstr "" |
1316 | 275 | 288 | ||
1318 | 276 | #: ../src/timerapplet/controllers/TimerApplet.py:214 | 289 | #: ../src/timerapplet/controllers/TimerApplet.py:199 |
1319 | 277 | msgid "Paused. Click to continue timer countdown." | 290 | msgid "Paused. Click to continue timer countdown." |
1320 | 278 | msgstr "" | 291 | msgstr "" |
1321 | 279 | 292 | ||
1323 | 280 | #: ../src/timerapplet/controllers/TimerApplet.py:217 | 293 | #: ../src/timerapplet/controllers/TimerApplet.py:202 |
1324 | 281 | msgid "Finished" | 294 | msgid "Finished" |
1325 | 282 | msgstr "" | 295 | msgstr "" |
1326 | 283 | 296 | ||
1327 | 284 | #. "<timer name>" finished at <time> | 297 | #. "<timer name>" finished at <time> |
1329 | 285 | #: ../src/timerapplet/controllers/TimerApplet.py:222 | 298 | #: ../src/timerapplet/controllers/TimerApplet.py:207 |
1330 | 286 | #, python-format | 299 | #, python-format |
1331 | 287 | msgid "" | 300 | msgid "" |
1332 | 288 | "\"%s\" finished at %s.\n" | 301 | "\"%s\" finished at %s.\n" |
1333 | @@ -290,7 +303,7 @@ | |||
1334 | 290 | msgstr "" | 303 | msgstr "" |
1335 | 291 | 304 | ||
1336 | 292 | #. Timer finished at <time> | 305 | #. Timer finished at <time> |
1338 | 293 | #: ../src/timerapplet/controllers/TimerApplet.py:225 | 306 | #: ../src/timerapplet/controllers/TimerApplet.py:210 |
1339 | 294 | #, python-format | 307 | #, python-format |
1340 | 295 | msgid "" | 308 | msgid "" |
1341 | 296 | "Timer finished at %s.\n" | 309 | "Timer finished at %s.\n" |
1342 | @@ -298,41 +311,48 @@ | |||
1343 | 298 | msgstr "" | 311 | msgstr "" |
1344 | 299 | 312 | ||
1345 | 300 | #. HH:MM:SS (<timer name>) | 313 | #. HH:MM:SS (<timer name>) |
1347 | 301 | #: ../src/timerapplet/controllers/TimerApplet.py:392 | 314 | #: ../src/timerapplet/controllers/TimerApplet.py:386 |
1348 | 302 | #, python-format | 315 | #, python-format |
1349 | 303 | msgid "%02d:%02d:%02d (%s)" | 316 | msgid "%02d:%02d:%02d (%s)" |
1350 | 304 | msgstr "" | 317 | msgstr "" |
1351 | 305 | 318 | ||
1352 | 319 | #. HH:MM:SS | ||
1353 | 320 | #: ../src/timerapplet/controllers/TimerApplet.py:389 | ||
1354 | 321 | #: ../src/timerapplet/utils.py:52 | ||
1355 | 322 | #, python-format | ||
1356 | 323 | msgid "%02d:%02d:%02d" | ||
1357 | 324 | msgstr "" | ||
1358 | 325 | |||
1359 | 306 | #. "<timer name>" Finished | 326 | #. "<timer name>" Finished |
1361 | 307 | #: ../src/timerapplet/controllers/TimerApplet.py:416 | 327 | #: ../src/timerapplet/controllers/TimerApplet.py:411 |
1362 | 308 | #, python-format | 328 | #, python-format |
1363 | 309 | msgid "\"%s\" Finished" | 329 | msgid "\"%s\" Finished" |
1364 | 310 | msgstr "" | 330 | msgstr "" |
1365 | 311 | 331 | ||
1366 | 312 | #. "<timer name>" finished at <time> | 332 | #. "<timer name>" finished at <time> |
1368 | 313 | #: ../src/timerapplet/controllers/TimerApplet.py:419 | 333 | #: ../src/timerapplet/controllers/TimerApplet.py:414 |
1369 | 314 | #, python-format | 334 | #, python-format |
1370 | 315 | msgid "\"%s\" finished at %s" | 335 | msgid "\"%s\" finished at %s" |
1371 | 316 | msgstr "" | 336 | msgstr "" |
1372 | 317 | 337 | ||
1374 | 318 | #: ../src/timerapplet/controllers/TimerApplet.py:421 | 338 | #: ../src/timerapplet/controllers/TimerApplet.py:416 |
1375 | 319 | msgid "Timer Finished" | 339 | msgid "Timer Finished" |
1376 | 320 | msgstr "" | 340 | msgstr "" |
1377 | 321 | 341 | ||
1378 | 322 | #. Timer finished at <time> | 342 | #. Timer finished at <time> |
1380 | 323 | #: ../src/timerapplet/controllers/TimerApplet.py:424 | 343 | #: ../src/timerapplet/controllers/TimerApplet.py:419 |
1381 | 324 | #, python-format | 344 | #, python-format |
1382 | 325 | msgid "Timer finished at %s" | 345 | msgid "Timer finished at %s" |
1383 | 326 | msgstr "" | 346 | msgstr "" |
1384 | 327 | 347 | ||
1386 | 328 | #: ../src/timerapplet/controllers/TimerApplet.py:431 | 348 | #: ../src/timerapplet/controllers/TimerApplet.py:426 |
1387 | 329 | #, python-format | 349 | #, python-format |
1388 | 330 | msgid "Timer finished about <b>%d second</b> ago" | 350 | msgid "Timer finished about <b>%d second</b> ago" |
1389 | 331 | msgid_plural "Timer finished about <b>%d seconds</b> ago" | 351 | msgid_plural "Timer finished about <b>%d seconds</b> ago" |
1390 | 332 | msgstr[0] "" | 352 | msgstr[0] "" |
1391 | 333 | msgstr[1] "" | 353 | msgstr[1] "" |
1392 | 334 | 354 | ||
1394 | 335 | #: ../src/timerapplet/controllers/TimerApplet.py:436 | 355 | #: ../src/timerapplet/controllers/TimerApplet.py:431 |
1395 | 336 | #, python-format | 356 | #, python-format |
1396 | 337 | msgid "Timer finished about <b>%d minute</b> ago" | 357 | msgid "Timer finished about <b>%d minute</b> ago" |
1397 | 338 | msgid_plural "Timer finished about <b>%d minutes</b> ago" | 358 | msgid_plural "Timer finished about <b>%d minutes</b> ago" |
1398 | @@ -355,7 +375,7 @@ | |||
1399 | 355 | msgid "_Continue Timer" | 375 | msgid "_Continue Timer" |
1400 | 356 | msgstr "" | 376 | msgstr "" |
1401 | 357 | 377 | ||
1403 | 358 | #: ../src/timerapplet/ui/StartTimerDialog.py:174 | 378 | #: ../src/timerapplet/ui/StartTimerDialog.py:186 |
1404 | 359 | msgid "<b>Command not found.</b>" | 379 | msgid "<b>Command not found.</b>" |
1405 | 360 | msgstr "" | 380 | msgstr "" |
1406 | 361 | 381 | ||
1407 | @@ -371,8 +391,15 @@ | |||
1408 | 371 | msgid "_Seconds:" | 391 | msgid "_Seconds:" |
1409 | 372 | msgstr "" | 392 | msgstr "" |
1410 | 373 | 393 | ||
1411 | 394 | #. HH:MM | ||
1412 | 395 | #. MM:SS | ||
1413 | 396 | #: ../src/timerapplet/utils.py:56 ../src/timerapplet/utils.py:59 | ||
1414 | 397 | #, python-format | ||
1415 | 398 | msgid "%02d:%02d" | ||
1416 | 399 | msgstr "" | ||
1417 | 400 | |||
1418 | 374 | #. <preset name> (HH:MM:SS) | 401 | #. <preset name> (HH:MM:SS) |
1420 | 375 | #: ../src/timerapplet/utils.py:43 | 402 | #: ../src/timerapplet/utils.py:69 |
1421 | 376 | #, python-format | 403 | #, python-format |
1422 | 377 | msgid "%s (%02d:%02d:%02d)" | 404 | msgid "%s (%02d:%02d:%02d)" |
1423 | 378 | msgstr "" | 405 | msgstr "" |
1424 | 379 | 406 | ||
1425 | === modified file 'timer-applet/src/timerapplet/controllers/GlobalController.py' | |||
1426 | --- timer-applet/src/timerapplet/controllers/GlobalController.py 2010-07-14 10:53:59 +0000 | |||
1427 | +++ timer-applet/src/timerapplet/controllers/GlobalController.py 2010-09-15 19:27:52 +0000 | |||
1428 | @@ -49,13 +49,14 @@ | |||
1429 | 49 | 49 | ||
1430 | 50 | result = add_dialog.get_preset() | 50 | result = add_dialog.get_preset() |
1431 | 51 | if result is not None: | 51 | if result is not None: |
1433 | 52 | (name, hours, minutes, seconds, command) = result | 52 | (name, hours, minutes, seconds, command, next_timer, auto_start) = result |
1434 | 53 | self._presets_store.add_preset(name, hours, minutes, seconds, | 53 | self._presets_store.add_preset(name, hours, minutes, seconds, |
1436 | 54 | command) | 54 | command, next_timer, auto_start) |
1437 | 55 | 55 | ||
1438 | 56 | def _on_mgr_clicked_edit(self, sender, row_path, data=None): | 56 | def _on_mgr_clicked_edit(self, sender, row_path, data=None): |
1439 | 57 | row_iter = self._presets_store.get_model().get_iter(row_path) | 57 | row_iter = self._presets_store.get_model().get_iter(row_path) |
1441 | 58 | (name, hours, minutes, seconds, command) = self._presets_store.get_preset(row_iter) | 58 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ |
1442 | 59 | self._presets_store.get_preset(row_iter) | ||
1443 | 59 | 60 | ||
1444 | 60 | edit_dialog = ui.AddEditPresetDialog(config.GLADE_PATH, | 61 | edit_dialog = ui.AddEditPresetDialog(config.GLADE_PATH, |
1445 | 61 | _('Edit Preset'), | 62 | _('Edit Preset'), |
1446 | @@ -66,14 +67,25 @@ | |||
1447 | 66 | hours, | 67 | hours, |
1448 | 67 | minutes, | 68 | minutes, |
1449 | 68 | seconds, | 69 | seconds, |
1451 | 69 | command) | 70 | command, |
1452 | 71 | next_timer, | ||
1453 | 72 | auto_start | ||
1454 | 73 | ) | ||
1455 | 70 | 74 | ||
1456 | 71 | result = edit_dialog.get_preset() | 75 | result = edit_dialog.get_preset() |
1457 | 72 | if result is not None: | 76 | if result is not None: |
1459 | 73 | (name, hours, minutes, seconds, command) = result | 77 | (name, hours, minutes, seconds, command, next_timer, auto_start) = result |
1460 | 74 | self._presets_store.modify_preset(row_iter, name, hours, minutes, | 78 | self._presets_store.modify_preset(row_iter, name, hours, minutes, |
1462 | 75 | seconds, command) | 79 | seconds, command, next_timer, |
1463 | 80 | auto_start) | ||
1464 | 76 | 81 | ||
1465 | 77 | def _on_mgr_clicked_remove(self, sender, row_path, data=None): | 82 | def _on_mgr_clicked_remove(self, sender, row_path, data=None): |
1466 | 78 | row_iter = self._presets_store.get_model().get_iter(row_path) | 83 | row_iter = self._presets_store.get_model().get_iter(row_path) |
1467 | 79 | self._presets_store.remove_preset(row_iter) | 84 | self._presets_store.remove_preset(row_iter) |
1468 | 85 | |||
1469 | 86 | # TODO | ||
1470 | 87 | def _on_mgr_next_timer_is_being_edited(self, sender, row_path, data=None): | ||
1471 | 88 | """Show a dropdown widget to help completing the next timer.""" | ||
1472 | 89 | raise NotImplementedError("Not implemented, yet") | ||
1473 | 90 | |||
1474 | 91 | |||
1475 | 80 | 92 | ||
1476 | === modified file 'timer-applet/src/timerapplet/controllers/TimerApplet.py' | |||
1477 | --- timer-applet/src/timerapplet/controllers/TimerApplet.py 2010-07-23 18:38:21 +0000 | |||
1478 | +++ timer-applet/src/timerapplet/controllers/TimerApplet.py 2010-09-15 19:27:52 +0000 | |||
1479 | @@ -18,7 +18,6 @@ | |||
1480 | 18 | from gettext import gettext as _ | 18 | from gettext import gettext as _ |
1481 | 19 | from gettext import ngettext | 19 | from gettext import ngettext |
1482 | 20 | from datetime import datetime, timedelta | 20 | from datetime import datetime, timedelta |
1483 | 21 | import bonobo.ui | ||
1484 | 22 | import gnomeapplet | 21 | import gnomeapplet |
1485 | 23 | import gst | 22 | import gst |
1486 | 24 | import gtk | 23 | import gtk |
1487 | @@ -31,33 +30,10 @@ | |||
1488 | 31 | from timerapplet import core | 30 | from timerapplet import core |
1489 | 32 | from timerapplet import ui | 31 | from timerapplet import ui |
1490 | 33 | from timerapplet import utils | 32 | from timerapplet import utils |
1518 | 34 | from timerapplet.logger import logging | 33 | |
1519 | 35 | 34 | import pudb | |
1520 | 36 | def construct_time_str(remaining_seconds, show_all=True): | 35 | import pdb |
1521 | 37 | """Return a user-friendly representation of remaining time based on the given number of seconds. | 36 | |
1495 | 38 | |||
1496 | 39 | show_all specifies whether the returned string should show all time components. | ||
1497 | 40 | If show_all is True (default), the returned string is in HH:MM:SS format. | ||
1498 | 41 | If show_all is False, the returned string is in either HH:MM or MM:SS format, | ||
1499 | 42 | depending on how much time is remaining. This avoids showing the user more | ||
1500 | 43 | information than necessary. | ||
1501 | 44 | |||
1502 | 45 | """ | ||
1503 | 46 | hours, minutes, seconds = utils.seconds_to_hms(remaining_seconds) | ||
1504 | 47 | if show_all: | ||
1505 | 48 | # HH:MM:SS | ||
1506 | 49 | return _('%02d:%02d:%02d') % (hours, minutes, seconds) | ||
1507 | 50 | else: | ||
1508 | 51 | if hours > 0 or minutes > 14: | ||
1509 | 52 | # HH:MM | ||
1510 | 53 | return _('%02d:%02d') % (hours, minutes) | ||
1511 | 54 | else: | ||
1512 | 55 | # MM:SS | ||
1513 | 56 | return _('%02d:%02d') % (minutes, seconds) | ||
1514 | 57 | |||
1515 | 58 | def get_display_text_from_datetime(date_time): | ||
1516 | 59 | return date_time.strftime('%X') | ||
1517 | 60 | |||
1522 | 61 | def on_widget_button_press_event(sender, event, data=None): | 37 | def on_widget_button_press_event(sender, event, data=None): |
1523 | 62 | if event.button != 1: | 38 | if event.button != 1: |
1524 | 63 | sender.emit_stop_by_name('button-press-event') | 39 | sender.emit_stop_by_name('button-press-event') |
1525 | @@ -109,6 +85,10 @@ | |||
1526 | 109 | 85 | ||
1527 | 110 | self._status_button = ui.StatusButton() | 86 | self._status_button = ui.StatusButton() |
1528 | 111 | self._notifier = ui.Notifier('TimerApplet', gtk.STOCK_DIALOG_INFO, self._status_button) | 87 | self._notifier = ui.Notifier('TimerApplet', gtk.STOCK_DIALOG_INFO, self._status_button) |
1529 | 88 | self._start_next_timer_dialog = ui.StartNextTimerDialog( | ||
1530 | 89 | config.GLADE_PATH, | ||
1531 | 90 | "Start next timer", | ||
1532 | 91 | "Would you like to start the next timer?") | ||
1533 | 112 | self._start_timer_dialog = ui.StartTimerDialog(config.GLADE_PATH, | 92 | self._start_timer_dialog = ui.StartTimerDialog(config.GLADE_PATH, |
1534 | 113 | lambda name: utils.is_valid_preset_name(name, | 93 | lambda name: utils.is_valid_preset_name(name, |
1535 | 114 | self._presets_store), | 94 | self._presets_store), |
1536 | @@ -125,21 +105,26 @@ | |||
1537 | 125 | self._about_dialog.set_version(config.VERSION) | 105 | self._about_dialog.set_version(config.VERSION) |
1538 | 126 | 106 | ||
1539 | 127 | self._applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) | 107 | self._applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) |
1550 | 128 | self._applet.setup_menu_from_file(None, | 108 | self._applet.setup_menu_from_file( |
1551 | 129 | config.POPUP_MENU_FILE_PATH, | 109 | None, |
1552 | 130 | None, | 110 | config.POPUP_MENU_FILE_PATH, |
1553 | 131 | [('PauseTimer', lambda component, verb: self._timer.stop()), | 111 | None, |
1554 | 132 | ('ContinueTimer', lambda component, verb: self._timer.start()), | 112 | [('PauseTimer', lambda component, verb: self._timer.stop()), |
1555 | 133 | ('StopTimer', lambda component, verb: self._timer.reset()), | 113 | ('ContinueTimer', lambda component, verb: self._timer.start()), |
1556 | 134 | ('RestartTimer', lambda component, verb: self._restart_timer()), | 114 | ('StopTimer', lambda component, verb: self._timer.reset()), |
1557 | 135 | ('ManagePresets', lambda component, verb: self._manage_presets_dialog.show()), | 115 | ('RestartTimer', lambda component, verb: self._restart_timer()), |
1558 | 136 | ('Preferences', lambda component, verb: self._preferences_dialog.show()), | 116 | ('StartNextTimer', lambda component, verb: self._start_next_timer()), |
1559 | 137 | ('About', lambda component, verb: self._about_dialog.show())]) | 117 | ('ManagePresets', lambda component, verb: self._manage_presets_dialog.show()), |
1560 | 118 | ('Preferences', lambda component, | ||
1561 | 119 | verb: self._preferences_dialog.show()), | ||
1562 | 120 | ('About', lambda component, verb: self._about_dialog.show())] | ||
1563 | 121 | ) | ||
1564 | 138 | self._applet.add(self._status_button) | 122 | self._applet.add(self._status_button) |
1565 | 139 | 123 | ||
1566 | 140 | # Remove padding around button contents. | 124 | # Remove padding around button contents. |
1567 | 141 | force_no_focus_padding(self._status_button) | 125 | force_no_focus_padding(self._status_button) |
1568 | 142 | 126 | ||
1569 | 127 | # TODO: | ||
1570 | 143 | # Fix bug in which button would not propogate middle-clicks | 128 | # Fix bug in which button would not propogate middle-clicks |
1571 | 144 | # and right-clicks to the applet. | 129 | # and right-clicks to the applet. |
1572 | 145 | self._status_button.connect('button-press-event', on_widget_button_press_event) | 130 | self._status_button.connect('button-press-event', on_widget_button_press_event) |
1573 | @@ -216,7 +201,7 @@ | |||
1574 | 216 | print 'Finished' | 201 | print 'Finished' |
1575 | 217 | self._status_button.set_label(_('Finished')) | 202 | self._status_button.set_label(_('Finished')) |
1576 | 218 | name_str = self._timer.get_name() | 203 | name_str = self._timer.get_name() |
1578 | 219 | time_str = get_display_text_from_datetime(self._timer.get_end_time()) | 204 | time_str = utils.get_display_text_from_datetime(self._timer.get_end_time()) |
1579 | 220 | if len(name_str) > 0: | 205 | if len(name_str) > 0: |
1580 | 221 | # "<timer name>" finished at <time> | 206 | # "<timer name>" finished at <time> |
1581 | 222 | self._status_button.set_tooltip(_('"%s" finished at %s.\nClick to stop timer.') % (name_str, time_str)) | 207 | self._status_button.set_tooltip(_('"%s" finished at %s.\nClick to stop timer.') % (name_str, time_str)) |
1582 | @@ -228,7 +213,7 @@ | |||
1583 | 228 | current_state == core.Timer.STATE_FINISHED) | 213 | current_state == core.Timer.STATE_FINISHED) |
1584 | 229 | self._status_button.set_use_icon(current_state == core.Timer.STATE_IDLE) | 214 | self._status_button.set_use_icon(current_state == core.Timer.STATE_IDLE) |
1585 | 230 | self._status_button.set_show_remaining_time(current_state != core.Timer.STATE_IDLE and | 215 | self._status_button.set_show_remaining_time(current_state != core.Timer.STATE_IDLE and |
1587 | 231 | self._gconf.get_bool(TimerApplet._SHOW_REMAINING_TIME_KEY)) | 216 | self._gconf.get_bool(TimerApplet._SHOW_REMAINING_TIME_KEY)) |
1588 | 232 | 217 | ||
1589 | 233 | if current_state == core.Timer.STATE_PAUSED: | 218 | if current_state == core.Timer.STATE_PAUSED: |
1590 | 234 | self._status_button.set_pie_fill_color(0.4, 0.4, 0.4) | 219 | self._status_button.set_pie_fill_color(0.4, 0.4, 0.4) |
1591 | @@ -251,6 +236,7 @@ | |||
1592 | 251 | popup = self._applet.get_popup_component() | 236 | popup = self._applet.get_popup_component() |
1593 | 252 | 237 | ||
1594 | 253 | timer_state = self._timer.get_state() | 238 | timer_state = self._timer.get_state() |
1595 | 239 | has_next_timer = self._timer.get_next_timer() | ||
1596 | 254 | show_pause = (timer_state == core.Timer.STATE_RUNNING) | 240 | show_pause = (timer_state == core.Timer.STATE_RUNNING) |
1597 | 255 | show_continue = (timer_state == core.Timer.STATE_PAUSED) | 241 | show_continue = (timer_state == core.Timer.STATE_PAUSED) |
1598 | 256 | show_stop = (timer_state == core.Timer.STATE_RUNNING or | 242 | show_stop = (timer_state == core.Timer.STATE_RUNNING or |
1599 | @@ -259,11 +245,18 @@ | |||
1600 | 259 | show_restart = (timer_state == core.Timer.STATE_RUNNING or | 245 | show_restart = (timer_state == core.Timer.STATE_RUNNING or |
1601 | 260 | timer_state == core.Timer.STATE_PAUSED or | 246 | timer_state == core.Timer.STATE_PAUSED or |
1602 | 261 | timer_state == core.Timer.STATE_FINISHED) | 247 | timer_state == core.Timer.STATE_FINISHED) |
1603 | 248 | show_next_timer = ((timer_state == core.Timer.STATE_RUNNING or | ||
1604 | 249 | timer_state == core.Timer.STATE_PAUSED or | ||
1605 | 250 | timer_state == core.Timer.STATE_FINISHED) and | ||
1606 | 251 | # Only show this popup menu item if it has a | ||
1607 | 252 | # next_timer defined. Clever, huh? ;) | ||
1608 | 253 | has_next_timer) | ||
1609 | 262 | 254 | ||
1610 | 263 | show_presets_menu = (len(self._presets_store.get_model()) > 0) | 255 | show_presets_menu = (len(self._presets_store.get_model()) > 0) |
1611 | 264 | show_separator = ( | 256 | show_separator = ( |
1612 | 265 | show_presets_menu or | 257 | show_presets_menu or |
1613 | 266 | show_pause or | 258 | show_pause or |
1614 | 259 | show_next_timer or | ||
1615 | 267 | show_continue or | 260 | show_continue or |
1616 | 268 | show_stop or | 261 | show_stop or |
1617 | 269 | show_restart) | 262 | show_restart) |
1618 | @@ -273,6 +266,7 @@ | |||
1619 | 273 | popup.set_prop('/commands/ContinueTimer', 'hidden', to_hidden_str(show_continue)) | 266 | popup.set_prop('/commands/ContinueTimer', 'hidden', to_hidden_str(show_continue)) |
1620 | 274 | popup.set_prop('/commands/StopTimer', 'hidden', to_hidden_str(show_stop)) | 267 | popup.set_prop('/commands/StopTimer', 'hidden', to_hidden_str(show_stop)) |
1621 | 275 | popup.set_prop('/commands/RestartTimer', 'hidden', to_hidden_str(show_restart)) | 268 | popup.set_prop('/commands/RestartTimer', 'hidden', to_hidden_str(show_restart)) |
1622 | 269 | popup.set_prop('/commands/StartNextTimer', 'hidden', to_hidden_str(show_next_timer)) | ||
1623 | 276 | popup.set_prop(TimerApplet._PRESETS_PATH, 'hidden', to_hidden_str(show_presets_menu)) | 270 | popup.set_prop(TimerApplet._PRESETS_PATH, 'hidden', to_hidden_str(show_presets_menu)) |
1624 | 277 | popup.set_prop('/popups/popup/Separator1', 'hidden', to_hidden_str(show_separator)) | 271 | popup.set_prop('/popups/popup/Separator1', 'hidden', to_hidden_str(show_separator)) |
1625 | 278 | 272 | ||
1626 | @@ -337,9 +331,9 @@ | |||
1627 | 337 | # Try hiding the Start Timer dialog, just in case it's open. | 331 | # Try hiding the Start Timer dialog, just in case it's open. |
1628 | 338 | self._start_timer_dialog.hide() | 332 | self._start_timer_dialog.hide() |
1629 | 339 | row_iter = self._presets_store.get_model().get_iter(row_path) | 333 | row_iter = self._presets_store.get_model().get_iter(row_path) |
1633 | 340 | (name, hours, minutes, seconds, command) = self._presets_store.get_preset(row_iter) | 334 | (name, hours, minutes, seconds, command, next_timer, auto_start) = self._presets_store.get_preset(row_iter) |
1634 | 341 | logging.debug("In _on_presets_submenu_item, command: " + command) | 335 | self._start_timer_with_settings(name, hours, minutes, seconds, command, |
1635 | 342 | self._start_timer_with_settings(name, hours, minutes, seconds, command) | 336 | next_timer, auto_start) |
1636 | 343 | 337 | ||
1637 | 344 | ## GConf callbacks ## | 338 | ## GConf callbacks ## |
1638 | 345 | 339 | ||
1639 | @@ -380,7 +374,7 @@ | |||
1640 | 380 | hours, minutes, seconds = utils.seconds_to_hms(timer.get_remaining_time()) | 374 | hours, minutes, seconds = utils.seconds_to_hms(timer.get_remaining_time()) |
1641 | 381 | print 'Remaining time: %d, %d, %d' % (hours, minutes, seconds) | 375 | print 'Remaining time: %d, %d, %d' % (hours, minutes, seconds) |
1642 | 382 | name = self._timer.get_name() | 376 | name = self._timer.get_name() |
1644 | 383 | self._status_button.set_label(construct_time_str(self._timer.get_remaining_time(), | 377 | self._status_button.set_label(utils.construct_time_str(self._timer.get_remaining_time(), |
1645 | 384 | show_all=False)) | 378 | show_all=False)) |
1646 | 385 | 379 | ||
1647 | 386 | fraction_remaining = float(self._timer.get_remaining_time()) / self._timer.get_duration() | 380 | fraction_remaining = float(self._timer.get_remaining_time()) / self._timer.get_duration() |
1648 | @@ -395,6 +389,8 @@ | |||
1649 | 395 | self._status_button.set_tooltip(_('%02d:%02d:%02d') % (hours, minutes, seconds)) | 389 | self._status_button.set_tooltip(_('%02d:%02d:%02d') % (hours, minutes, seconds)) |
1650 | 396 | 390 | ||
1651 | 397 | def _on_timer_state_changed(self, timer, data=None): | 391 | def _on_timer_state_changed(self, timer, data=None): |
1652 | 392 | # TODO: | ||
1653 | 393 | # Refactor me! | ||
1654 | 398 | print 'State changed' | 394 | print 'State changed' |
1655 | 399 | new_state = timer.get_state() | 395 | new_state = timer.get_state() |
1656 | 400 | print ' new state: %d' % new_state | 396 | print ' new state: %d' % new_state |
1657 | @@ -406,9 +402,8 @@ | |||
1658 | 406 | if new_state == core.Timer.STATE_FINISHED: | 402 | if new_state == core.Timer.STATE_FINISHED: |
1659 | 407 | name = self._timer.get_name() | 403 | name = self._timer.get_name() |
1660 | 408 | command = self._timer.get_command() | 404 | command = self._timer.get_command() |
1661 | 409 | logging.debug("Command: " + command) | ||
1662 | 410 | end_time = self._timer.get_end_time() | 405 | end_time = self._timer.get_end_time() |
1664 | 411 | time_text = get_display_text_from_datetime(end_time) | 406 | time_text = utils.get_display_text_from_datetime(end_time) |
1665 | 412 | summary = None | 407 | summary = None |
1666 | 413 | message = None | 408 | message = None |
1667 | 414 | if len(name) > 0: | 409 | if len(name) > 0: |
1668 | @@ -438,23 +433,67 @@ | |||
1669 | 438 | minutes) % minutes | 433 | minutes) % minutes |
1670 | 439 | return message | 434 | return message |
1671 | 440 | 435 | ||
1683 | 441 | # Call popup notification | 436 | # TODO: |
1684 | 442 | self._call_notify(summary, message, reminder_message_func) | 437 | # FIXME: |
1685 | 443 | self._start_pulsing_button() | 438 | # Reason for using a Python thread: |
1686 | 444 | self._play_notification_sound() | 439 | # To do all the procedures after timer has ended. If I don't do |
1687 | 445 | # Run custom command. | 440 | # this then after the timer ended and it had an auto-start and next |
1688 | 446 | self._run_custom_command(command) | 441 | # timer defined, it would directly switch without any notification. |
1689 | 447 | 442 | # Trying time.sleep() doesn't work as expected; it correctly starts | |
1690 | 448 | if self._gconf.get_bool('play_beep'): | 443 | # the next timer, but it doesn't show the notification and the |
1691 | 449 | print 'Playing beep...' | 444 | # rest. |
1692 | 450 | gdk.beep() | 445 | class MyThread(threading.Thread): |
1693 | 451 | print 'Done playing beep.' | 446 | def __init__(self, timer_instance): |
1694 | 447 | threading.Thread.__init__(self) | ||
1695 | 448 | self.timer = timer_instance | ||
1696 | 449 | |||
1697 | 450 | def run(self): | ||
1698 | 451 | print "Starting thread..." | ||
1699 | 452 | print "Calling popup notification.", | ||
1700 | 453 | self.timer._call_notify(summary, message, reminder_message_func) | ||
1701 | 454 | print "Starting pulsing button.", | ||
1702 | 455 | self.timer._start_pulsing_button() | ||
1703 | 456 | print "Playing notification sound.", | ||
1704 | 457 | self.timer._play_notification_sound() | ||
1705 | 458 | print "Running custom command.", | ||
1706 | 459 | self.timer._run_custom_command(command) | ||
1707 | 460 | |||
1708 | 461 | if self.timer._gconf.get_bool('play_beep'): | ||
1709 | 462 | print 'Playing beep...' | ||
1710 | 463 | gdk.beep() | ||
1711 | 464 | print 'Done playing beep.' | ||
1712 | 465 | |||
1713 | 466 | print "Ending Thread..." | ||
1714 | 467 | thread = MyThread(self) | ||
1715 | 468 | thread.start() | ||
1716 | 469 | thread.join() | ||
1717 | 470 | |||
1718 | 471 | next_timer = self._timer.get_next_timer() | ||
1719 | 472 | auto_start = self._timer.get_auto_start() | ||
1720 | 473 | if auto_start and next_timer: | ||
1721 | 474 | # Start next timer | ||
1722 | 475 | self._stop_sound() | ||
1723 | 476 | self._call_notify(show=False) | ||
1724 | 477 | self._stop_pulsing_button() | ||
1725 | 478 | self._start_next_timer() | ||
1726 | 479 | elif not(auto_start) and next_timer: | ||
1727 | 480 | self._status_button.props.sensitive = False | ||
1728 | 481 | dialog_result = self._start_next_timer_dialog.get_response() | ||
1729 | 482 | self._status_button.props.sensitive = True | ||
1730 | 483 | if dialog_result: | ||
1731 | 484 | # Start next timer | ||
1732 | 485 | self._stop_sound() | ||
1733 | 486 | self._call_notify(show=False) | ||
1734 | 487 | self._stop_pulsing_button() | ||
1735 | 488 | self._start_next_timer() | ||
1736 | 452 | else: | 489 | else: |
1737 | 453 | self._stop_sound() | 490 | self._stop_sound() |
1738 | 454 | self._call_notify(show=False) | 491 | self._call_notify(show=False) |
1739 | 455 | self._stop_pulsing_button() | 492 | self._stop_pulsing_button() |
1740 | 456 | 493 | ||
1741 | 494 | print "Updating status button..." | ||
1742 | 457 | self._update_status_button() | 495 | self._update_status_button() |
1743 | 496 | print "Updating popup menu..." | ||
1744 | 458 | self._update_popup_menu() | 497 | self._update_popup_menu() |
1745 | 459 | 498 | ||
1746 | 460 | ## StatusButton callbacks ## | 499 | ## StatusButton callbacks ## |
1747 | @@ -484,37 +523,61 @@ | |||
1748 | 484 | ## StartTimerDialog callbacks ## | 523 | ## StartTimerDialog callbacks ## |
1749 | 485 | 524 | ||
1750 | 486 | def _on_start_dialog_clicked_start(self, sender, data=None): | 525 | def _on_start_dialog_clicked_start(self, sender, data=None): |
1753 | 487 | (name, hours, minutes, seconds, command) = self._start_timer_dialog.get_name_and_duration() | 526 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ |
1754 | 488 | self._start_timer_with_settings(name, hours, minutes, seconds, command) | 527 | self._start_timer_dialog.get_control_data() |
1755 | 528 | self._start_timer_with_settings(name, hours, minutes, seconds, command, | ||
1756 | 529 | next_timer, auto_start) | ||
1757 | 489 | 530 | ||
1758 | 490 | def _on_start_dialog_clicked_manage_presets(self, sender, data=None): | 531 | def _on_start_dialog_clicked_manage_presets(self, sender, data=None): |
1759 | 491 | self._manage_presets_dialog.show() | 532 | self._manage_presets_dialog.show() |
1760 | 492 | 533 | ||
1761 | 493 | def _on_start_dialog_clicked_save(self, sender, name, | 534 | def _on_start_dialog_clicked_save(self, sender, name, |
1765 | 494 | hours, minutes, seconds, command, data=None): | 535 | hours, minutes, seconds, command, |
1766 | 495 | self._presets_store.add_preset(name, hours, minutes, seconds, command) | 536 | next_timer, auto_start, data=None): |
1767 | 496 | 537 | self._presets_store.add_preset(name, hours, minutes, seconds, command, | |
1768 | 538 | next_timer, auto_start) | ||
1769 | 539 | |||
1770 | 497 | def _on_start_dialog_clicked_preset(self, sender, row_path, data=None): | 540 | def _on_start_dialog_clicked_preset(self, sender, row_path, data=None): |
1771 | 498 | row_iter = self._presets_store.get_model().get_iter(row_path) | 541 | row_iter = self._presets_store.get_model().get_iter(row_path) |
1773 | 499 | (name, hours, minutes, seconds, command) = self._presets_store.get_preset(row_iter) | 542 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ |
1774 | 543 | self._presets_store.get_preset(row_iter) | ||
1775 | 500 | self._start_timer_dialog.set_name_and_duration(name, hours, minutes, | 544 | self._start_timer_dialog.set_name_and_duration(name, hours, minutes, |
1777 | 501 | seconds, command) | 545 | seconds, command, |
1778 | 546 | next_timer, auto_start) | ||
1779 | 502 | 547 | ||
1780 | 503 | ## Private methods ## | 548 | ## Private methods ## |
1781 | 504 | 549 | ||
1782 | 505 | def _start_timer_with_settings(self, name, hours, minutes, seconds, | 550 | def _start_timer_with_settings(self, name, hours, minutes, seconds, |
1784 | 506 | command): | 551 | command, next_timer, auto_start): |
1785 | 552 | print "Resetting timer" | ||
1786 | 507 | if self._timer.get_state() != core.Timer.STATE_IDLE: | 553 | if self._timer.get_state() != core.Timer.STATE_IDLE: |
1787 | 508 | self._timer.reset() | 554 | self._timer.reset() |
1788 | 509 | self._timer.set_duration(utils.hms_to_seconds(hours, minutes, seconds)) | 555 | self._timer.set_duration(utils.hms_to_seconds(hours, minutes, seconds)) |
1789 | 510 | self._timer.set_name(name) | 556 | self._timer.set_name(name) |
1790 | 511 | self._timer.set_command(command) | 557 | self._timer.set_command(command) |
1791 | 558 | self._timer.set_next_timer(next_timer) | ||
1792 | 559 | self._timer.set_auto_start(auto_start) | ||
1793 | 512 | self._timer.start() | 560 | self._timer.start() |
1794 | 513 | 561 | ||
1795 | 514 | def _restart_timer(self): | 562 | def _restart_timer(self): |
1796 | 515 | self._timer.reset() | 563 | self._timer.reset() |
1797 | 516 | self._timer.start() | 564 | self._timer.start() |
1799 | 517 | 565 | ||
1800 | 566 | def _start_next_timer(self): | ||
1801 | 567 | """Start next timer, if defined.""" | ||
1802 | 568 | next_timer = self._timer.get_next_timer() | ||
1803 | 569 | for row in self._presets_store.get_model(): | ||
1804 | 570 | #print dir(row) | ||
1805 | 571 | if str(row[0]) == next_timer: | ||
1806 | 572 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ | ||
1807 | 573 | self._presets_store.get_preset(row.iter) | ||
1808 | 574 | break | ||
1809 | 575 | print "Starting timer with settings: ", | ||
1810 | 576 | print (name, hours, minutes, seconds, command, next_timer, auto_start) | ||
1811 | 577 | self._start_timer_with_settings(name, hours, minutes, seconds, command, | ||
1812 | 578 | next_timer, auto_start) | ||
1813 | 579 | |||
1814 | 580 | |||
1815 | 518 | def _play_notification_sound(self): | 581 | def _play_notification_sound(self): |
1816 | 519 | if not self._gconf.get_bool(TimerApplet._PLAY_SOUND_KEY): | 582 | if not self._gconf.get_bool(TimerApplet._PLAY_SOUND_KEY): |
1817 | 520 | return | 583 | return |
1818 | @@ -539,8 +602,11 @@ | |||
1819 | 539 | 602 | ||
1820 | 540 | def _run_custom_command(self, command): | 603 | def _run_custom_command(self, command): |
1821 | 541 | if command: | 604 | if command: |
1824 | 542 | logging.debug("Running custom command: " + command) | 605 | print "Running custom command: " + command |
1825 | 543 | subprocess.call(shlex.split(command)) | 606 | try: |
1826 | 607 | subprocess.call(shlex.split(command)) | ||
1827 | 608 | except OSError: | ||
1828 | 609 | print "... failed. Command not found." | ||
1829 | 544 | 610 | ||
1830 | 545 | def _stop_sound(self): | 611 | def _stop_sound(self): |
1831 | 546 | self._gst_playbin.set_state(gst.STATE_NULL) | 612 | self._gst_playbin.set_state(gst.STATE_NULL) |
1832 | @@ -548,7 +614,7 @@ | |||
1833 | 548 | def _start_pulsing_button(self): | 614 | def _start_pulsing_button(self): |
1834 | 549 | if self._gconf.get_bool(TimerApplet._SHOW_PULSING_ICON_KEY): | 615 | if self._gconf.get_bool(TimerApplet._SHOW_PULSING_ICON_KEY): |
1835 | 550 | self._status_button.start_pulsing() | 616 | self._status_button.start_pulsing() |
1837 | 551 | _ | 617 | |
1838 | 552 | def _stop_pulsing_button(self): | 618 | def _stop_pulsing_button(self): |
1839 | 553 | self._status_button.stop_pulsing() | 619 | self._status_button.stop_pulsing() |
1840 | 554 | 620 | ||
1841 | 555 | 621 | ||
1842 | === modified file 'timer-applet/src/timerapplet/core/PresetsStore.py' | |||
1843 | --- timer-applet/src/timerapplet/core/PresetsStore.py 2010-07-15 02:27:57 +0000 | |||
1844 | +++ timer-applet/src/timerapplet/core/PresetsStore.py 2010-09-15 19:27:52 +0000 | |||
1845 | @@ -1,5 +1,5 @@ | |||
1846 | 1 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
1847 | 1 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> | 2 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> |
1848 | 2 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
1849 | 3 | # | 3 | # |
1850 | 4 | # This program is free software; you can redistribute it and/or modify | 4 | # This program is free software; you can redistribute it and/or modify |
1851 | 5 | # it under the terms of the GNU General Public License as published by | 5 | # it under the terms of the GNU General Public License as published by |
1852 | @@ -26,6 +26,10 @@ | |||
1853 | 26 | import gtk | 26 | import gtk |
1854 | 27 | import timerapplet.utils as utils | 27 | import timerapplet.utils as utils |
1855 | 28 | 28 | ||
1856 | 29 | from timerapplet.utils import (serialize_bool, | ||
1857 | 30 | deserialize_bool, | ||
1858 | 31 | seconds_to_hms, | ||
1859 | 32 | hms_to_seconds) | ||
1860 | 29 | from timerapplet.defs import VERSION | 33 | from timerapplet.defs import VERSION |
1861 | 30 | 34 | ||
1862 | 31 | class PersistentStore(gtk.ListStore): | 35 | class PersistentStore(gtk.ListStore): |
1863 | @@ -37,7 +41,13 @@ | |||
1864 | 37 | self.connect('row-changed', lambda model, row_path, row_iter: save_func(self)) | 41 | self.connect('row-changed', lambda model, row_path, row_iter: save_func(self)) |
1865 | 38 | 42 | ||
1866 | 39 | class PresetsStore(gobject.GObject): | 43 | class PresetsStore(gobject.GObject): |
1868 | 40 | (_NAME_COL, _HOURS_COL, _MINUTES_COL, _SECONDS_COL, _COM_COL) = xrange(5) | 44 | (_NAME_COL, |
1869 | 45 | _HOURS_COL, | ||
1870 | 46 | _MINUTES_COL, | ||
1871 | 47 | _SECONDS_COL, | ||
1872 | 48 | _COM_COL, | ||
1873 | 49 | _NEXT_COL, | ||
1874 | 50 | _AUTO_START_COL) = xrange(7) | ||
1875 | 41 | 51 | ||
1876 | 42 | def __init__(self, filename): | 52 | def __init__(self, filename): |
1877 | 43 | object.__init__(self) | 53 | object.__init__(self) |
1878 | @@ -47,7 +57,9 @@ | |||
1879 | 47 | gobject.TYPE_INT, | 57 | gobject.TYPE_INT, |
1880 | 48 | gobject.TYPE_INT, | 58 | gobject.TYPE_INT, |
1881 | 49 | gobject.TYPE_INT, | 59 | gobject.TYPE_INT, |
1883 | 50 | gobject.TYPE_STRING | 60 | gobject.TYPE_STRING, |
1884 | 61 | gobject.TYPE_STRING, | ||
1885 | 62 | gobject.TYPE_BOOLEAN, | ||
1886 | 51 | ) | 63 | ) |
1887 | 52 | 64 | ||
1888 | 53 | def get_model(self): | 65 | def get_model(self): |
1889 | @@ -64,18 +76,27 @@ | |||
1890 | 64 | PresetsStore._HOURS_COL, | 76 | PresetsStore._HOURS_COL, |
1891 | 65 | PresetsStore._MINUTES_COL, | 77 | PresetsStore._MINUTES_COL, |
1892 | 66 | PresetsStore._SECONDS_COL, | 78 | PresetsStore._SECONDS_COL, |
1894 | 67 | PresetsStore._COM_COL) | 79 | PresetsStore._COM_COL, |
1895 | 80 | PresetsStore._NEXT_COL, | ||
1896 | 81 | PresetsStore._AUTO_START_COL, | ||
1897 | 82 | ) | ||
1898 | 68 | 83 | ||
1901 | 69 | def add_preset(self, name, hours, minutes, seconds, command): | 84 | def add_preset(self, name, hours, minutes, seconds, command, next_timer, |
1902 | 70 | self._model.append((name, hours, minutes, seconds, command)) | 85 | auto_start): |
1903 | 86 | self._model.append((name, hours, minutes, seconds, command, next_timer, | ||
1904 | 87 | auto_start)) | ||
1905 | 71 | 88 | ||
1907 | 72 | def modify_preset(self, row_iter, name, hours, minutes, seconds, command): | 89 | def modify_preset(self, row_iter, name, hours, minutes, seconds, command, |
1908 | 90 | next_timer, auto_start): | ||
1909 | 73 | self._model.set(row_iter, | 91 | self._model.set(row_iter, |
1910 | 74 | PresetsStore._NAME_COL, name, | 92 | PresetsStore._NAME_COL, name, |
1911 | 75 | PresetsStore._HOURS_COL, hours, | 93 | PresetsStore._HOURS_COL, hours, |
1912 | 76 | PresetsStore._MINUTES_COL, minutes, | 94 | PresetsStore._MINUTES_COL, minutes, |
1913 | 77 | PresetsStore._SECONDS_COL, seconds, | 95 | PresetsStore._SECONDS_COL, seconds, |
1915 | 78 | PresetsStore._COM_COL, command) | 96 | PresetsStore._COM_COL, command, |
1916 | 97 | PresetsStore._NEXT_COL, next_timer, | ||
1917 | 98 | PresetsStore._AUTO_START_COL, auto_start | ||
1918 | 99 | ) | ||
1919 | 79 | 100 | ||
1920 | 80 | def remove_preset(self, row_iter): | 101 | def remove_preset(self, row_iter): |
1921 | 81 | self._model.remove(row_iter) | 102 | self._model.remove(row_iter) |
1922 | @@ -97,9 +118,12 @@ | |||
1923 | 97 | 118 | ||
1924 | 98 | for node in root: | 119 | for node in root: |
1925 | 99 | name = node.get('name') | 120 | name = node.get('name') |
1927 | 100 | (hours, minutes, seconds) = utils.seconds_to_hms(int(node.get('duration'))) | 121 | (hours, minutes, seconds) = seconds_to_hms(int(node.get('duration'))) |
1928 | 101 | command = node.get('command') | 122 | command = node.get('command') |
1930 | 102 | model.append((name, hours, minutes, seconds, command)) | 123 | next_timer = node.get('next_timer') |
1931 | 124 | auto_start = node.get('auto_start') | ||
1932 | 125 | model.append((name, hours, minutes, seconds, command, next_timer, | ||
1933 | 126 | deserialize_bool(auto_start))) | ||
1934 | 103 | _load_presets = staticmethod(_load_presets) | 127 | _load_presets = staticmethod(_load_presets) |
1935 | 104 | 128 | ||
1936 | 105 | def _save_presets(model, file_path): | 129 | def _save_presets(model, file_path): |
1937 | @@ -107,18 +131,22 @@ | |||
1938 | 107 | root.set('version', VERSION) | 131 | root.set('version', VERSION) |
1939 | 108 | 132 | ||
1940 | 109 | def add_xml_node(model, path, row_iter): | 133 | def add_xml_node(model, path, row_iter): |
1942 | 110 | (name, hours, minutes, seconds, command) = \ | 134 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ |
1943 | 111 | model.get(row_iter, | 135 | model.get(row_iter, |
1944 | 112 | PresetsStore._NAME_COL, | 136 | PresetsStore._NAME_COL, |
1945 | 113 | PresetsStore._HOURS_COL, | 137 | PresetsStore._HOURS_COL, |
1946 | 114 | PresetsStore._MINUTES_COL, | 138 | PresetsStore._MINUTES_COL, |
1947 | 115 | PresetsStore._SECONDS_COL, | 139 | PresetsStore._SECONDS_COL, |
1949 | 116 | PresetsStore._COM_COL | 140 | PresetsStore._COM_COL, |
1950 | 141 | PresetsStore._NEXT_COL, | ||
1951 | 142 | PresetsStore._AUTO_START_COL | ||
1952 | 117 | ) | 143 | ) |
1953 | 118 | node = et.SubElement(root, 'preset') | 144 | node = et.SubElement(root, 'preset') |
1954 | 119 | node.set('name', name) | 145 | node.set('name', name) |
1956 | 120 | node.set('duration', str(utils.hms_to_seconds(hours, minutes, seconds))) | 146 | node.set('duration', str(hms_to_seconds(hours, minutes, seconds))) |
1957 | 121 | node.set('command', command or '') | 147 | node.set('command', command or '') |
1958 | 148 | node.set('next_timer', next_timer or '') | ||
1959 | 149 | node.set('auto_start', serialize_bool(auto_start)) | ||
1960 | 122 | 150 | ||
1961 | 123 | model.foreach(add_xml_node) | 151 | model.foreach(add_xml_node) |
1962 | 124 | tree = et.ElementTree(root) | 152 | tree = et.ElementTree(root) |
1963 | 125 | 153 | ||
1964 | === modified file 'timer-applet/src/timerapplet/core/Timer.py' | |||
1965 | --- timer-applet/src/timerapplet/core/Timer.py 2010-07-15 02:27:57 +0000 | |||
1966 | +++ timer-applet/src/timerapplet/core/Timer.py 2010-09-15 19:27:52 +0000 | |||
1967 | @@ -1,5 +1,5 @@ | |||
1968 | 1 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
1969 | 1 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> | 2 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> |
1970 | 2 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
1971 | 3 | # | 3 | # |
1972 | 4 | # This program is free software; you can redistribute it and/or modify | 4 | # This program is free software; you can redistribute it and/or modify |
1973 | 5 | # it under the terms of the GNU General Public License as published by | 5 | # it under the terms of the GNU General Public License as published by |
1974 | @@ -35,6 +35,8 @@ | |||
1975 | 35 | self._end_time = 0 | 35 | self._end_time = 0 |
1976 | 36 | self._name = '' | 36 | self._name = '' |
1977 | 37 | self._command = '' | 37 | self._command = '' |
1978 | 38 | self._next_timer = '' | ||
1979 | 39 | self._auto_start = False | ||
1980 | 38 | 40 | ||
1981 | 39 | def set_duration(self, seconds): | 41 | def set_duration(self, seconds): |
1982 | 40 | """Set the duration of the timer in seconds.""" | 42 | """Set the duration of the timer in seconds.""" |
1983 | @@ -55,10 +57,31 @@ | |||
1984 | 55 | return self._name | 57 | return self._name |
1985 | 56 | 58 | ||
1986 | 57 | def set_command(self, command): | 59 | def set_command(self, command): |
1987 | 60 | """Set the command to run of the timer.""" | ||
1988 | 61 | assert self._state == Timer.STATE_IDLE | ||
1989 | 58 | self._command = command | 62 | self._command = command |
1990 | 59 | 63 | ||
1991 | 60 | def get_command(self): | 64 | def get_command(self): |
1992 | 65 | """Return the name of the command of the timer.""" | ||
1993 | 61 | return self._command | 66 | return self._command |
1994 | 67 | |||
1995 | 68 | def set_next_timer(self, timer): | ||
1996 | 69 | """Set the next timeer of the timer.""" | ||
1997 | 70 | assert self._state == Timer.STATE_IDLE | ||
1998 | 71 | self._next_timer = timer | ||
1999 | 72 | |||
2000 | 73 | def get_next_timer(self): | ||
2001 | 74 | """Get the next timer of the timer.""" | ||
2002 | 75 | return self._next_timer | ||
2003 | 76 | |||
2004 | 77 | def set_auto_start(self, auto_start): | ||
2005 | 78 | """Set the auto-start value of the timer.""" | ||
2006 | 79 | assert self._state == Timer.STATE_IDLE | ||
2007 | 80 | self._auto_start = auto_start | ||
2008 | 81 | |||
2009 | 82 | def get_auto_start(self): | ||
2010 | 83 | """Get the auto-start value.""" | ||
2011 | 84 | return self._auto_start | ||
2012 | 62 | 85 | ||
2013 | 63 | def start(self): | 86 | def start(self): |
2014 | 64 | """Start or resume the timer. | 87 | """Start or resume the timer. |
2015 | @@ -68,7 +91,7 @@ | |||
2016 | 68 | """ | 91 | """ |
2017 | 69 | assert self._state == Timer.STATE_IDLE or self._state == Timer.STATE_PAUSED | 92 | assert self._state == Timer.STATE_IDLE or self._state == Timer.STATE_PAUSED |
2018 | 70 | self._timer_transition_to_state(Timer.STATE_RUNNING) | 93 | self._timer_transition_to_state(Timer.STATE_RUNNING) |
2020 | 71 | 94 | ||
2021 | 72 | def stop(self): | 95 | def stop(self): |
2022 | 73 | """Pause the timer. | 96 | """Pause the timer. |
2023 | 74 | 97 | ||
2024 | 75 | 98 | ||
2025 | === modified file 'timer-applet/src/timerapplet/ui/AddEditPresetDialog.py' | |||
2026 | --- timer-applet/src/timerapplet/ui/AddEditPresetDialog.py 2010-07-14 10:53:59 +0000 | |||
2027 | +++ timer-applet/src/timerapplet/ui/AddEditPresetDialog.py 2010-09-15 19:27:52 +0000 | |||
2028 | @@ -20,7 +20,8 @@ | |||
2029 | 20 | 20 | ||
2030 | 21 | class AddEditPresetDialog(object): | 21 | class AddEditPresetDialog(object): |
2031 | 22 | def __init__(self, glade_file_name, title, name_validator_func, | 22 | def __init__(self, glade_file_name, title, name_validator_func, |
2033 | 23 | name='', hours=0, minutes=0, seconds=0, command=''): | 23 | name='', hours=0, minutes=0, seconds=0, command='', |
2034 | 24 | next_timer='', auto_start=False): | ||
2035 | 24 | self._valid_name_func = name_validator_func | 25 | self._valid_name_func = name_validator_func |
2036 | 25 | 26 | ||
2037 | 26 | glade_widgets = glade.XML(glade_file_name, 'add_edit_preset_dialog') | 27 | glade_widgets = glade.XML(glade_file_name, 'add_edit_preset_dialog') |
2038 | @@ -31,6 +32,8 @@ | |||
2039 | 31 | duration_chooser_container = glade_widgets.get_widget('duration_chooser_container') | 32 | duration_chooser_container = glade_widgets.get_widget('duration_chooser_container') |
2040 | 32 | self._duration_chooser = DurationChooser(gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)) | 33 | self._duration_chooser = DurationChooser(gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)) |
2041 | 33 | self._command_entry = glade_widgets.get_widget('command_entry') | 34 | self._command_entry = glade_widgets.get_widget('command_entry') |
2042 | 35 | self._next_timer_entry = glade_widgets.get_widget('next_timer_entry') | ||
2043 | 36 | self._auto_start_check = glade_widgets.get_widget('auto_start_check') | ||
2044 | 34 | 37 | ||
2045 | 35 | duration_chooser_container.pack_start(self._duration_chooser) | 38 | duration_chooser_container.pack_start(self._duration_chooser) |
2046 | 36 | 39 | ||
2047 | @@ -39,6 +42,8 @@ | |||
2048 | 39 | self._name_entry.set_text(name) | 42 | self._name_entry.set_text(name) |
2049 | 40 | self._command_entry.set_text(command) | 43 | self._command_entry.set_text(command) |
2050 | 41 | self._duration_chooser.set_duration(hours, minutes, seconds) | 44 | self._duration_chooser.set_duration(hours, minutes, seconds) |
2051 | 45 | self._next_timer_entry.set_text(next_timer) | ||
2052 | 46 | self._auto_start_check.set_active(auto_start) | ||
2053 | 42 | 47 | ||
2054 | 43 | self._name_entry.connect('changed', lambda entry: self._check_for_valid_save_preset_input()) | 48 | self._name_entry.connect('changed', lambda entry: self._check_for_valid_save_preset_input()) |
2055 | 44 | self._duration_chooser.connect('duration-changed', | 49 | self._duration_chooser.connect('duration-changed', |
2056 | @@ -53,6 +58,8 @@ | |||
2057 | 53 | self._ok_button.props.sensitive = (self._non_zero_duration() and | 58 | self._ok_button.props.sensitive = (self._non_zero_duration() and |
2058 | 54 | self._valid_name_func(self._name_entry.get_text())) | 59 | self._valid_name_func(self._name_entry.get_text())) |
2059 | 55 | 60 | ||
2060 | 61 | ## Callback for saving ## | ||
2061 | 62 | |||
2062 | 56 | def get_preset(self): | 63 | def get_preset(self): |
2063 | 57 | self._check_for_valid_save_preset_input() | 64 | self._check_for_valid_save_preset_input() |
2064 | 58 | result = self._dialog.run() | 65 | result = self._dialog.run() |
2065 | @@ -60,6 +67,9 @@ | |||
2066 | 60 | if result == gtk.RESPONSE_OK: | 67 | if result == gtk.RESPONSE_OK: |
2067 | 61 | (hours, minutes, seconds) = self._duration_chooser.get_duration() | 68 | (hours, minutes, seconds) = self._duration_chooser.get_duration() |
2068 | 62 | cmd = self._command_entry.get_text() | 69 | cmd = self._command_entry.get_text() |
2070 | 63 | return (self._name_entry.get_text(), hours, minutes, seconds, cmd) | 70 | next_timer = self._next_timer_entry.get_text() |
2071 | 71 | auto_start = self._auto_start_check.get_active() | ||
2072 | 72 | return (self._name_entry.get_text(), hours, minutes, seconds, cmd, | ||
2073 | 73 | next_timer, auto_start) | ||
2074 | 64 | else: | 74 | else: |
2075 | 65 | return None | 75 | return None |
2076 | 66 | 76 | ||
2077 | === modified file 'timer-applet/src/timerapplet/ui/Makefile.am' | |||
2078 | --- timer-applet/src/timerapplet/ui/Makefile.am 2007-04-15 05:04:58 +0000 | |||
2079 | +++ timer-applet/src/timerapplet/ui/Makefile.am 2010-09-15 19:27:52 +0000 | |||
2080 | @@ -11,4 +11,5 @@ | |||
2081 | 11 | PulseButton.py \ | 11 | PulseButton.py \ |
2082 | 12 | ScrollableButtonList.py \ | 12 | ScrollableButtonList.py \ |
2083 | 13 | StartTimerDialog.py \ | 13 | StartTimerDialog.py \ |
2084 | 14 | StartNextTimerDialog.py \ | ||
2085 | 14 | StatusButton.py | 15 | StatusButton.py |
2086 | 15 | 16 | ||
2087 | === added file 'timer-applet/src/timerapplet/ui/StartNextTimerDialog.py' | |||
2088 | --- timer-applet/src/timerapplet/ui/StartNextTimerDialog.py 1970-01-01 00:00:00 +0000 | |||
2089 | +++ timer-applet/src/timerapplet/ui/StartNextTimerDialog.py 2010-09-15 19:27:52 +0000 | |||
2090 | @@ -0,0 +1,66 @@ | |||
2091 | 1 | # -*- mode: python; coding: utf-8; -*- | ||
2092 | 2 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> | ||
2093 | 3 | # This program is free software; you can redistribute it and/or modify | ||
2094 | 4 | # it under the terms of the GNU General Public License as published by | ||
2095 | 5 | # the Free Software Foundation; either version 2 of the License, or | ||
2096 | 6 | # (at your option) any later version. | ||
2097 | 7 | # | ||
2098 | 8 | # This program is distributed in the hope that it will be useful, | ||
2099 | 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
2100 | 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
2101 | 11 | # GNU General Public License for more details. | ||
2102 | 12 | # | ||
2103 | 13 | # You should have received a copy of the GNU General Public License | ||
2104 | 14 | # along with this program; if not, write to the Free Software | ||
2105 | 15 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
2106 | 16 | |||
2107 | 17 | """ | ||
2108 | 18 | The Start Next Timer dialog | ||
2109 | 19 | |||
2110 | 20 | When a timer ended and the auto_start option was disabled this dialog shows up. | ||
2111 | 21 | """ | ||
2112 | 22 | |||
2113 | 23 | from gettext import gettext as _ | ||
2114 | 24 | import gtk | ||
2115 | 25 | |||
2116 | 26 | class StartNextTimerDialog(object): | ||
2117 | 27 | def __init__(self, glade_file_name, header_text, body_text): | ||
2118 | 28 | # TODO: Include next_timer in body_text | ||
2119 | 29 | self._dialog = gtk.Dialog( | ||
2120 | 30 | _("Start Next Timer"), | ||
2121 | 31 | None, | ||
2122 | 32 | gtk.DIALOG_DESTROY_WITH_PARENT, | ||
2123 | 33 | (_("_Don't start next timer"), gtk.RESPONSE_CLOSE, | ||
2124 | 34 | _("_Start next timer"), gtk.RESPONSE_YES)) | ||
2125 | 35 | self._dialog.props.border_width = 6 | ||
2126 | 36 | self._dialog.props.has_separator = False | ||
2127 | 37 | self._dialog.props.resizable = False | ||
2128 | 38 | self._dialog.vbox.props.spacing = 12 | ||
2129 | 39 | self._dialog.set_default_response(gtk.RESPONSE_YES) | ||
2130 | 40 | |||
2131 | 41 | hbox = gtk.HBox(False, 0) | ||
2132 | 42 | hbox.props.spacing = 12 | ||
2133 | 43 | hbox.props.border_width = 6 | ||
2134 | 44 | |||
2135 | 45 | image = gtk.image_new_from_stock(gtk.STOCK_DIALOG_QUESTION, gtk.ICON_SIZE_DIALOG) | ||
2136 | 46 | image.props.yalign = 0.0 | ||
2137 | 47 | |||
2138 | 48 | label = gtk.Label('<span weight="bold" size="larger">%s</span>\n\n%s' % (header_text, body_text)) | ||
2139 | 49 | label.props.use_markup = True | ||
2140 | 50 | label.props.wrap = True | ||
2141 | 51 | label.props.yalign = 0.0 | ||
2142 | 52 | |||
2143 | 53 | hbox.pack_start(image, False, False, 0) | ||
2144 | 54 | hbox.pack_start(label, False, False, 0) | ||
2145 | 55 | self._dialog.vbox.pack_start(hbox, False, False, 0) | ||
2146 | 56 | |||
2147 | 57 | hbox.show_all() | ||
2148 | 58 | |||
2149 | 59 | def get_response(self): | ||
2150 | 60 | dialog_result = self._dialog.run() | ||
2151 | 61 | self._dialog.hide() | ||
2152 | 62 | if dialog_result == gtk.RESPONSE_YES: | ||
2153 | 63 | return True | ||
2154 | 64 | else: | ||
2155 | 65 | return False | ||
2156 | 66 | |||
2157 | 0 | 67 | ||
2158 | === modified file 'timer-applet/src/timerapplet/ui/StartTimerDialog.py' | |||
2159 | --- timer-applet/src/timerapplet/ui/StartTimerDialog.py 2010-07-18 01:45:29 +0000 | |||
2160 | +++ timer-applet/src/timerapplet/ui/StartTimerDialog.py 2010-09-15 19:27:52 +0000 | |||
2161 | @@ -1,5 +1,5 @@ | |||
2162 | 1 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
2163 | 1 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> | 2 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> |
2164 | 2 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
2165 | 3 | # | 3 | # |
2166 | 4 | # This program is free software; you can redistribute it and/or modify | 4 | # This program is free software; you can redistribute it and/or modify |
2167 | 5 | # it under the terms of the GNU General Public License as published by | 5 | # it under the terms of the GNU General Public License as published by |
2168 | @@ -24,7 +24,6 @@ | |||
2169 | 24 | from shlex import split as shell_tokenize | 24 | from shlex import split as shell_tokenize |
2170 | 25 | from subprocess import check_call, CalledProcessError | 25 | from subprocess import check_call, CalledProcessError |
2171 | 26 | 26 | ||
2172 | 27 | from timerapplet.logger import logging as log | ||
2173 | 28 | from DurationChooser import DurationChooser | 27 | from DurationChooser import DurationChooser |
2174 | 29 | from ScrollableButtonList import ScrollableButtonList | 28 | from ScrollableButtonList import ScrollableButtonList |
2175 | 30 | 29 | ||
2176 | @@ -42,7 +41,9 @@ | |||
2177 | 42 | gobject.TYPE_INT, | 41 | gobject.TYPE_INT, |
2178 | 43 | gobject.TYPE_INT, | 42 | gobject.TYPE_INT, |
2179 | 44 | gobject.TYPE_INT, | 43 | gobject.TYPE_INT, |
2181 | 45 | gobject.TYPE_STRING)), | 44 | gobject.TYPE_STRING, |
2182 | 45 | gobject.TYPE_STRING, | ||
2183 | 46 | gobject.TYPE_BOOLEAN)), | ||
2184 | 46 | 'clicked-preset': | 47 | 'clicked-preset': |
2185 | 47 | (gobject.SIGNAL_RUN_LAST, | 48 | (gobject.SIGNAL_RUN_LAST, |
2186 | 48 | gobject.TYPE_NONE, | 49 | gobject.TYPE_NONE, |
2187 | @@ -68,9 +69,16 @@ | |||
2188 | 68 | duration_chooser_container = glade_widgets.get_widget('duration_chooser_container') | 69 | duration_chooser_container = glade_widgets.get_widget('duration_chooser_container') |
2189 | 69 | presets_chooser_container = glade_widgets.get_widget('presets_chooser_container') | 70 | presets_chooser_container = glade_widgets.get_widget('presets_chooser_container') |
2190 | 70 | self._presets_section = glade_widgets.get_widget('presets_section') | 71 | self._presets_section = glade_widgets.get_widget('presets_section') |
2192 | 71 | # The TextEntry control for running a custom command | 72 | #: The TextEntry control for running a custom command |
2193 | 72 | self._command_entry = glade_widgets.get_widget('command_entry') | 73 | self._command_entry = glade_widgets.get_widget('command_entry') |
2194 | 74 | #: The "Invalid Command" label | ||
2195 | 73 | self._invalid_cmd_label = glade_widgets.get_widget('invalid_command_label') | 75 | self._invalid_cmd_label = glade_widgets.get_widget('invalid_command_label') |
2196 | 76 | #: The next timer combo box | ||
2197 | 77 | self._next_timer_combo = glade_widgets.get_widget('next_timer_combo_entry') | ||
2198 | 78 | self._next_timer_combo.set_model(self._presets_store) | ||
2199 | 79 | self._next_timer_combo.set_text_column(0) # The column to be shown | ||
2200 | 80 | #: The auto-start check button. | ||
2201 | 81 | self._auto_start_check = glade_widgets.get_widget('auto_start_check') | ||
2202 | 74 | 82 | ||
2203 | 75 | labels_size_group.add_widget(name_label) | 83 | labels_size_group.add_widget(name_label) |
2204 | 76 | self._dialog.set_default_response(gtk.RESPONSE_OK) | 84 | self._dialog.set_default_response(gtk.RESPONSE_OK) |
2205 | @@ -84,6 +92,8 @@ | |||
2206 | 84 | self._save_button.connect('clicked', self._on_save_button_clicked) | 92 | self._save_button.connect('clicked', self._on_save_button_clicked) |
2207 | 85 | # Check that executable is valid while inserting text | 93 | # Check that executable is valid while inserting text |
2208 | 86 | self._command_entry.connect('changed', self._check_is_valid_command) | 94 | self._command_entry.connect('changed', self._check_is_valid_command) |
2209 | 95 | self._next_timer_combo.child.connect("changed", | ||
2210 | 96 | self._on_next_timer_combo_entry_child_changed) | ||
2211 | 87 | glade_widgets.get_widget('manage_presets_button').connect('clicked', | 97 | glade_widgets.get_widget('manage_presets_button').connect('clicked', |
2212 | 88 | self._on_manage_presets_button_clicked) | 98 | self._on_manage_presets_button_clicked) |
2213 | 89 | self._presets_store.connect('row-deleted', | 99 | self._presets_store.connect('row-deleted', |
2214 | @@ -107,23 +117,25 @@ | |||
2215 | 107 | def hide(self): | 117 | def hide(self): |
2216 | 108 | self._dialog.hide() | 118 | self._dialog.hide() |
2217 | 109 | 119 | ||
2219 | 110 | def get_name_and_duration(self): | 120 | def get_control_data(self): |
2220 | 111 | """Return name and duration in a tuple. | 121 | """Return name and duration in a tuple. |
2221 | 112 | 122 | ||
2223 | 113 | The returned tuple is in this format: (name, hours, minutes, seconds) | 123 | The returned tuple is in this format: |
2224 | 124 | |||
2225 | 125 | (name, hours, minutes, seconds, next_timer, auto_start) | ||
2226 | 114 | 126 | ||
2227 | 115 | """ | 127 | """ |
2228 | 116 | return (self._name_entry.get_text().strip(),) + \ | 128 | return (self._name_entry.get_text().strip(),) + \ |
2231 | 117 | self._duration_chooser.get_duration() + \ | 129 | self._duration_chooser.get_duration() + \ |
2232 | 118 | (self._command_entry.get_text().strip(),) | 130 | (self._command_entry.get_text().strip(), |
2233 | 131 | self._next_timer_combo.child.get_text().strip(), | ||
2234 | 132 | self._auto_start_check.get_active()) | ||
2235 | 119 | 133 | ||
2236 | 120 | def set_name_and_duration(self, name, hours, minutes, seconds, *args): | 134 | def set_name_and_duration(self, name, hours, minutes, seconds, *args): |
2237 | 121 | self._name_entry.set_text(name) | 135 | self._name_entry.set_text(name) |
2243 | 122 | if args[0]: | 136 | self._command_entry.set_text(args[0]) |
2244 | 123 | self._command_entry.set_text(args[0]) | 137 | self._next_timer_combo.child.set_text(args[1]) |
2245 | 124 | else: | 138 | self._auto_start_check.set_active(args[2]) |
2241 | 125 | # Clear the Command Entry control after switching preset elements | ||
2242 | 126 | self._command_entry.set_text('') | ||
2246 | 127 | self._duration_chooser.set_duration(hours, minutes, seconds) | 139 | self._duration_chooser.set_duration(hours, minutes, seconds) |
2247 | 128 | 140 | ||
2248 | 129 | def _update_presets_list(self): | 141 | def _update_presets_list(self): |
2249 | @@ -182,6 +194,7 @@ | |||
2250 | 182 | def _check_for_valid_save_preset_input(self): | 194 | def _check_for_valid_save_preset_input(self): |
2251 | 183 | self._save_button.props.sensitive = (self._non_zero_duration() and | 195 | self._save_button.props.sensitive = (self._non_zero_duration() and |
2252 | 184 | self._valid_name_func(self._name_entry.get_text())) | 196 | self._valid_name_func(self._name_entry.get_text())) |
2253 | 197 | # TODO: Add validator for next_timer_combo | ||
2254 | 185 | 198 | ||
2255 | 186 | def _check_for_valid_start_timer_input(self): | 199 | def _check_for_valid_start_timer_input(self): |
2256 | 187 | self._ok_button.props.sensitive = self._non_zero_duration() | 200 | self._ok_button.props.sensitive = self._non_zero_duration() |
2257 | @@ -212,4 +225,26 @@ | |||
2258 | 212 | (hours, minutes, seconds) = self._duration_chooser.get_duration() | 225 | (hours, minutes, seconds) = self._duration_chooser.get_duration() |
2259 | 213 | name = self._name_entry.get_text() | 226 | name = self._name_entry.get_text() |
2260 | 214 | command = self._command_entry.get_text() | 227 | command = self._command_entry.get_text() |
2262 | 215 | self.emit('clicked-save', name, hours, minutes, seconds, command) | 228 | next_timer = self._next_timer_combo.child.get_text() |
2263 | 229 | auto_start = self._auto_start_check.get_active() | ||
2264 | 230 | self.emit('clicked-save', name, hours, minutes, seconds, command, | ||
2265 | 231 | next_timer, auto_start) | ||
2266 | 232 | |||
2267 | 233 | def _on_next_timer_combo_entry_child_changed(self, widget, data=None): | ||
2268 | 234 | """Validate selection of the Next Timer ComboBoxEntry.""" | ||
2269 | 235 | modelfilter = self._presets_store.filter_new() | ||
2270 | 236 | # Loop through all rows in ListStore | ||
2271 | 237 | # TODO: Using a generator may be more memory efficient in this case. | ||
2272 | 238 | for row in modelfilter: | ||
2273 | 239 | # Check that name of preset is the exact match of the the text in | ||
2274 | 240 | # the ComboBoxEntry | ||
2275 | 241 | if widget.get_text() == row[0]: | ||
2276 | 242 | # Yes, it matches! Make the auto-start checkbox sensitive | ||
2277 | 243 | # (activate it). | ||
2278 | 244 | self._auto_start_check.set_sensitive(True) | ||
2279 | 245 | break | ||
2280 | 246 | else: | ||
2281 | 247 | # If value of ComboBoxEntry is None then de-activate the | ||
2282 | 248 | # auto-start checkbox. | ||
2283 | 249 | self._auto_start_check.set_sensitive(False) | ||
2284 | 250 | |||
2285 | 216 | 251 | ||
2286 | === modified file 'timer-applet/src/timerapplet/ui/__init__.py' | |||
2287 | --- timer-applet/src/timerapplet/ui/__init__.py 2008-12-01 09:52:01 +0000 | |||
2288 | +++ timer-applet/src/timerapplet/ui/__init__.py 2010-09-15 19:27:52 +0000 | |||
2289 | @@ -24,4 +24,5 @@ | |||
2290 | 24 | from PulseButton import PulseButton | 24 | from PulseButton import PulseButton |
2291 | 25 | from ScrollableButtonList import ScrollableButtonList | 25 | from ScrollableButtonList import ScrollableButtonList |
2292 | 26 | from StartTimerDialog import StartTimerDialog | 26 | from StartTimerDialog import StartTimerDialog |
2293 | 27 | from StartNextTimerDialog import StartNextTimerDialog | ||
2294 | 27 | from StatusButton import StatusButton | 28 | from StatusButton import StatusButton |
2295 | 28 | 29 | ||
2296 | === modified file 'timer-applet/src/timerapplet/utils.py' | |||
2297 | --- timer-applet/src/timerapplet/utils.py 2010-07-15 02:27:57 +0000 | |||
2298 | +++ timer-applet/src/timerapplet/utils.py 2010-09-15 19:27:52 +0000 | |||
2299 | @@ -1,5 +1,5 @@ | |||
2300 | 1 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
2301 | 1 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> | 2 | # Copyright (C) 2010 Kenny Meyer <knny.myer@gmail.com> |
2302 | 2 | # Copyright (C) 2008 Jimmy Do <jimmydo@users.sourceforge.net> | ||
2303 | 3 | # | 3 | # |
2304 | 4 | # This program is free software; you can redistribute it and/or modify | 4 | # This program is free software; you can redistribute it and/or modify |
2305 | 5 | # it under the terms of the GNU General Public License as published by | 5 | # it under the terms of the GNU General Public License as published by |
2306 | @@ -36,8 +36,44 @@ | |||
2307 | 36 | def hms_to_seconds(hours, minutes, seconds): | 36 | def hms_to_seconds(hours, minutes, seconds): |
2308 | 37 | return hours * 3600 + minutes * 60 + seconds | 37 | return hours * 3600 + minutes * 60 + seconds |
2309 | 38 | 38 | ||
2310 | 39 | def construct_time_str(remaining_seconds, show_all=True): | ||
2311 | 40 | """Return a user-friendly representation of remaining time based on the given number of seconds. | ||
2312 | 41 | |||
2313 | 42 | show_all specifies whether the returned string should show all time components. | ||
2314 | 43 | If show_all is True (default), the returned string is in HH:MM:SS format. | ||
2315 | 44 | If show_all is False, the returned string is in either HH:MM or MM:SS format, | ||
2316 | 45 | depending on how much time is remaining. This avoids showing the user more | ||
2317 | 46 | information than necessary. | ||
2318 | 47 | |||
2319 | 48 | """ | ||
2320 | 49 | hours, minutes, seconds = seconds_to_hms(remaining_seconds) | ||
2321 | 50 | if show_all: | ||
2322 | 51 | # HH:MM:SS | ||
2323 | 52 | return _('%02d:%02d:%02d') % (hours, minutes, seconds) | ||
2324 | 53 | else: | ||
2325 | 54 | if hours > 0 or minutes > 14: | ||
2326 | 55 | # HH:MM | ||
2327 | 56 | return _('%02d:%02d') % (hours, minutes) | ||
2328 | 57 | else: | ||
2329 | 58 | # MM:SS | ||
2330 | 59 | return _('%02d:%02d') % (minutes, seconds) | ||
2331 | 60 | |||
2332 | 61 | def get_display_text_from_datetime(date_time): | ||
2333 | 62 | return date_time.strftime('%X') | ||
2334 | 63 | |||
2335 | 39 | def get_preset_display_text(presets_store, row_iter): | 64 | def get_preset_display_text(presets_store, row_iter): |
2337 | 40 | (name, hours, minutes, seconds, command) = presets_store.get_preset(row_iter) | 65 | (name, hours, minutes, seconds, command, next_timer, auto_start) = \ |
2338 | 66 | presets_store.get_preset(row_iter) | ||
2339 | 41 | 67 | ||
2340 | 42 | # <preset name> (HH:MM:SS) | 68 | # <preset name> (HH:MM:SS) |
2341 | 43 | return _('%s (%02d:%02d:%02d)') % (name, hours, minutes, seconds) | 69 | return _('%s (%02d:%02d:%02d)') % (name, hours, minutes, seconds) |
2342 | 70 | |||
2343 | 71 | def serialize_bool(boolean): | ||
2344 | 72 | if boolean: | ||
2345 | 73 | return "1" | ||
2346 | 74 | return "0" | ||
2347 | 75 | |||
2348 | 76 | def deserialize_bool(string): | ||
2349 | 77 | if string == "1": | ||
2350 | 78 | return True | ||
2351 | 79 | return False |
Merged to development branch