GTG

Merge lp://staging/~kevin-mehall/gtg/due-date-menu into lp://staging/~gtg/gtg/old-trunk

Proposed by Kevin Mehall
Status: Merged
Merged at revision: 965
Proposed branch: lp://staging/~kevin-mehall/gtg/due-date-menu
Merge into: lp://staging/~gtg/gtg/old-trunk
Diff against target: 216 lines (+156/-9)
3 files modified
GTG/taskbrowser/browser.py (+52/-0)
GTG/taskbrowser/taskbrowser.glade (+103/-9)
GTG/taskbrowser/tasktree.py (+1/-0)
To merge this branch: bzr merge lp://staging/~kevin-mehall/gtg/due-date-menu
Reviewer Review Type Date Requested Status
Izidor Matušov Approve
Luca Invernizzi (community) Abstain
Review via email: mp+19136@code.staging.launchpad.net
To post a comment you must log in.
Revision history for this message
Kevin Mehall (kevin-mehall) wrote :

Adds a right-click submenu for setting the due date for tasks. The options are the same as the existing menu for start date, with the addition of the fuzzy dates.

Bryce's "Schedule for" submenu is renamed to "Set start date" to avoid confusion. Initially, I thought "Schedule for" would set the due date. (In fact, that's what inspired adding a menu to set the due date.)

585. By Kevin Mehall

add separator below

Revision history for this message
Luca Invernizzi (invernizzi) wrote :

I think it would be nicer to have these features bundled in a plugin, since they're used only by expert users. I'll wait for Bertrand approval

review: Abstain
Revision history for this message
Izidor Matušov (izidor) wrote :

I've merged this and Fabio Prina's branch (which is pretty much the same) in rev 965 after a discussion with Lionel. Sorry for keeping you waiting :-)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'GTG/taskbrowser/browser.py'
2--- GTG/taskbrowser/browser.py 2010-02-09 08:59:12 +0000
3+++ GTG/taskbrowser/browser.py 2010-02-11 20:20:29 +0000
4@@ -324,6 +324,22 @@
5 self.on_schedule_for_next_month,
6 "on_schedule_for_next_year":
7 self.on_schedule_for_next_year,
8+ "on_set_due_today":
9+ self.on_set_due_today,
10+ "on_set_due_tomorrow":
11+ self.on_set_due_tomorrow,
12+ "on_set_due_next_week":
13+ self.on_set_due_next_week,
14+ "on_set_due_next_month":
15+ self.on_set_due_next_month,
16+ "on_set_due_next_year":
17+ self.on_set_due_next_year,
18+ "on_set_due_now":
19+ self.on_set_due_now,
20+ "on_set_due_soon":
21+ self.on_set_due_soon,
22+ "on_set_due_later":
23+ self.on_set_due_later,
24 "on_dismiss_task":
25 self.on_dismiss_task,
26 "on_delete":
27@@ -1564,6 +1580,42 @@
28
29 def on_schedule_for_next_year(self, widget):
30 self.update_start_date(widget, "next year")
31+
32+ def update_due_date(self, widget, new_start_date):
33+ tasks_uid = filter(lambda uid: uid != None, self.get_selected_tasks())
34+ if len(tasks_uid) == 0:
35+ return
36+ tasks = [self.req.get_task(uid) for uid in tasks_uid]
37+ tasks_status = [task.get_status() for task in tasks]
38+ for uid, task, status in zip(tasks_uid, tasks, tasks_status):
39+ task.set_due_date(self.get_canonical_date(new_start_date))
40+ if self.refresh_lock.acquire(False):
41+ gobject.idle_add(self.general_refresh)
42+ #FIXME: If the task dialog is displayed, refresh its start_date widget
43+
44+ def on_set_due_today(self, widget):
45+ self.update_due_date(widget, "today")
46+
47+ def on_set_due_tomorrow(self, widget):
48+ self.update_due_date(widget, "tomorrow")
49+
50+ def on_set_due_next_week(self, widget):
51+ self.update_due_date(widget, "next week")
52+
53+ def on_set_due_next_month(self, widget):
54+ self.update_due_date(widget, "next month")
55+
56+ def on_set_due_next_year(self, widget):
57+ self.update_due_date(widget, "next year")
58+
59+ def on_set_due_now(self, widget):
60+ self.update_due_date(widget, "now")
61+
62+ def on_set_due_soon(self, widget):
63+ self.update_due_date(widget, "soon")
64+
65+ def on_set_due_later(self, widget):
66+ self.update_due_date(widget, "later")
67
68 def on_add_new_tag(self, widget=None, tid=None, tryagain = False):
69 if not tid:
70
71=== modified file 'GTG/taskbrowser/taskbrowser.glade'
72--- GTG/taskbrowser/taskbrowser.glade 2010-02-09 08:59:12 +0000
73+++ GTG/taskbrowser/taskbrowser.glade 2010-02-11 20:20:29 +0000
74@@ -861,15 +861,6 @@
75 </object>
76 </child>
77 <child>
78- <object class="GtkImageMenuItem" id="tcm_schedule_menu">
79- <property name="label" translatable="yes">_Schedule for...</property>
80- <property name="visible">True</property>
81- <property name="submenu">ScheduleForContextMenu</property>
82- <property name="use_underline">True</property>
83- <property name="use_stock">False</property>
84- </object>
85- </child>
86- <child>
87 <object class="GtkImageMenuItem" id="tcm_mark_as_done">
88 <property name="label" translatable="yes">Mark as _Done</property>
89 <property name="visible">True</property>
90@@ -907,6 +898,29 @@
91 </object>
92 </child>
93 <child>
94+ <object class="GtkImageMenuItem" id="tcm_schedule_menu">
95+ <property name="label" translatable="yes">_Set start date</property>
96+ <property name="submenu">ScheduleForContextMenu</property>
97+ <property name="visible">True</property>
98+ <property name="use_underline">True</property>
99+ <property name="use_stock">False</property>
100+ </object>
101+ </child>
102+ <child>
103+ <object class="GtkImageMenuItem" id="tcm_due_menu">
104+ <property name="label" translatable="yes">Set due date</property>
105+ <property name="submenu">DueContextMenu</property>
106+ <property name="visible">True</property>
107+ <property name="use_underline">True</property>
108+ <property name="use_stock">False</property>
109+ </object>
110+ </child>
111+ <child>
112+ <object class="GtkSeparatorMenuItem" id="separatormenuitem6">
113+ <property name="visible">True</property>
114+ </object>
115+ </child>
116+ <child>
117 <object class="GtkImageMenuItem" id="tcm_addtag">
118 <property name="label" translatable="yes">Add Tag...</property>
119 <property name="visible">True</property>
120@@ -1188,4 +1202,84 @@
121 <property name="pixel_size">16</property>
122 <property name="icon_name">gtg-tag</property>
123 </object>
124+ <object class="GtkMenu" id="DueContextMenu">
125+ <property name="visible">True</property>
126+ <child>
127+ <object class="GtkImageMenuItem" id="tcm_due_today">
128+ <property name="label" translatable="yes">t_oday</property>
129+ <property name="visible">True</property>
130+ <property name="use_underline">True</property>
131+ <property name="use_stock">False</property>
132+ <signal name="activate" handler="on_set_due_today"/>
133+ </object>
134+ </child>
135+ <child>
136+ <object class="GtkImageMenuItem" id="tcm_due_tomorrow">
137+ <property name="label" translatable="yes">_tomorrow</property>
138+ <property name="visible">True</property>
139+ <property name="use_underline">True</property>
140+ <property name="use_stock">False</property>
141+ <signal name="activate" handler="on_set_due_tomorrow"/>
142+ </object>
143+ </child>
144+ <child>
145+ <object class="GtkImageMenuItem" id="tcm_due_next_week">
146+ <property name="label" translatable="yes">next _week</property>
147+ <property name="visible">True</property>
148+ <property name="use_underline">True</property>
149+ <property name="use_stock">False</property>
150+ <signal name="activate" handler="on_set_due_next_week"/>
151+ </object>
152+ </child>
153+ <child>
154+ <object class="GtkImageMenuItem" id="tcm_due_next_month">
155+ <property name="label" translatable="yes">next _month</property>
156+ <property name="visible">True</property>
157+ <property name="use_underline">True</property>
158+ <property name="use_stock">False</property>
159+ <signal name="activate" handler="on_set_due_next_month"/>
160+ </object>
161+ </child>
162+ <child>
163+ <object class="GtkImageMenuItem" id="tcm_due_next_year">
164+ <property name="label" translatable="yes">next _year</property>
165+ <property name="visible">True</property>
166+ <property name="use_underline">True</property>
167+ <property name="use_stock">False</property>
168+ <signal name="activate" handler="on_set_due_next_year"/>
169+ </object>
170+ </child>
171+ <child>
172+ <object class="GtkSeparatorMenuItem" id="menuitem1">
173+ <property name="visible">True</property>
174+ </object>
175+ </child>
176+ <child>
177+ <object class="GtkImageMenuItem" id="tcm_due_now">
178+ <property name="label" translatable="yes">_now</property>
179+ <property name="visible">True</property>
180+ <property name="use_underline">True</property>
181+ <property name="use_stock">False</property>
182+ <signal name="activate" handler="on_set_due_now"/>
183+ </object>
184+ </child>
185+ <child>
186+ <object class="GtkImageMenuItem" id="tcm_due_soon">
187+ <property name="label" translatable="yes">_soon</property>
188+ <property name="visible">True</property>
189+ <property name="use_underline">True</property>
190+ <property name="use_stock">False</property>
191+ <signal name="activate" handler="on_set_due_soon"/>
192+ </object>
193+ </child>
194+ <child>
195+ <object class="GtkImageMenuItem" id="tcm_due_later">
196+ <property name="label" translatable="yes">_later</property>
197+ <property name="visible">True</property>
198+ <property name="use_underline">True</property>
199+ <property name="use_stock">False</property>
200+ <signal name="activate" handler="on_set_due_later"/>
201+ </object>
202+ </child>
203+ </object>
204 </interface>
205
206=== modified file 'GTG/taskbrowser/tasktree.py'
207--- GTG/taskbrowser/tasktree.py 2010-02-09 20:59:57 +0000
208+++ GTG/taskbrowser/tasktree.py 2010-02-11 20:20:29 +0000
209@@ -471,6 +471,7 @@
210 target = self.get_path_at_pos(int(event.x), int(event.y))
211 if (target
212 and event.type == gtk.gdk.BUTTON_PRESS
213+ and event.button == 1
214 and not (event.state & (gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK))
215 and self.get_selection().path_is_selected(target[0])):
216 # disable selection

Subscribers

People subscribed via source and target branches

to status/vote changes: