GTG

Merge lp:~jml/gtg/random-cleanups into lp:~gtg/gtg/old-trunk

Proposed by Jonathan Lange
Status: Merged
Merged at revision: not available
Proposed branch: lp:~jml/gtg/random-cleanups
Merge into: lp:~gtg/gtg/old-trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~jml/gtg/random-cleanups
Reviewer Review Type Date Requested Status
Bertrand Rousseau (community) Approve
Review via email: mp+8980@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jonathan Lange (jml) wrote :

Absolutely no behavioural changes here, just getting rid of all of the valid PEP 8 warnings in browser.py.

Revision history for this message
Bertrand Rousseau (bertrand-rousseau) :
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 2009-07-16 16:17:56 +0000
3+++ GTG/taskbrowser/browser.py 2009-07-18 03:17:09 +0000
4@@ -58,16 +58,16 @@
5 class TaskBrowser:
6
7 def __init__(self, requester, config):
8-
9+
10 self.priv = {}
11-
12+
13 #The locks used to avoid unecessary refresh
14 self.refresh_lock = threading.Lock()
15 self.refresh_lock_lock = threading.Lock()
16 # Set the configuration dictionary
17 self.config = config
18 self.notes = EXPERIMENTAL_NOTES
19-
20+
21 # Setup default values for view
22 self.priv["collapsed_tid"] = []
23 self.priv["tasklist"] = {}
24@@ -76,11 +76,11 @@
25 self.priv["ctasklist"] = {}
26 self.priv["ctasklist"]["sort_column"] = None
27 self.priv["ctasklist"]["sort_order"] = gtk.SORT_ASCENDING
28-
29+
30 #Set the Glade file
31- self.gladefile = GnomeConfig.GLADE_FILE
32- self.wTree = gtk.glade.XML(self.gladefile)
33-
34+ self.gladefile = GnomeConfig.GLADE_FILE
35+ self.wTree = gtk.glade.XML(self.gladefile)
36+
37 #Get the Main Window, and connect the "destroy" event
38 self.window = self.wTree.get_widget("MainWindow")
39 if (self.window):
40@@ -102,14 +102,14 @@
41 self.dismissbutton = self.wTree.get_widget("dismiss")
42 self.about = self.wTree.get_widget("aboutdialog1")
43 self.edit_mi = self.wTree.get_widget("edit_mi")
44-
45+
46 #Set the tooltip for the toolbar buttons
47 self.donebutton.set_tooltip_text(GnomeConfig.MARK_DONE_TOOLTIP)
48 self.editbutton.set_tooltip_text(_("Edit the selected task"))
49 self.dismissbutton.set_tooltip_text(GnomeConfig.MARK_DISMISS_TOOLTIP)
50 self.newtask.set_tooltip_text(_("Create a new task"))
51 self.newsubtask.set_tooltip_text(_("Create a new subtask"))
52-
53+
54 # Initialize "About" dialog
55 gtk.about_dialog_set_url_hook(lambda dialog, url: openurl.openurl(url))
56 self.about.set_website(GTG.URL)
57@@ -118,68 +118,73 @@
58 self.about.set_authors(GTG.AUTHORS)
59 self.about.set_artists(GTG.ARTISTS)
60 self.about.set_translator_credits(GTG.TRANSLATORS)
61-
62+
63 # Initialize menu
64
65 #Create our dictionay and connect it
66 dic = {
67- "on_add_task": self.on_add_task,
68- "on_add_note": (self.on_add_task, 'Note'),
69- "on_edit_active_task": self.on_edit_active_task,
70- "on_edit_done_task": self.on_edit_done_task,
71- "on_edit_note": self.on_edit_note,
72- "on_delete_task": self.on_delete_task,
73- "on_mark_as_done": self.on_mark_as_done,
74- "on_dismiss_task": self.on_dismiss_task,
75- "on_delete": self.on_delete,
76- "on_move": self.on_move,
77- "on_size_allocate": self.on_size_allocate,
78- "gtk_main_quit": self.close,
79- "on_select_tag": self.on_select_tag,
80- "on_delete_confirm": self.on_delete_confirm,
81- "on_delete_cancel": lambda x : x.hide,
82- "on_add_subtask": self.on_add_subtask,
83- "on_closed_task_treeview_button_press_event": self.on_closed_task_treeview_button_press_event,
84- "on_closed_task_treeview_key_press_event": self.on_closed_task_treeview_key_press_event,
85- "on_task_treeview_button_press_event": self.on_task_treeview_button_press_event,
86- "on_task_treeview_key_press_event": self.on_task_treeview_key_press_event,
87- "on_tag_treeview_button_press_event": self.on_tag_treeview_button_press_event,
88- "on_colorchooser_activate": self.on_colorchooser_activate,
89- "on_workview_toggled": self.on_workview_toggled,
90- "on_note_toggled": self.on_note_toggled,
91- "on_view_workview_toggled": self.on_workview_toggled,
92- "on_view_closed_toggled": self.on_closed_toggled,
93- "on_view_sidebar_toggled": self.on_sidebar_toggled,
94- "on_bg_color_toggled": self.on_bg_color_toggled,
95- "on_quickadd_field_activate": self.quickadd,
96- "on_quickadd_button_activate": self.quickadd,
97- "on_view_toolbar_toggled": self.on_toolbar_toggled,
98- "on_view_quickadd_toggled": self.toggle_quickadd,
99- "on_about_clicked": self.on_about_clicked,
100- "on_about_close": self.on_about_close,
101- "on_nonworkviewtag_toggled": self.on_nonworkviewtag_toggled
102- }
103+ "on_add_task": self.on_add_task,
104+ "on_add_note": (self.on_add_task, 'Note'),
105+ "on_edit_active_task": self.on_edit_active_task,
106+ "on_edit_done_task": self.on_edit_done_task,
107+ "on_edit_note": self.on_edit_note,
108+ "on_delete_task": self.on_delete_task,
109+ "on_mark_as_done": self.on_mark_as_done,
110+ "on_dismiss_task": self.on_dismiss_task,
111+ "on_delete": self.on_delete,
112+ "on_move": self.on_move,
113+ "on_size_allocate": self.on_size_allocate,
114+ "gtk_main_quit": self.close,
115+ "on_select_tag": self.on_select_tag,
116+ "on_delete_confirm": self.on_delete_confirm,
117+ "on_delete_cancel": lambda x: x.hide,
118+ "on_add_subtask": self.on_add_subtask,
119+ "on_closed_task_treeview_button_press_event":
120+ self.on_closed_task_treeview_button_press_event,
121+ "on_closed_task_treeview_key_press_event":
122+ self.on_closed_task_treeview_key_press_event,
123+ "on_task_treeview_button_press_event":
124+ self.on_task_treeview_button_press_event,
125+ "on_task_treeview_key_press_event":
126+ self.on_task_treeview_key_press_event,
127+ "on_tag_treeview_button_press_event":
128+ self.on_tag_treeview_button_press_event,
129+ "on_colorchooser_activate": self.on_colorchooser_activate,
130+ "on_workview_toggled": self.on_workview_toggled,
131+ "on_note_toggled": self.on_note_toggled,
132+ "on_view_workview_toggled": self.on_workview_toggled,
133+ "on_view_closed_toggled": self.on_closed_toggled,
134+ "on_view_sidebar_toggled": self.on_sidebar_toggled,
135+ "on_bg_color_toggled": self.on_bg_color_toggled,
136+ "on_quickadd_field_activate": self.quickadd,
137+ "on_quickadd_button_activate": self.quickadd,
138+ "on_view_toolbar_toggled": self.on_toolbar_toggled,
139+ "on_view_quickadd_toggled": self.toggle_quickadd,
140+ "on_about_clicked": self.on_about_clicked,
141+ "on_about_close": self.on_about_close,
142+ "on_nonworkviewtag_toggled": self.on_nonworkviewtag_toggled,
143+ }
144 self.wTree.signal_autoconnect(dic)
145 self.selected_rows = None
146-
147+
148 self.workview = False
149 self.req = requester
150-
151+
152 self.noteview = False
153 self.new_note_button = self.wTree.get_widget("new_note_button")
154 self.note_toggle = self.wTree.get_widget("note_toggle")
155 if not self.notes:
156 self.note_toggle.hide()
157 self.new_note_button.hide()
158-
159+
160 #Set the tooltip for the toolbar button
161 self.new_note_button.set_tooltip_text("Create a new note")
162-
163+
164 # Model constants
165 self.TASK_MODEL_OBJ = 0
166 self.TASK_MODEL_TITLE = 1
167 self.TASK_MODEL_TITLE_STR = 2
168- #Warning : this one is duplicated in treetools.py
169+ #Warning: this one is duplicated in treetools.py
170 #They all should go in treetools
171 self.TASK_MODEL_DDATE_STR = 3
172 self.TASK_MODEL_DLEFT_STR = 4
173@@ -196,7 +201,7 @@
174 self.CTASKS_MODEL_DDATE_STR = 4
175 self.CTASKS_MODEL_BGCOL = 5
176 self.CTASKS_MODEL_TAGS = 6
177-
178+
179 #The tview and their model
180 self.taskdone_tview = self.wTree.get_widget("taskdone_tview")
181 self.taskdone_ts = gtk.TreeStore(gobject.TYPE_PYOBJECT,
182@@ -217,30 +222,30 @@
183
184 #Be sure that we are reorderable (not needed normaly)
185 self.task_tview.set_reorderable(True)
186-
187+
188 #The menu items widget
189 self.menu_view_workview = self.wTree.get_widget("view_workview")
190-
191+
192 #The buttons
193 self.toggle_workview = self.wTree.get_widget("workview_toggle")
194 self.quickadd_entry = self.wTree.get_widget("quickadd_field")
195-
196+
197 #Set the tooltip for the toolbar button
198 self.toggle_workview.set_tooltip_text("Toggle the work view")
199-
200+
201 #The panes
202 self.sidebar = self.wTree.get_widget("sidebar")
203 self.closed_pane = self.wTree.get_widget("closed_pane")
204 self.toolbar = self.wTree.get_widget("task_tb")
205 self.quickadd_pane = self.wTree.get_widget("quickadd_pane")
206-
207+
208 #The tid that will be deleted
209 self.tid_todelete = None
210-
211+
212 #This is the list of tasks that are already opened in an editor
213 #of course it's empty right now
214 self.opened_task = {}
215-
216+
217 #Variables used during drag-n-drop
218 self.drag_sources = []
219 self.path_source = None
220@@ -248,7 +253,7 @@
221 self.tid_tomove = None
222 self.tid_source_parent = None
223 self.tid_target_parent = None
224-
225+
226 #setting the default
227 self.menu_view_workview.set_active(WORKVIEW)
228 self.wTree.get_widget("view_sidebar").set_active(SIDEBAR)
229@@ -256,11 +261,11 @@
230 self.wTree.get_widget("view_toolbar").set_active(TOOLBAR)
231 self.wTree.get_widget("view_quickadd").set_active(QUICKADD_PANE)
232 self.priv["bg_color_enable"] = True
233-
234+
235 #connecting the refresh signal from the requester
236 self.lock = threading.Lock()
237 self.req.connect("refresh", self.do_refresh)
238-
239+
240 agr = gtk.AccelGroup()
241 self.wTree.get_widget("MainWindow").add_accel_group(agr)
242
243@@ -286,12 +291,12 @@
244 key, mod = gtk.accelerator_parse("<Control>n")
245 new_task_mi.add_accelerator("activate",
246 agr, key, mod, gtk.ACCEL_VISIBLE)
247-
248+
249 new_subtask_mi = self.wTree.get_widget("new_subtask_mi")
250 key, mod = gtk.accelerator_parse("<Control><Shift>n")
251 new_subtask_mi.add_accelerator("activate",
252 agr, key, mod, gtk.ACCEL_VISIBLE)
253-
254+
255 edit_button = self.wTree.get_widget("edit_b")
256 key, mod = gtk.accelerator_parse("<Control>e")
257 edit_button.add_accelerator("clicked",
258@@ -313,24 +318,24 @@
259 'activate', agr, key, mod, gtk.ACCEL_VISIBLE)
260
261 def __restore_state_from_conf(self):
262-
263+
264 # Extract state from configuration dictionary
265 if not "browser" in self.config:
266 return
267-
268- if "width" in self.config["browser"] and \
269- "height" in self.config["browser"]:
270+
271+ if ("width" in self.config["browser"] and
272+ "height" in self.config["browser"]):
273 width = int(self.config["browser"]["width"])
274 height = int(self.config["browser"]["height"])
275 self.window.resize(width, height)
276-
277- if "x_pos" in self.config["browser"] and \
278- "y_pos" in self.config["browser"]:
279-
280+
281+ if ("x_pos" in self.config["browser"] and
282+ "y_pos" in self.config["browser"]):
283+
284 xpos = int(self.config["browser"]["x_pos"])
285 ypos = int(self.config["browser"]["y_pos"])
286 self.window.move(xpos, ypos)
287-
288+
289 if "tag_pane" in self.config["browser"]:
290 tag_pane = eval(self.config["browser"]["tag_pane"])
291 if not tag_pane:
292@@ -340,7 +345,7 @@
293 self.wTree.get_widget("view_sidebar").set_active(True)
294 self.sidebar.show()
295
296-
297+
298 if "closed_task_pane" in self.config["browser"]:
299 closed_task_pane = eval(
300 self.config["browser"]["closed_task_pane"])
301@@ -355,28 +360,28 @@
302 ctask_pane_height = eval(
303 self.config["browser"]["ctask_pane_height"])
304 self.wTree.get_widget("vpaned1").set_position(ctask_pane_height)
305-
306+
307 if "toolbar" in self.config["browser"]:
308 toolbar = eval(self.config["browser"]["toolbar"])
309 if not toolbar:
310 self.toolbar.hide()
311 self.wTree.get_widget("view_toolbar").set_active(False)
312-
313+
314 if "quick_add" in self.config["browser"]:
315 quickadd_pane = eval(self.config["browser"]["quick_add"])
316 if not quickadd_pane:
317 self.quickadd_pane.hide()
318 self.wTree.get_widget("view_quickadd").set_active(False)
319-
320+
321 if "bg_color_enable" in self.config["browser"]:
322 bgcol_enable = eval(self.config["browser"]["bg_color_enable"])
323 self.priv["bg_color_enable"] = bgcol_enable
324 self.wTree.get_widget("bgcol_enable").set_active(bgcol_enable)
325-
326+
327 if "collapsed_tasks" in self.config["browser"]:
328- self.priv["collapsed_tid"] = \
329- self.config["browser"]["collapsed_tasks"]
330-
331+ self.priv["collapsed_tid"] = self.config[
332+ "browser"]["collapsed_tasks"]
333+
334 if "tasklist_sort" in self.config["browser"]:
335 col_id, order = self.config["browser"]["tasklist_sort"]
336 self.priv["sort_column"] = col_id
337@@ -395,7 +400,7 @@
338 view = self.config["browser"]["view"]
339 if view == "workview":
340 self.do_toggle_workview()
341-
342+
343 if "experimental_notes" in self.config["browser"]:
344 self.notes = eval(self.config["browser"]["experimental_notes"])
345 if self.notes:
346@@ -414,17 +419,17 @@
347 width, height = self.window.get_size()
348 self.priv["window_width"] = width
349 self.priv["window_height"] = height
350-
351+
352 def on_delete(self, widget, user_data): #pylint: disable-msg=W0613
353-
354+
355 # Save expanded rows
356 self.task_ts.foreach(self.update_collapsed_row, None)
357-
358+
359 # Cleanup collapsed row list
360 for tid in self.priv["collapsed_tid"]:
361 if not self.req.has_task(tid):
362 self.priv["collapsed_tid"].remove(tid)
363-
364+
365 # Get configuration values
366 tag_sidebar = self.sidebar.get_property("visible")
367 closed_pane = self.closed_pane.get_property("visible")
368@@ -434,68 +439,72 @@
369 sort_column = self.priv["tasklist"]["sort_column"]
370 sort_order = self.priv["tasklist"]["sort_order"]
371 closed_pane_height = self.wTree.get_widget("vpaned1").get_position()
372-
373- if self.workview : view = "workview"
374- else : view = "default"
375+
376+ if self.workview:
377+ view = "workview"
378+ else:
379+ view = "default"
380
381 # Populate configuration dictionary
382- self.config["browser"] = {}
383- self.config["browser"]["width"] = self.priv["window_width"]
384- self.config["browser"]["height"] = self.priv["window_height"]
385- self.config["browser"]["x_pos"] = self.priv["window_xpos"]
386- self.config["browser"]["y_pos"] = self.priv["window_ypos"]
387- self.config["browser"]["tag_pane"] = tag_sidebar
388- self.config["browser"]["closed_task_pane"] = closed_pane
389- self.config["browser"]["ctask_pane_height"] = closed_pane_height
390- self.config["browser"]["toolbar"] = toolbar
391- self.config["browser"]["quick_add"] = quickadd_pane
392- self.config["browser"]["bg_color_enable"] = self.priv["bg_color_enable"]
393- self.config["browser"]["collapsed_tasks"] = self.priv["collapsed_tid"]
394- if sort_column is not None and sort_order == gtk.SORT_ASCENDING:
395+ self.config["browser"] = {
396+ 'width': self.priv["window_width"],
397+ 'height': self.priv["window_height"],
398+ 'x_pos': self.priv["window_xpos"],
399+ 'y_pos': self.priv["window_ypos"],
400+ 'bg_color_enable': self.priv["bg_color_enable"],
401+ 'collapsed_tasks': self.priv["collapsed_tid"],
402+ 'tag_pane': tag_sidebar,
403+ 'closed_task_pane': closed_pane,
404+ 'ctask_pane_height': closed_pane_height,
405+ 'toolbar': toolbar,
406+ 'quick_add': quickadd_pane,
407+ 'view': view,
408+ }
409+
410+ if sort_column is not None and sort_order == gtk.SORT_ASCENDING:
411 sort_col_id = self.priv["tasklist"]["columns"].index(sort_column)
412- self.config["browser"]["tasklist_sort"] = [sort_col_id, 0]
413+ self.config["browser"]["tasklist_sort"] = [sort_col_id, 0]
414 elif sort_column is not None and sort_order == gtk.SORT_DESCENDING:
415 sort_col_id = self.priv["tasklist"]["columns"].index(sort_column)
416- self.config["browser"]["tasklist_sort"] = [sort_col_id, 1]
417- self.config["browser"]["view"] = view
418- if self.notes :
419+ self.config["browser"]["tasklist_sort"] = [sort_col_id, 1]
420+ if self.notes:
421 self.config["browser"]["experimental_notes"] = True
422-
423+
424 def main(self):
425 #Here we will define the main TaskList interface
426 gobject.threads_init()
427-
428+
429 #The tags treeview
430 self.__create_tags_tview()
431 self.tag_tview.set_model(self.tag_ts)
432-
433+
434 #The Active tasks treeview
435 self.__create_task_tview()
436 self.task_tview.set_model(self.task_ts)
437-
438+
439 #The done/dismissed taks treeview
440 self.__create_closed_tasks_tview()
441 self.taskdone_tview.set_model(self.taskdone_ts)
442-
443+
444 #The treeview for notes
445 self.__create_note_tview()
446 self.note_tview.set_model(self.note_ts)
447-
448+
449 #put the content in those treeviews
450 self.do_refresh()
451-
452+
453 selection = self.task_tview.get_selection()
454- selection.connect("changed",self.task_cursor_changed)
455+ selection.connect("changed", self.task_cursor_changed)
456 closed_selection = self.taskdone_tview.get_selection()
457- closed_selection.connect("changed",self.taskdone_cursor_changed)
458+ closed_selection.connect("changed", self.taskdone_cursor_changed)
459 note_selection = self.note_tview.get_selection()
460- note_selection.connect("changed",self.note_cursor_changed)
461-
462-
463+ note_selection.connect("changed", self.note_cursor_changed)
464+
465+
466 # Restore state from config
467 self.__restore_state_from_conf()
468 self.window.show()
469-
470+
471 gtk.main()
472 return 0
473
474@@ -505,19 +514,17 @@
475 def on_about_close(self, widget, response): #pylint: disable-msg=W0613
476 self.about.hide()
477
478- def on_colorchooser_activate(self,widget) : #pylint: disable-msg=W0613
479- #TODO : Color chooser should be refactorized in its own class
480- #Well, in fact we should have a TagPropertiesEditor (like for project)
481- #Also, color change should be immediate. There's no reason for a Ok/Cancel
482- wTree = gtk.glade.XML(self.gladefile, "ColorChooser")
483+ def on_colorchooser_activate(self, widget): #pylint: disable-msg=W0613
484+ #TODO: Color chooser should be refactorized in its own class. Well, in
485+ #fact we should have a TagPropertiesEditor (like for project) Also,
486+ #color change should be immediate. There's no reason for a Ok/Cancel
487+ wTree = gtk.glade.XML(self.gladefile, "ColorChooser")
488 #Create our dictionay and connect it
489- dic = {
490- "on_color_response" : self.on_color_response
491- }
492+ dic = {"on_color_response": self.on_color_response}
493 wTree.signal_autoconnect(dic)
494 window = wTree.get_widget("ColorChooser")
495 # Get previous color
496- tags,notag_only = self.get_selected_tags() #pylint: disable-msg=W0612
497+ tags, notag_only = self.get_selected_tags() #pylint: disable-msg=W0612
498 if len(tags) == 1:
499 color = tags[0].get_attribute("color")
500 if color != None:
501@@ -527,27 +534,27 @@
502 colorsel.set_current_color(colorspec)
503 window.show()
504
505- def on_color_response(self,widget,response) :
506+ def on_color_response(self, widget, response):
507 #the OK button return -5. Don't ask me why.
508- if response == -5 :
509+ if response == -5:
510 colorsel = widget.colorsel
511 gtkcolor = colorsel.get_current_color()
512 strcolor = gtk.color_selection_palette_to_string([gtkcolor])
513- tags,notag_only = self.get_selected_tags() #pylint: disable-msg=W0612
514- for t in tags :
515- t.set_attribute("color",strcolor)
516+ tags, notag_only = self.get_selected_tags()
517+ for t in tags:
518+ t.set_attribute("color", strcolor)
519 self.do_refresh()
520 widget.destroy()
521-
522- def on_workview_toggled(self,widget) : #pylint: disable-msg=W0613
523+
524+ def on_workview_toggled(self, widget): #pylint: disable-msg=W0613
525 self.do_toggle_workview()
526-
527+
528 def do_toggle_workview(self):
529 #We have to be careful here to avoid a loop of signals
530- #menu_state = self.menu_view_workview.get_active()
531+ #menu_state = self.menu_view_workview.get_active()
532 #button_state = self.toggle_workview.get_active()
533 #We cannot have note and workview at the same time
534- if not self.workview and self.note_toggle.get_active() :
535+ if not self.workview and self.note_toggle.get_active():
536 self.note_toggle.set_active(False)
537 #We do something only if both widget are in different state
538 tobeset = not self.workview
539@@ -556,48 +563,48 @@
540 self.workview = tobeset
541 self.do_refresh()
542
543- def on_sidebar_toggled(self,widget) :
544+ def on_sidebar_toggled(self, widget):
545 view_sidebar = self.wTree.get_widget("view_sidebar")
546 if self.sidebar.get_property("visible"):
547 view_sidebar.set_active(False)
548 self.sidebar.hide()
549- else :
550+ else:
551 view_sidebar.set_active(True)
552 self.sidebar.show()
553-
554- def on_note_toggled(self,widget) :
555+
556+ def on_note_toggled(self, widget):
557 self.noteview = not self.noteview
558 workview_state = self.toggle_workview.get_active()
559- if workview_state :
560+ if workview_state:
561 self.toggle_workview.set_active(False)
562 self.do_refresh()
563-
564- def on_closed_toggled(self,widget) :
565- if widget.get_active() :
566+
567+ def on_closed_toggled(self, widget):
568+ if widget.get_active():
569 self.closed_pane.show()
570- else :
571+ else:
572 self.closed_pane.hide()
573
574- def on_bg_color_toggled(self,widget) :
575- if widget.get_active() :
576+ def on_bg_color_toggled(self, widget):
577+ if widget.get_active():
578 self.priv["bg_color_enable"] = True
579- else :
580+ else:
581 self.priv["bg_color_enable"] = False
582 self.do_refresh()
583-
584- def on_toolbar_toggled(self,widget) :
585- if widget.get_active() :
586+
587+ def on_toolbar_toggled(self, widget):
588+ if widget.get_active():
589 self.toolbar.show()
590- else :
591+ else:
592 self.toolbar.hide()
593
594- def toggle_quickadd(self,widget) :
595- if widget.get_active() :
596+ def toggle_quickadd(self, widget):
597+ if widget.get_active():
598 self.quickadd_pane.show()
599- else :
600+ else:
601 self.quickadd_pane.hide()
602-
603- def canonical_date(self, arg) :
604+
605+ def canonical_date(self, arg):
606 """
607 Transform "arg" in a valid yyyy-mm-dd date or return None.
608 "arg" can be a yyyy-mm-dd, yyyymmdd, mmdd, today or a weekday name.
609@@ -607,107 +614,110 @@
610 day_names = [_("monday"), _("tuesday"), _("wednesday"),
611 _("thursday"), _("friday"), _("saturday"),
612 _("sunday")]
613- if re.match(r'\d{4}-\d{2}-\d{2}', arg) :
614+ if re.match(r'\d{4}-\d{2}-\d{2}', arg):
615 date = arg
616- elif arg.isdigit() :
617- if len(arg) == 8 :
618- date = "%s-%s-%s" % (arg[:4],arg[4:6],arg[6:])
619- elif len(arg) == 4 :
620+ elif arg.isdigit():
621+ if len(arg) == 8:
622+ date = "%s-%s-%s" % (arg[:4], arg[4:6], arg[6:])
623+ elif len(arg) == 4:
624 year = datetime.date.today().year
625- date = "%i-%s-%s" % (year,arg[:2],arg[2:])
626+ date = "%i-%s-%s" % (year, arg[:2], arg[2:])
627 elif arg.lower() == "today" or arg.lower() == _("today"):
628 today = datetime.date.today()
629 year = today.year
630 month = today.month
631 day = today.day
632- date = "%i-%i-%i" % (year,month,day)
633- elif arg.lower() == "tomorrow" or\
634- arg.lower() == _("tomorrow") :
635+ date = "%i-%i-%i" % (year, month, day)
636+ elif arg.lower() == "tomorrow" or arg.lower() == _("tomorrow"):
637 today = datetime.date.today()
638 tomorrow = today + datetime.timedelta(days=1)
639 year = tomorrow.year
640 month = tomorrow.month
641 day = tomorrow.day
642- date = "%i-%i-%i" % (year,month,day)
643+ date = "%i-%i-%i" % (year, month, day)
644 elif arg.lower() in day_names_en or arg.lower() in day_names:
645 today = datetime.date.today()
646 today_day = today.weekday()
647- if arg.lower() in day_names_en :
648+ if arg.lower() in day_names_en:
649 arg_day = day_names_en.index(arg)
650- else :
651+ else:
652 arg_day = day_names.index(arg)
653- if arg_day > today_day :
654+ if arg_day > today_day:
655 delta = datetime.timedelta(days = arg_day-today_day)
656- else :
657+ else:
658 delta = datetime.timedelta(days = arg_day-today_day+7)
659 next_date = today + delta
660 year = next_date.year
661 month = next_date.month
662 day = next_date.day
663- date = "%i-%i-%i" % (year,month,day)
664- else :
665+ date = "%i-%i-%i" % (year, month, day)
666+ else:
667 return None
668- if self.is_date_valid(date) :
669+ if self.is_date_valid(date):
670 return date
671- else :
672+ else:
673 return None
674-
675- def is_date_valid(self, fulldate) :
676+
677+ def is_date_valid(self, fulldate):
678 """
679 Return True if the date exists. False else.
680 "fulldate" is yyyy-mm-dd
681 """
682 splited_date = fulldate.split("-")
683- if len(splited_date) != 3 :
684- return False
685- year,month,day = splited_date
686- try :
687- datetime.date(int(year),int(month),int(day))
688- except ValueError :
689- return False
690- else :
691+ if len(splited_date) != 3:
692+ return False
693+ year, month, day = splited_date
694+ try:
695+ datetime.date(int(year), int(month), int(day))
696+ except ValueError:
697+ return False
698+ else:
699 return True
700-
701- def quickadd(self,widget) : #pylint: disable-msg=W0613
702+
703+ def quickadd(self, widget): #pylint: disable-msg=W0613
704 text = self.quickadd_entry.get_text()
705 due_date = None
706 defer_date = None
707- if text :
708- tags,notagonly = self.get_selected_tags() #pylint: disable-msg=W0612
709+ if text:
710+ tags, notagonly = self.get_selected_tags()
711 # Get tags in the title
712- for match in re.findall(r'[\s](@[^@,\s]+)',text) :
713+ for match in re.findall(r'[\s](@[^@,\s]+)', text):
714 tags.append(GTG.core.tagstore.Tag(match))
715 # Remove the @
716- #text =text.replace(match,match[1:],1)
717+ #text =text.replace(match, match[1:], 1)
718 # Get attributes
719 regexp = r'([\s]*)([a-zA-Z0-9_-]+):([^\s]+)'
720- for spaces,attribute, args in re.findall(regexp, text) :
721+ for spaces, attribute, args in re.findall(regexp, text):
722 valid_attribute = True
723- if attribute.lower() == "tags" or attribute.lower() == _("tags"):
724- for tag in args.split(",") :
725+ if (attribute.lower() == "tags"
726+ or attribute.lower() == _("tags")):
727+ for tag in args.split(","):
728 tags.append(GTG.core.tagstore.Tag("@"+tag))
729- elif attribute.lower() == "defer" or attribute.lower() == _("defer"):
730+ elif (attribute.lower() == "defer"
731+ or attribute.lower() == _("defer")):
732 defer_date = self.canonical_date(args)
733- if defer_date is None :
734+ if defer_date is None:
735 valid_attribute = False
736- elif attribute.lower() == "due" or attribute.lower() == _("due"):
737+ elif (attribute.lower() == "due"
738+ or attribute.lower() == _("due")):
739 due_date = self.canonical_date(args)
740- if due_date is None :
741+ if due_date is None:
742 valid_attribute = False
743- else :
744+ else:
745 # attribute is unknown
746 valid_attribute = False
747- if valid_attribute :
748+ if valid_attribute:
749 # if the command is valid we have to remove it
750 # from the task title
751- text = text.replace("%s%s:%s" % (spaces,attribute,args), "")
752+ text = text.replace(
753+ "%s%s:%s" % (spaces, attribute, args), "")
754 # Create the new task
755- task = self.req.new_task(tags=tags,newtask=True)
756- if text != "" :
757+ task = self.req.new_task(tags=tags, newtask=True)
758+ if text != "":
759 task.set_title(text)
760- if not due_date is None :
761+ if not due_date is None:
762 task.set_due_date(due_date)
763- if not defer_date is None :
764+ if not defer_date is None:
765 task.set_start_date(defer_date)
766 id_toselect = task.get_id()
767 #############
768@@ -715,393 +725,442 @@
769 # Refresh the treeview
770 self.do_refresh(toselect=id_toselect)
771 #self.select_task(id_toselect)
772-
773- #This works only in the main task_tview
774- #If it cannot find the requested task, nothing is selected
775- def select_task(self,id_toselect) :
776+
777+ def select_task(self, id_toselect):
778+ """Select a task with tid 'id_toselect'.
779+
780+ This works only in the main task_tview. If it cannot find the
781+ requested task, nothing is selected.
782+ """
783 #We will loop over all task_tview element to find the newly added one
784 model = self.task_tview.get_model()
785 tempit = model.get_iter_first()
786 it = None
787- while (tempit and not it) :
788- if tempit :
789+ while (tempit and not it):
790+ if tempit:
791 tid = model.get_value(tempit, 0)
792- if tid == id_toselect :
793+ if tid == id_toselect:
794 it = tempit
795 #First we try to see if there is child task
796 tempit2 = model.iter_children(tempit)
797 #if no children, then take the tasks on the same level
798- if not tempit2 :
799+ if not tempit2:
800 tempit2 = model.iter_next(tempit)
801 #if no task on the same level, go back to the parent
802 #and then to the next task on the parent level
803- if not tempit2 :
804+ if not tempit2:
805 tempit2 = model.iter_parent(tempit)
806- if tempit2 :
807+ if tempit2:
808 tempit2 = model.iter_next(tempit2)
809 tempit = tempit2
810- if it :
811- selection = self.task_tview.get_selection()
812+ if it:
813+ selection = self.task_tview.get_selection()
814 selection.select_iter(it)
815
816-
817-
818- def do_refresh(self,sender=None,param=None,toselect=None) : #pylint: disable-msg=W0613
819+ def do_refresh(self, sender=None, param=None, toselect=None):
820 #We ask to do the refresh in a gtk thread
821- #We use a lock_lock like described in
822+ #We use a lock_lock like described in
823 #http://ploum.frimouvy.org/?202-the-signals-and-threads-flying-circus
824- if self.refresh_lock_lock.acquire(False) :
825- gobject.idle_add(self.refresh_tb,sender,toselect)
826+ if self.refresh_lock_lock.acquire(False):
827+ gobject.idle_add(self.refresh_tb, sender, toselect)
828 #If we have something toselect, we cannot skip the refresh
829- elif toselect :
830- gobject.idle_add(self.select_task,toselect)
831-
832- #If a task asked for the refresh, we don't refresh it to avoid a loop
833- #New use refresh_tb directly, use "do_refresh"
834- def refresh_tb(self,fromtask=None,toselect=None):
835+ elif toselect:
836+ gobject.idle_add(self.select_task, toselect)
837+
838+ def refresh_tb(self, fromtask=None, toselect=None):
839+ """Refresh the task browser.
840+
841+ If a task asked for the refresh, we don't refresh it to avoid a loop
842+ New use refresh_tb directly, use "do_refresh".
843+ """
844 self.refresh_lock.acquire()
845- try :
846+ try:
847 self.refresh_lock_lock.release()
848 current_pane = self.main_pane.get_child()
849- if self.noteview :
850- if current_pane == self.task_tview :
851+ if self.noteview:
852+ if current_pane == self.task_tview:
853 self.main_pane.remove(current_pane)
854 self.main_pane.add(self.note_tview)
855 self.refresh_note()
856- else :
857- if current_pane == self.note_tview :
858+ else:
859+ if current_pane == self.note_tview:
860 self.main_pane.remove(current_pane)
861 self.main_pane.add(self.task_tview)
862 self.refresh_list(toselect=toselect)
863 self.refresh_closed()
864 self.refresh_tags()
865 #Refreshing the opened editors
866- for uid in self.opened_task :
867- if uid != fromtask :
868+ for uid in self.opened_task:
869+ if uid != fromtask:
870 self.opened_task[uid].refresh_editor()
871- finally :
872+ finally:
873 self.refresh_lock.release()
874
875+ def refresh_tags(self):
876+ """Refresh the tag list.
877
878- #We refresh the tag list. Not needed very often
879- def refresh_tags(self) :
880+ Not needed very often.
881+ """
882 select = self.tag_tview.get_selection()
883 t_path = None
884- if select :
885- t_model,t_path = select.get_selected_rows() #pylint: disable-msg=W0612
886+ if select:
887+ t_model, t_path = select.get_selected_rows()
888 self.tag_ts.clear()
889- alltag = self.req.get_alltag_tag()
890- notag = self.req.get_notag_tag()
891- if self.workview :
892+ alltag = self.req.get_alltag_tag()
893+ notag = self.req.get_notag_tag()
894+ if self.workview:
895 count_all_task = len(self.req.get_active_tasks_list(workable=True))
896- count_no_tags = len(self.req.get_active_tasks_list(notag_only=True,\
897- workable=True))
898- else :
899+ count_no_tags = len(
900+ self.req.get_active_tasks_list(notag_only=True, workable=True))
901+ else:
902 count_all_task = len(self.req.get_tasks_list(started_only=False))
903- count_no_tags = len(self.req.get_tasks_list(notag_only=True,\
904- started_only=False))
905-
906- self.tag_ts.append([alltag,None,_("<span weight=\"bold\">All tags</span>"),str(count_all_task),False])
907- self.tag_ts.append([notag,None,_("<span weight=\"bold\">Tasks without tags</span>"),str(count_no_tags),False])
908- self.tag_ts.append([None,None,"","",True])
909+ count_no_tags = len(
910+ self.req.get_tasks_list(notag_only=True, started_only=False))
911+
912+ self.tag_ts.append(
913+ [alltag, None, _("<span weight=\"bold\">All tags</span>"),
914+ str(count_all_task), False])
915+ self.tag_ts.append(
916+ [notag, None, _("<span weight=\"bold\">Tasks without tags</span>"),
917+ str(count_no_tags), False])
918+ self.tag_ts.append([None, None, "", "", True])
919
920 tags = self.req.get_used_tags()
921-
922- tags.sort(cmp=lambda x,y: cmp(x.get_name().lower(),y.get_name().lower()))
923+
924+ tags.sort(
925+ cmp=lambda x, y: cmp(x.get_name().lower(), y.get_name().lower()))
926
927 for tag in tags:
928 color = tag.get_attribute("color")
929- if self.workview :
930- count = len(self.req.get_active_tasks_list(tags=[tag],workable=True))
931- else :
932- count = len(self.req.get_tasks_list(started_only=False,tags=[tag]))
933+ if self.workview:
934+ count = len(
935+ self.req.get_active_tasks_list(tags=[tag], workable=True))
936+ else:
937+ count = len(
938+ self.req.get_tasks_list(started_only=False, tags=[tag]))
939 #We display the tags without the "@" (but we could)
940 if count != 0:
941- self.tag_ts.append([tag,color,tag.get_name()[1:], str(count), False])
942-
943+ self.tag_ts.append(
944+ [tag, color, tag.get_name()[1:], str(count), False])
945+
946 #We reselect the selected tag
947- if t_path :
948- for i in t_path :
949+ if t_path:
950+ for i in t_path:
951 self.tag_tview.get_selection().select_path(i)
952
953- def tag_separator_filter(self, model, itera, user_data=None):#pylint: disable-msg=W0613
954+ def tag_separator_filter(self, model, itera, user_data=None):
955 return model.get_value(itera, self.TAGS_MODEL_SEP)
956-
957- def update_collapsed_row(self, model, path, itera, user_data): #pylint: disable-msg=W0613
958+
959+ def update_collapsed_row(self, model, path, itera, user_data):
960 """Build a list of task that must showed as collapsed in Treeview"""
961- tid = self.task_ts.get_value(itera,0)
962+ tid = self.task_ts.get_value(itera, 0)
963 # Remove expanded rows
964- if self.task_ts.iter_has_child(itera) and \
965- self.task_tview.row_expanded(path) and \
966- tid in self.priv["collapsed_tid"]:
967+ if (self.task_ts.iter_has_child(itera) and
968+ self.task_tview.row_expanded(path) and
969+ tid in self.priv["collapsed_tid"]):
970
971 self.priv["collapsed_tid"].remove(tid)
972
973 # Append collapsed rows
974- elif self.task_ts.iter_has_child(itera) and \
975- not self.task_tview.row_expanded(path) and \
976- tid not in self.priv["collapsed_tid"]:
977+ elif (self.task_ts.iter_has_child(itera) and
978+ not self.task_tview.row_expanded(path) and
979+ tid not in self.priv["collapsed_tid"]):
980
981 self.priv["collapsed_tid"].append(tid)
982
983 return False # Return False or the TreeModel.foreach() function ends
984-
985- def restore_collapsed(self,treeview,path,data) :
986+
987+ def restore_collapsed(self, treeview, path, data):
988 itera = self.task_ts.get_iter(path)
989- tid = self.task_ts.get_value(itera,0)
990- if tid in self.priv["collapsed_tid"] :
991+ tid = self.task_ts.get_value(itera, 0)
992+ if tid in self.priv["collapsed_tid"]:
993 treeview.collapse_row(path)
994-
995- #refresh list build/refresh your TreeStore of task
996- #to keep it in sync with your self.projects
997- def refresh_list(self,a=None,toselect=None) : #pylint: disable-msg=W0613
998-
999+
1000+ def refresh_list(self, a=None, toselect=None):
1001+ """Refresh or build the TreeStore of tasks."""
1002+
1003 # Save collapsed rows
1004 self.task_ts.foreach(self.update_collapsed_row, None)
1005-
1006- #selected tasks :
1007+
1008+ #selected tasks:
1009 selected_uid = self.get_selected_task(self.task_tview)
1010 tselect = self.task_tview.get_selection()
1011 t_path = None
1012- if tselect :
1013- t_model,t_path = tselect.get_selected_rows() #pylint: disable-msg=W0612
1014-
1015- #Scroll position :
1016+ if tselect:
1017+ t_model, t_path = tselect.get_selected_rows()
1018+
1019+ #Scroll position:
1020 vscroll_value = self.task_tview.get_vadjustment().get_value()
1021- hscroll_value = self.task_tview.get_hadjustment().get_value()
1022-
1023+ hscroll_value = self.task_tview.get_hadjustment().get_value()
1024+
1025 #to refresh the list we build a new treestore then replace the existing
1026 new_taskts = treetools.new_task_ts(dnd_func=self.row_dragndrop)
1027- tag_list,notag_only = self.get_selected_tags()
1028+ tag_list, notag_only = self.get_selected_tags()
1029 nbr_of_tasks = 0
1030-
1031+
1032 #We build the active tasks pane
1033- if self.workview :
1034- tasks = self.req.get_active_tasks_list(tags=tag_list,\
1035- notag_only=notag_only,workable=True, started_only=False)
1036- for tid in tasks :
1037- self.add_task_tree_to_list(new_taskts,tid,None,selected_uid,\
1038- treeview=False)
1039+ if self.workview:
1040+ tasks = self.req.get_active_tasks_list(
1041+ tags=tag_list, notag_only=notag_only, workable=True,
1042+ started_only=False)
1043+ for tid in tasks:
1044+ self.add_task_tree_to_list(
1045+ new_taskts, tid, None, selected_uid, treeview=False)
1046 nbr_of_tasks = len(tasks)
1047-
1048- else :
1049+
1050+ else:
1051 #building the classical treeview
1052- active_root_tasks = self.req.get_active_tasks_list(tags=tag_list,\
1053- notag_only=notag_only, is_root=True, started_only=False)
1054- active_tasks = self.req.get_active_tasks_list(tags=tag_list,\
1055- notag_only=notag_only, is_root=False, started_only=False)
1056- for tid in active_root_tasks :
1057- self.add_task_tree_to_list(new_taskts, tid, None,\
1058- selected_uid,active_tasks=active_tasks)
1059+ active_root_tasks = self.req.get_active_tasks_list(
1060+ tags=tag_list, notag_only=notag_only, is_root=True,
1061+ started_only=False)
1062+ active_tasks = self.req.get_active_tasks_list(
1063+ tags=tag_list, notag_only=notag_only, is_root=False,
1064+ started_only=False)
1065+ for tid in active_root_tasks:
1066+ self.add_task_tree_to_list(
1067+ new_taskts, tid, None, selected_uid,
1068+ active_tasks=active_tasks)
1069 nbr_of_tasks = len(active_tasks)
1070-
1071- #Set the title of the window :
1072- if nbr_of_tasks == 0 :
1073+
1074+ #Set the title of the window:
1075+ if nbr_of_tasks == 0:
1076 parenthesis = _("(no active tasks)")
1077- elif nbr_of_tasks == 1 :
1078+ elif nbr_of_tasks == 1:
1079 parenthesis = _("(1 active task)")
1080- else :
1081+ else:
1082 parenthesis = "(%s active tasks)"%nbr_of_tasks
1083 self.window.set_title("Getting Things GNOME! %s"%parenthesis)
1084 self.task_tview.set_model(new_taskts)
1085 self.task_ts = new_taskts
1086 #We expand all the we close the tasks who were not saved as "expanded"
1087 self.task_tview.expand_all()
1088- self.task_tview.map_expanded_rows(self.restore_collapsed,None)
1089+ self.task_tview.map_expanded_rows(self.restore_collapsed, None)
1090 # Restore sorting
1091- if not self.noteview :
1092- if self.priv["tasklist"].has_key("sort_column") and \
1093- self.priv["tasklist"].has_key("sort_order") :
1094- if self.priv["tasklist"]["sort_column"] is not None and \
1095- self.priv["tasklist"]["sort_order"] is not None :
1096- self.sort_tasklist_rows(self.priv["tasklist"]["sort_column"], \
1097- self.priv["tasklist"]["sort_order"])
1098+ if not self.noteview:
1099+ # XXX: This can be done much more simply using {}.get(). -- jml,
1100+ # 2009-07-18.
1101+ if ('sort_column' in self.priv["tasklist"] and
1102+ 'sort_order' in self.priv["tasklist"]):
1103+ if (self.priv["tasklist"]["sort_column"] is not None and
1104+ self.priv["tasklist"]["sort_order"] is not None):
1105+ self.sort_tasklist_rows(
1106+ self.priv["tasklist"]["sort_column"],
1107+ self.priv["tasklist"]["sort_order"])
1108 #We reselect the selected tasks
1109- if toselect :
1110+ if toselect:
1111 self.select_task(toselect)
1112- elif t_path :
1113+ elif t_path:
1114 selection = self.task_tview.get_selection()
1115- for i in t_path :
1116+ for i in t_path:
1117 selection.select_path(i)
1118-
1119- #scroll position
1120- #We have to call that in another thread, else it will not work
1121- def restore_vscroll(old_position) :
1122+
1123+ def restore_vscroll(old_position):
1124 vadjust = self.task_tview.get_vadjustment()
1125 #We ensure that we will not scroll out of the window
1126 #It was bug #331285
1127- vscroll = min(old_position,(vadjust.upper - vadjust.page_size))
1128+ vscroll = min(old_position, (vadjust.upper - vadjust.page_size))
1129 vadjust.set_value(vscroll)
1130- def restore_hscroll(old_position) :
1131+
1132+ def restore_hscroll(old_position):
1133 hadjust = self.task_tview.get_hadjustment()
1134- hscroll = min(old_position,(hadjust.upper - hadjust.page_size))
1135+ hscroll = min(old_position, (hadjust.upper - hadjust.page_size))
1136 hadjust.set_value(hscroll)
1137- gobject.idle_add(restore_vscroll,vscroll_value)
1138- gobject.idle_add(restore_hscroll,hscroll_value)
1139-
1140- #Refresh the closed tasks pane
1141- def refresh_closed(self) :
1142+
1143+ #scroll position
1144+ #We have to call that in another thread, else it will not work
1145+ gobject.idle_add(restore_vscroll, vscroll_value)
1146+ gobject.idle_add(restore_hscroll, hscroll_value)
1147+
1148+ def refresh_closed(self):
1149+ """Refresh the closed tasks pane."""
1150 #We build the closed tasks pane
1151 dselect = self.taskdone_tview.get_selection()
1152 d_path = None
1153- if dselect :
1154- d_model,d_path = dselect.get_selected_rows() #pylint: disable-msg=W0612
1155+ if dselect:
1156+ d_model, d_path = dselect.get_selected_rows()
1157 #We empty the pane
1158 self.taskdone_ts.clear()
1159 #We rebuild it
1160- tag_list,notag_only = self.get_selected_tags()
1161- closed_tasks = self.req.get_closed_tasks_list(tags=tag_list,\
1162- notag_only=notag_only)
1163- for tid in closed_tasks :
1164- t = self.req.get_task(tid)
1165- title_str = saxutils.escape(t.get_title())
1166- closeddate = t.get_closed_date()
1167+ tag_list, notag_only = self.get_selected_tags()
1168+ closed_tasks = self.req.get_closed_tasks_list(
1169+ tags=tag_list, notag_only=notag_only)
1170+ for tid in closed_tasks:
1171+ t = self.req.get_task(tid)
1172+ title_str = saxutils.escape(t.get_title())
1173+ closeddate = t.get_closed_date()
1174 closeddate_str = closeddate
1175- tags = t.get_tags()
1176- if self.priv["bg_color_enable"] and t.has_tags() :
1177+ tags = t.get_tags()
1178+ if self.priv["bg_color_enable"] and t.has_tags():
1179 my_color = colors.background_color(t.get_tags())
1180 else:
1181 my_color = None
1182 if t.get_status() == "Dismiss":
1183- title_str = "<span color=\"#AAAAAA\">%s</span>" % title_str
1184- closeddate_str = "<span color=\"#AAAAAA\">%s</span>" % closeddate
1185- self.taskdone_ts.append(None,[tid,t.get_color(),title_str,closeddate,closeddate_str,my_color,tags])
1186+ title_str = "<span color=\"#AAAAAA\">%s</span>" % title_str
1187+ closeddate_str = (
1188+ "<span color=\"#AAAAAA\">%s</span>" % closeddate)
1189+ self.taskdone_ts.append(
1190+ None,
1191+ [tid, t.get_color(), title_str, closeddate, closeddate_str,
1192+ my_color, tags])
1193 closed_selection = self.taskdone_tview.get_selection()
1194- if d_path :
1195- for i in d_path :
1196+ if d_path:
1197+ for i in d_path:
1198 closed_selection.select_path(i)
1199- self.taskdone_ts.set_sort_column_id(self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
1200-
1201- #Refresh the notes pane
1202- def refresh_note(self) :
1203+ self.taskdone_ts.set_sort_column_id(
1204+ self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
1205+
1206+ def refresh_note(self):
1207+ """Refresh the notes pane."""
1208 #We build the notes pane
1209 dselect = self.note_tview.get_selection()
1210 d_path = None
1211- if dselect :
1212- d_model,d_path = dselect.get_selected_rows() #pylint: disable-msg=W0612
1213+ if dselect:
1214+ d_model, d_path = dselect.get_selected_rows()
1215 #We empty the pane
1216 self.note_ts.clear()
1217 #We rebuild it
1218- tag_list,notag_only = self.get_selected_tags()
1219+ tag_list, notag_only = self.get_selected_tags()
1220 notes = self.req.get_notes_list(tags=tag_list, notag_only=notag_only)
1221- for tid in notes :
1222- t = self.req.get_task(tid)
1223- title_str = saxutils.escape(t.get_title())
1224- self.note_ts.append(None,[tid,t.get_color(),title_str])
1225+ for tid in notes:
1226+ t = self.req.get_task(tid)
1227+ title_str = saxutils.escape(t.get_title())
1228+ self.note_ts.append(None, [tid, t.get_color(), title_str])
1229 note_selection = self.note_tview.get_selection()
1230- if d_path :
1231- for i in d_path :
1232+ if d_path:
1233+ for i in d_path:
1234 note_selection.select_path(i)
1235- #self.note_ts.set_sort_column_id(self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
1236-
1237- #Add tasks to a treeview. If treeview is False, it becomes a flat list
1238- def add_task_tree_to_list(self, tree_store, tid, parent, selected_uid=None,\
1239- active_tasks=[], treeview=True):
1240- task = self.req.get_task(tid)
1241+ #self.note_ts.set_sort_column_id(self.CTASKS_MODEL_DDATE,
1242+ #gtk.SORT_DESCENDING)
1243+
1244+ def add_task_tree_to_list(self, tree_store, tid, parent, selected_uid=None,
1245+ active_tasks=[], treeview=True):
1246+ """Add tasks to a treeview.
1247+
1248+ If 'treeview' is False, it becomes a flat list.
1249+ """
1250+ task = self.req.get_task(tid)
1251 st_count = self.__count_tasks_rec(task, active_tasks)
1252- if selected_uid and selected_uid == tid :
1253+ if selected_uid and selected_uid == tid:
1254 # Temporarily disabled
1255- #title = self.__build_task_title(task,extended=True)
1256- title_str = self.__build_task_title(task, st_count, extended=False)
1257- else :
1258- title_str = self.__build_task_title(task, st_count, extended=False)
1259-
1260+ #title = self.__build_task_title(task, extended=True)
1261+ title_str = self.__build_task_title(task, st_count, extended=False)
1262+ else:
1263+ title_str = self.__build_task_title(task, st_count, extended=False)
1264+
1265
1266 # Extract data
1267- title = saxutils.escape(task.get_title())
1268+ title = saxutils.escape(task.get_title())
1269 duedate_str = task.get_due_date()
1270- left_str = task.get_days_left()
1271- tags = task.get_tags()
1272- if self.priv["bg_color_enable"] :
1273+ left_str = task.get_days_left()
1274+ tags = task.get_tags()
1275+ if self.priv["bg_color_enable"]:
1276 my_color = colors.background_color(tags)
1277 else:
1278 my_color = None
1279-
1280+
1281 if not parent and len(task.get_subtasks()) == 0:
1282 itera = tree_store.get_iter_first()
1283- my_row = tree_store.insert_before(None, itera, row=[tid,title,title_str,duedate_str,left_str,tags,my_color])
1284+ my_row = tree_store.insert_before(
1285+ None, itera,
1286+ row=[tid, title, title_str, duedate_str, left_str, tags,
1287+ my_color])
1288 else:
1289 #None should be "parent" but crashing with thread
1290- my_row = tree_store.append(parent,\
1291- [tid,title,title_str,duedate_str,left_str,tags,my_color])
1292+ my_row = tree_store.append(
1293+ parent,
1294+ [tid, title, title_str, duedate_str, left_str, tags, my_color])
1295 #If treeview, we add add the active childs
1296- if treeview :
1297+ if treeview:
1298 for c in task.get_subtasks():
1299 cid = c.get_id()
1300 if cid in active_tasks:
1301 #None should be cid
1302- self.add_task_tree_to_list(tree_store, cid, my_row,selected_uid,\
1303- active_tasks=active_tasks)
1304-
1305- #This function is called when the selection change in the closed task view
1306- #It will displays the selected task differently
1307- def taskdone_cursor_changed(self,selection=None) :
1308+ self.add_task_tree_to_list(
1309+ tree_store, cid, my_row, selected_uid,
1310+ active_tasks=active_tasks)
1311+
1312+ def taskdone_cursor_changed(self, selection=None):
1313+ """Called when selection changes in closed task view.
1314+
1315+ Changes the way the selected task is displayed.
1316+ """
1317 #We unselect all in the active task view
1318 #Only if something is selected in the closed task list
1319 #And we change the status of the Done/dismiss button
1320 self.donebutton.set_icon_name("gtg-task-done")
1321 self.dismissbutton.set_icon_name("gtg-task-dismiss")
1322- if selection.count_selected_rows() > 0 :
1323+ if selection.count_selected_rows() > 0:
1324 tid = self.get_selected_task(self.taskdone_tview)
1325 task = self.req.get_task(tid)
1326 self.task_tview.get_selection().unselect_all()
1327 self.note_tview.get_selection().unselect_all()
1328- if task.get_status() == "Dismiss" :
1329- self.wTree.get_widget("ctcm_mark_as_not_done").set_sensitive(False)
1330+ if task.get_status() == "Dismiss":
1331+ self.wTree.get_widget(
1332+ "ctcm_mark_as_not_done").set_sensitive(False)
1333 self.wTree.get_widget("ctcm_undismiss").set_sensitive(True)
1334 self.dismissbutton.set_label(GnomeConfig.MARK_UNDISMISS)
1335 self.donebutton.set_label(GnomeConfig.MARK_DONE)
1336 self.donebutton.set_tooltip_text(GnomeConfig.MARK_DONE_TOOLTIP)
1337 self.dismissbutton.set_icon_name("gtg-task-undismiss")
1338- self.dismissbutton.set_tooltip_text(GnomeConfig.MARK_UNDISMISS_TOOLTIP)
1339+ self.dismissbutton.set_tooltip_text(
1340+ GnomeConfig.MARK_UNDISMISS_TOOLTIP)
1341 # self.editbutton.connect('clicked', self.on_edit_done_task)
1342 # self.edit_mi.connect('activate', self.on_edit_done_task)
1343- else :
1344- self.wTree.get_widget("ctcm_mark_as_not_done").set_sensitive(True)
1345+ else:
1346+ self.wTree.get_widget(
1347+ "ctcm_mark_as_not_done").set_sensitive(True)
1348 self.wTree.get_widget("ctcm_undismiss").set_sensitive(False)
1349 self.donebutton.set_label(GnomeConfig.MARK_UNDONE)
1350- self.donebutton.set_tooltip_text(GnomeConfig.MARK_UNDONE_TOOLTIP)
1351+ self.donebutton.set_tooltip_text(
1352+ GnomeConfig.MARK_UNDONE_TOOLTIP)
1353 self.dismissbutton.set_label(GnomeConfig.MARK_DISMISS)
1354- self.dismissbutton.set_tooltip_text(GnomeConfig.MARK_DISMISS_TOOLTIP)
1355+ self.dismissbutton.set_tooltip_text(
1356+ GnomeConfig.MARK_DISMISS_TOOLTIP)
1357 self.donebutton.set_icon_name("gtg-task-undone")
1358 # self.editbutton.connect('clicked', self.on_edit_active_task)
1359 # self.edit_mi.connect('activate', self.on_edit_active_task)
1360-
1361- #This function is called when the selection change in the active task view
1362- #It will displays the selected task differently
1363- def task_cursor_changed(self,selection=None) :
1364+
1365+ def task_cursor_changed(self, selection=None):
1366+ """Called when selection changes in the active task view.
1367+
1368+ Changes the way the selected task is displayed.
1369+ """
1370 #We unselect all in the closed task view
1371 #Only if something is selected in the active task list
1372 self.donebutton.set_icon_name("gtg-task-done")
1373 self.dismissbutton.set_icon_name("gtg-task-dismiss")
1374- if selection.count_selected_rows() > 0 :
1375+ if selection.count_selected_rows() > 0:
1376 self.taskdone_tview.get_selection().unselect_all()
1377 self.note_tview.get_selection().unselect_all()
1378 self.donebutton.set_label(GnomeConfig.MARK_DONE)
1379 self.donebutton.set_tooltip_text(GnomeConfig.MARK_DONE_TOOLTIP)
1380 self.dismissbutton.set_label(GnomeConfig.MARK_DISMISS)
1381 #We reset the previously selected task
1382- if self.selected_rows and self.task_ts.iter_is_valid(self.selected_rows):
1383- tid = self.task_ts.get_value(self.selected_rows, self.TASK_MODEL_OBJ)
1384+ if (self.selected_rows
1385+ and self.task_ts.iter_is_valid(self.selected_rows)):
1386+ tid = self.task_ts.get_value(
1387+ self.selected_rows, self.TASK_MODEL_OBJ)
1388 task = self.req.get_task(tid)
1389- title = self.__build_task_title(task,extended=False)
1390- self.task_ts.set_value(self.selected_rows,self.TASK_MODEL_TITLE,title)
1391+ title = self.__build_task_title(task, extended=False)
1392+ self.task_ts.set_value(
1393+ self.selected_rows, self.TASK_MODEL_TITLE, title)
1394 #We change the selection title
1395- #if selection :
1396- #ts,itera = selection.get_selected() #pylint: disable-msg=W0612
1397- #if itera and self.task_ts.iter_is_valid(itera) :
1398+ #if selection:
1399+ #ts, itera = selection.get_selected() #pylint: disable-msg=W0612
1400+ #if itera and self.task_ts.iter_is_valid(itera):
1401 #tid = self.task_ts.get_value(itera, self.TASK_MODEL_OBJ)
1402 #task = self.req.get_task(tid)
1403 #self.selected_rows = itera
1404 # Extended title is temporarily disabled
1405- #title = self.__build_task_title(task,extended=True)
1406- #title = self.__build_task_title(task,extended=False)
1407- #self.task_ts.set_value(self.selected_rows,self.TASK_MODEL_TITLE,title)
1408-
1409- def note_cursor_changed(self,selection=None) :
1410+ #title = self.__build_task_title(task, extended=True)
1411+ #title = self.__build_task_title(task, extended=False)
1412+ #self.task_ts.set_value(
1413+ # self.selected_rows, self.TASK_MODEL_TITLE, title)
1414+
1415+ def note_cursor_changed(self, selection=None):
1416 #We unselect all in the closed task view
1417 #Only if something is selected in the active task list
1418- if selection.count_selected_rows() > 0 :
1419+ if selection.count_selected_rows() > 0:
1420 self.taskdone_tview.get_selection().unselect_all()
1421 self.task_tview.get_selection().unselect_all()
1422
1423@@ -1114,48 +1173,53 @@
1424 else:
1425 count = count + 1
1426 return count
1427-
1428- def __build_task_title(self,task,count,extended=False):
1429+
1430+ def __build_task_title(self, task, count, extended=False):
1431 simple_title = saxutils.escape(task.get_title())
1432- if extended :
1433+ if extended:
1434 excerpt = task.get_excerpt(lines=2)
1435- if excerpt.strip() != "" :
1436- title = "<b><big>%s</big></b>\n<small>%s</small>" %(simple_title,excerpt)
1437- else :
1438- title = "<b><big>%s</big></b>" %simple_title
1439- else :
1440+ if excerpt.strip() != "":
1441+ title = "<b><big>%s</big></b>\n<small>%s</small>" % (
1442+ simple_title, excerpt)
1443+ else:
1444+ title = "<b><big>%s</big></b>" %simple_title
1445+ else:
1446 if (not self.workview):
1447 if count == 0:
1448- title = "<span>%s</span>" % (simple_title )
1449+ title = "<span>%s</span>" % simple_title
1450 else:
1451- title = "<span>%s (%s)</span>" % (simple_title , count )
1452+ title = "<span>%s (%s)</span>" % (simple_title, count)
1453 else:
1454- title = simple_title
1455+ title = simple_title
1456 return title
1457
1458- #If a Task editor is already opened for a given task, we present it
1459- #Else, we create a new one.
1460- def open_task(self,uid) :
1461+ def open_task(self, uid):
1462+ """Open the task identified by 'uid'.
1463+
1464+ If a Task editor is already opened for a given task, we present it.
1465+ Else, we create a new one.
1466+ """
1467 t = self.req.get_task(uid)
1468- if self.opened_task.has_key(uid) :
1469+ if uid in self.opened_task:
1470 self.opened_task[uid].present()
1471- else :
1472- tv = TaskEditor(self.req,t,self.do_refresh,self.on_delete_task,
1473- self.close_task,self.open_task,self.get_tasktitle,
1474- notes=self.notes)
1475+ else:
1476+ tv = TaskEditor(
1477+ self.req, t, self.do_refresh, self.on_delete_task,
1478+ self.close_task, self.open_task, self.get_tasktitle,
1479+ notes=self.notes)
1480 #registering as opened
1481 self.opened_task[uid] = tv
1482-
1483- def get_tasktitle(self,tid) :
1484+
1485+ def get_tasktitle(self, tid):
1486 task = self.req.get_task(tid)
1487 return task.get_title()
1488-
1489- #When an editor is closed, it should deregister itself
1490- def close_task(self,tid) :
1491- if self.opened_task.has_key(tid) :
1492+
1493+ def close_task(self, tid):
1494+ # When an editor is closed, it should deregister itself.
1495+ if tid in self.opened_task:
1496 del self.opened_task[tid]
1497
1498- def on_tag_treeview_button_press_event(self,treeview,event) :
1499+ def on_tag_treeview_button_press_event(self, treeview, event):
1500 if event.button == 3:
1501 x = int(event.x)
1502 y = int(event.y)
1503@@ -1174,8 +1238,8 @@
1504 selected_tag = selected_tags[0]
1505 nonworkview = selected_tag.get_attribute("nonworkview")
1506 # We must invert because the tagstore has "True" for tasks
1507- # that are *not* in workview, and the checkbox is set if the
1508- # tag *is* shown in the workview.
1509+ # that are *not* in workview, and the checkbox is set if
1510+ # the tag *is* shown in the workview.
1511 if nonworkview == "True":
1512 shown = False
1513 else:
1514@@ -1184,178 +1248,180 @@
1515 self.tagpopup.popup(None, None, None, event.button, time)
1516 return 1
1517
1518- def on_nonworkviewtag_toggled(self,widget) : #pylint: disable-msg=W0613
1519+ def on_nonworkviewtag_toggled(self, widget): #pylint: disable-msg=W0613
1520 tags = self.get_selected_tags()[0]
1521 nonworkview_item = self.tagpopup.get_children()[1]
1522 #We must inverse because the tagstore has True
1523 #for tasks that are not in workview (and also convert to string)
1524 toset = str(not nonworkview_item.get_active())
1525- if len(tags) > 0 :
1526- tags[0].set_attribute("nonworkview",toset)
1527+ if len(tags) > 0:
1528+ tags[0].set_attribute("nonworkview", toset)
1529 self.do_refresh()
1530
1531- def on_task_treeview_button_press_event(self,treeview,event) :
1532- if event.button == 3:
1533- x = int(event.x)
1534- y = int(event.y)
1535- time = event.time
1536- pthinfo = treeview.get_path_at_pos(x, y)
1537- if pthinfo is not None:
1538- path, col, cellx, celly = pthinfo #pylint: disable-msg=W0612
1539- treeview.grab_focus()
1540- treeview.set_cursor( path, col, 0)
1541- self.taskpopup.popup( None, None, None, event.button, time)
1542- return 1
1543-
1544- def on_task_treeview_key_press_event(self,treeview,event) :
1545- if gtk.gdk.keyval_name(event.keyval) == "Delete":
1546- self.on_delete_task()
1547-
1548- def on_closed_task_treeview_button_press_event(self,treeview,event) :
1549- if event.button == 3:
1550- x = int(event.x)
1551- y = int(event.y)
1552- time = event.time
1553- pthinfo = treeview.get_path_at_pos(x, y)
1554- if pthinfo is not None:
1555- path, col, cellx, celly = pthinfo #pylint: disable-msg=W0612
1556- treeview.grab_focus()
1557- treeview.set_cursor( path, col, 0)
1558- self.closedtaskpopup.popup( None, None, None, event.button, time)
1559- return 1
1560-
1561- def on_closed_task_treeview_key_press_event(self,treeview,event) :
1562- if gtk.gdk.keyval_name(event.keyval) == "Delete":
1563- self.on_delete_task()
1564-
1565- def on_add_task(self,widget,status=None) : #pylint: disable-msg=W0613
1566- tags,notagonly = self.get_selected_tags() #pylint: disable-msg=W0612
1567- task = self.req.new_task(tags=tags,newtask=True)
1568+ def on_task_treeview_button_press_event(self, treeview, event):
1569+ if event.button == 3:
1570+ x = int(event.x)
1571+ y = int(event.y)
1572+ time = event.time
1573+ pthinfo = treeview.get_path_at_pos(x, y)
1574+ if pthinfo is not None:
1575+ path, col, cellx, celly = pthinfo #pylint: disable-msg=W0612
1576+ treeview.grab_focus()
1577+ treeview.set_cursor(path, col, 0)
1578+ self.taskpopup.popup(None, None, None, event.button, time)
1579+ return 1
1580+
1581+ def on_task_treeview_key_press_event(self, treeview, event):
1582+ if gtk.gdk.keyval_name(event.keyval) == "Delete":
1583+ self.on_delete_task()
1584+
1585+ def on_closed_task_treeview_button_press_event(self, treeview, event):
1586+ if event.button == 3:
1587+ x = int(event.x)
1588+ y = int(event.y)
1589+ time = event.time
1590+ pthinfo = treeview.get_path_at_pos(x, y)
1591+ if pthinfo is not None:
1592+ path, col, cellx, celly = pthinfo #pylint: disable-msg=W0612
1593+ treeview.grab_focus()
1594+ treeview.set_cursor(path, col, 0)
1595+ self.closedtaskpopup.popup(
1596+ None, None, None, event.button, time)
1597+ return 1
1598+
1599+ def on_closed_task_treeview_key_press_event(self, treeview, event):
1600+ if gtk.gdk.keyval_name(event.keyval) == "Delete":
1601+ self.on_delete_task()
1602+
1603+ def on_add_task(self, widget, status=None): #pylint: disable-msg=W0613
1604+ tags, notagonly = self.get_selected_tags() #pylint: disable-msg=W0612
1605+ task = self.req.new_task(tags=tags, newtask=True)
1606 uid = task.get_id()
1607- if status :
1608+ if status:
1609 task.set_status(status)
1610 self.open_task(uid)
1611
1612- def on_add_subtask(self,widget) : #pylint: disable-msg=W0613
1613+ def on_add_subtask(self, widget): #pylint: disable-msg=W0613
1614 uid = self.get_selected_task()
1615- if uid :
1616- zetask = self.req.get_task(uid)
1617- tags = zetask.get_tags()
1618- task = self.req.new_task(tags=tags,newtask=True)
1619+ if uid:
1620+ zetask = self.req.get_task(uid)
1621+ tags = zetask.get_tags()
1622+ task = self.req.new_task(tags=tags, newtask=True)
1623 task.add_parent(uid)
1624 zetask.add_subtask(task.get_id())
1625 self.open_task(task.get_id())
1626 self.do_refresh()
1627-
1628- #Get_selected_task returns the uid :
1629- # uid (example : '21@1')
1630- #By default, we select in the task_tview
1631- def get_selected_task(self,tv=None) :
1632+
1633+ def get_selected_task(self, tv=None):
1634+ """Return the 'uid' of the selected task
1635+
1636+ :param tv: The tree view to find the selected task in. Defaults to
1637+ the task_tview.
1638+ """
1639 uid = None
1640- if not tv :
1641+ if not tv:
1642 tview = self.task_tview
1643- else :
1644+ else:
1645 tview = tv
1646 # Get the selection in the gtk.TreeView
1647 selection = tview.get_selection()
1648 #If we don't have anything and no tview specified
1649 #Let's have a look in the closed task view
1650- if selection and selection.count_selected_rows() <= 0 and not tv :
1651+ if selection and selection.count_selected_rows() <= 0 and not tv:
1652 tview = self.taskdone_tview
1653 selection = tview.get_selection()
1654 #Then in the notes pane
1655- if selection and selection.count_selected_rows() <= 0 and not tv :
1656+ if selection and selection.count_selected_rows() <= 0 and not tv:
1657 tview = self.note_tview
1658 selection = tview.get_selection()
1659 # Get the selection iter
1660- if selection :
1661- model, selection_iter = selection.get_selected() #pylint: disable-msg=W0612
1662- if selection_iter :
1663+ if selection:
1664+ model, selection_iter = selection.get_selected()
1665+ if selection_iter:
1666 ts = tview.get_model()
1667 uid = ts.get_value(selection_iter, 0)
1668 return uid
1669
1670- def get_selected_tags(self) :
1671+ def get_selected_tags(self):
1672 t_selected = self.tag_tview.get_selection()
1673 t_iter = None
1674- if t_selected :
1675- tmodel, t_iter = t_selected.get_selected() #pylint: disable-msg=W0612
1676+ if t_selected:
1677+ tmodel, t_iter = t_selected.get_selected()
1678 notag_only = False
1679 tag = []
1680- if t_iter :
1681+ if t_iter:
1682 selected = self.tag_ts.get_value(t_iter, 0)
1683 special = selected.get_attribute("special")
1684- if special == "all" :
1685+ if special == "all":
1686 tag = []
1687 selected = None
1688 #notag means we want to display only tasks without any tag
1689- if special == "notag" :
1690+ if special == "notag":
1691 notag_only = True
1692- if not notag_only and selected :
1693+ if not notag_only and selected:
1694 tag.append(selected)
1695 #If no selection, we display all
1696- return tag,notag_only
1697-
1698- ###################
1699- #Drag-drop support#
1700- ###################
1701- #Because of bug in pygtk, the rows-reordered signal is never emitted
1702- #We workaoround this bug by connecting to row_insert and row_deleted
1703- #Basically, we do the following :
1704- # 1. If a row is inserted for a task X, look if the task already
1705- # exist elsewhere.
1706- # 2. If yes, it's probably a drag-n-drop so we save those information
1707- # 3. If the "elsewhere" from point 1 is deleted, we are sure it's a
1708- # drag-n-drop so we change the parent of the moved task
1709- def row_dragndrop(self,tree, path, it,data=None) : #pylint: disable-msg=W0613
1710- if data == "insert" :
1711+ return tag, notag_only
1712+
1713+ def row_dragndrop(self, tree, path, it, data=None):
1714+ """Drag and drop support."""
1715+ #Because of bug in pygtk, the rows-reordered signal is never emitted
1716+ #We workaoround this bug by connecting to row_insert and row_deleted
1717+ #Basically, we do the following:
1718+ # 1. If a row is inserted for a task X, look if the task already
1719+ # exist elsewhere.
1720+ # 2. If yes, it's probably a drag-n-drop so we save those information
1721+ # 3. If the "elsewhere" from point 1 is deleted, we are sure it's a
1722+ # drag-n-drop so we change the parent of the moved task
1723+ if data == "insert":
1724 #If the row inserted already exists in another position
1725 #We are in a drag n drop case
1726- def findsource(model, path, it,data):
1727+
1728+ def findsource(model, path, it, data):
1729 path_move = tree.get_path(data[1])
1730 path_actual = tree.get_path(it)
1731- if model.get(it,0) == data[0] and path_move != path_actual:
1732+ if model.get(it, 0) == data[0] and path_move != path_actual:
1733 self.drag_sources.append(path)
1734 self.path_source = path
1735 return True
1736- else :
1737+ else:
1738 self.path_source = None
1739
1740 self.path_target = path
1741- tid = tree.get(it,0)
1742- tree.foreach(findsource,[tid,it])
1743- if self.path_source :
1744+ tid = tree.get(it, 0)
1745+ tree.foreach(findsource, [tid, it])
1746+ if self.path_source:
1747 #We will prepare the drag-n-drop
1748 iter_source = tree.get_iter(self.path_source)
1749 iter_target = tree.get_iter(self.path_target)
1750 iter_source_parent = tree.iter_parent(iter_source)
1751 iter_target_parent = tree.iter_parent(iter_target)
1752 #the tid_parent will be None for root tasks
1753- if iter_source_parent :
1754- sparent = tree.get(iter_source_parent,0)[0]
1755- else :
1756+ if iter_source_parent:
1757+ sparent = tree.get(iter_source_parent, 0)[0]
1758+ else:
1759 sparent = None
1760- if iter_target_parent :
1761- tparent = tree.get(iter_target_parent,0)[0]
1762- else :
1763+ if iter_target_parent:
1764+ tparent = tree.get(iter_target_parent, 0)[0]
1765+ else:
1766 tparent = None
1767 #If target and source are the same, we are moving
1768- #a child of the deplaced task. Indeed, children are
1769+ #a child of the deplaced task. Indeed, children are
1770 #also moved in the tree but their parents remain !
1771- if sparent != tparent :
1772+ if sparent != tparent:
1773 self.tid_source_parent = sparent
1774 self.tid_target_parent = tparent
1775 self.tid_tomove = tid[0]
1776 # "row %s will move from %s to %s"%(self.tid_tomove,\
1777- # self.tid_source_parent,self.tid_target_parent)
1778-# def row_deleted(self,tree,path,data=None) : #pylint: disable-msg=W0613
1779- elif data == "delete" :
1780+ # self.tid_source_parent, self.tid_target_parent)
1781+# def row_deleted(self, tree, path, data=None): #pylint: disable-msg=W0613
1782+ elif data == "delete":
1783 #If we are removing the path source guessed during the insertion
1784 #It confirms that we are in a drag-n-drop
1785- if path in self.drag_sources and self.tid_tomove :
1786+ if path in self.drag_sources and self.tid_tomove:
1787 self.drag_sources.remove(path)
1788 # "row %s moved from %s to %s"%(self.tid_tomove,\
1789- # self.tid_source_parent,self.tid_target_parent)
1790+ # self.tid_source_parent, self.tid_target_parent)
1791 tomove = self.req.get_task(self.tid_tomove)
1792 tomove.set_to_keep()
1793 tomove.remove_parent(self.tid_source_parent)
1794@@ -1368,70 +1434,67 @@
1795 self.tid_tomove = None
1796 self.tid_source_parent = None
1797 self.tid_target_parent = None
1798-
1799- ###############################
1800- ##### End of the drag-n-drop part
1801- ###############################
1802-
1803-
1804- def on_edit_active_task(self,widget,row=None ,col=None) : #pylint: disable-msg=W0613
1805+
1806+ def on_edit_active_task(self, widget, row=None, col=None):
1807 tid = self.get_selected_task()
1808- if tid :
1809+ if tid:
1810 self.open_task(tid)
1811- def on_edit_done_task(self,widget,row=None ,col=None) : #pylint: disable-msg=W0613
1812+
1813+ def on_edit_done_task(self, widget, row=None, col=None):
1814 tid = self.get_selected_task(self.taskdone_tview)
1815- if tid :
1816+ if tid:
1817 self.open_task(tid)
1818- def on_edit_note(self,widget,row=None,col=None) : #pylint: disable-msg=W0613
1819+
1820+ def on_edit_note(self, widget, row=None, col=None):
1821 tid = self.get_selected_task(self.note_tview)
1822- if tid :
1823+ if tid:
1824 self.open_task(tid)
1825-
1826- #if we pass a tid as a parameter, we delete directly
1827- #otherwise, we will look which tid is selected
1828- def on_delete_confirm(self,widget) : #pylint: disable-msg=W0613
1829+
1830+ def on_delete_confirm(self, widget):
1831 self.req.delete_task(self.tid_todelete)
1832 self.tid_todelete = None
1833 self.do_refresh()
1834-
1835- def on_delete_task(self,widget=None,tid=None) : #pylint: disable-msg=W0613
1836+
1837+ def on_delete_task(self, widget=None, tid=None): #pylint: disable-msg=W0613
1838 #If we don't have a parameter, then take the selection in the treeview
1839- if not tid :
1840- #tid_to_delete is a [project,task] tuple
1841+ if not tid:
1842+ #tid_to_delete is a [project, task] tuple
1843 self.tid_todelete = self.get_selected_task()
1844- else :
1845+ else:
1846 self.tid_todelete = tid
1847 #We must at least have something to delete !
1848- if self.tid_todelete :
1849+ if self.tid_todelete:
1850 delete_dialog = self.wTree.get_widget("confirm_delete")
1851 delete_dialog.run()
1852 delete_dialog.hide()
1853 #has the task been deleted ?
1854 return not self.tid_todelete
1855- else :
1856+ else:
1857 return False
1858-
1859- def on_mark_as_done(self,widget) : #pylint: disable-msg=W0613
1860- uid = self.get_selected_task()
1861- if uid :
1862- zetask = self.req.get_task(uid)
1863- status = zetask.get_status()
1864- if status == "Done" :
1865- zetask.set_status("Active")
1866- else : zetask.set_status("Done")
1867- self.do_refresh()
1868-
1869- def on_dismiss_task(self,widget) : #pylint: disable-msg=W0613
1870- uid = self.get_selected_task()
1871- if uid :
1872- zetask = self.req.get_task(uid)
1873- status = zetask.get_status()
1874- if status == "Dismiss" :
1875- zetask.set_status("Active")
1876- else : zetask.set_status("Dismiss")
1877- self.do_refresh()
1878-
1879- def on_select_tag(self, widget, row=None ,col=None) : #pylint: disable-msg=W0613
1880+
1881+ def on_mark_as_done(self, widget): #pylint: disable-msg=W0613
1882+ uid = self.get_selected_task()
1883+ if uid:
1884+ zetask = self.req.get_task(uid)
1885+ status = zetask.get_status()
1886+ if status == "Done":
1887+ zetask.set_status("Active")
1888+ else:
1889+ zetask.set_status("Done")
1890+ self.do_refresh()
1891+
1892+ def on_dismiss_task(self, widget): #pylint: disable-msg=W0613
1893+ uid = self.get_selected_task()
1894+ if uid:
1895+ zetask = self.req.get_task(uid)
1896+ status = zetask.get_status()
1897+ if status == "Dismiss":
1898+ zetask.set_status("Active")
1899+ else:
1900+ zetask.set_status("Dismiss")
1901+ self.do_refresh()
1902+
1903+ def on_select_tag(self, widget, row=None, col=None):
1904 #When you clic on a tag, you want to unselect the tasks
1905 self.task_tview.get_selection().unselect_all()
1906 self.taskdone_tview.get_selection().unselect_all()
1907@@ -1441,56 +1504,64 @@
1908 ##### Useful tools##################
1909
1910 def __create_tags_tview(self):
1911-
1912+
1913 # Tag column
1914- tag_col = gtk.TreeViewColumn()
1915- render_text = gtk.CellRendererText()
1916+ tag_col = gtk.TreeViewColumn()
1917+ render_text = gtk.CellRendererText()
1918 render_count = gtk.CellRendererText()
1919- render_tags = CellRendererTags()
1920- tag_col.set_title ("Tags")
1921- tag_col.set_clickable (False)
1922- tag_col.pack_start (render_tags , expand=False)
1923- tag_col.set_attributes (render_tags , tag=self.TAGS_MODEL_OBJ)
1924- tag_col.pack_start (render_text , expand=True)
1925- tag_col.set_attributes (render_text , markup=self.TAGS_MODEL_NAME)
1926- tag_col.pack_end (render_count , expand=False)
1927- tag_col.set_attributes (render_count , markup=self.TAGS_MODEL_COUNT)
1928- render_count.set_property ("foreground","#888a85")
1929- render_count.set_property ('xalign', 1.0)
1930- render_tags.set_property ('ypad' , 3)
1931- render_text.set_property ('ypad' , 3)
1932- render_count.set_property ('xpad' , 3)
1933- render_count.set_property ('ypad' , 3)
1934- tag_col.set_sort_column_id (-1)
1935- tag_col.set_expand (True)
1936- self.tag_tview.append_column (tag_col)
1937+ render_tags = CellRendererTags()
1938+ tag_col.set_title("Tags")
1939+ tag_col.set_clickable(False)
1940+ tag_col.pack_start(render_tags, expand=False)
1941+ tag_col.set_attributes(render_tags, tag=self.TAGS_MODEL_OBJ)
1942+ tag_col.pack_start(render_text, expand=True)
1943+ tag_col.set_attributes(render_text, markup=self.TAGS_MODEL_NAME)
1944+ tag_col.pack_end(render_count, expand=False)
1945+ tag_col.set_attributes(render_count, markup=self.TAGS_MODEL_COUNT)
1946+ render_count.set_property("foreground", "#888a85")
1947+ render_count.set_property('xalign', 1.0)
1948+ render_tags.set_property('ypad', 3)
1949+ render_text.set_property('ypad', 3)
1950+ render_count.set_property('xpad', 3)
1951+ render_count.set_property('ypad', 3)
1952+ tag_col.set_sort_column_id(-1)
1953+ tag_col.set_expand(True)
1954+ self.tag_tview.append_column(tag_col)
1955 # Global treeview properties
1956- self.tag_tview.set_row_separator_func (self.tag_separator_filter)
1957- self.tag_tview.set_headers_visible (False)
1958+ self.tag_tview.set_row_separator_func(self.tag_separator_filter)
1959+ self.tag_tview.set_headers_visible(False)
1960
1961 def cmp_duedate_str(self, key1, key2):
1962 if self.priv["tasklist"]["sort_order"] == gtk.SORT_ASCENDING:
1963- if key1 == "" and key2 == "" : return 0
1964- elif key1 == "" and key2 != "" : return -1
1965- elif key1 != "" and key2 == "" : return 1
1966- else : return cmp(key1,key2)
1967+ if key1 == "" and key2 == "":
1968+ return 0
1969+ elif key1 == "" and key2 != "":
1970+ return -1
1971+ elif key1 != "" and key2 == "":
1972+ return 1
1973+ else:
1974+ return cmp(key1, key2)
1975 else:
1976- if key1 == "" and key2 == "" : return 0
1977- elif key1 == "" and key2 != "" : return 1
1978- elif key1 != "" and key2 == "" : return -1
1979- else : return cmp(key1,key2)
1980-
1981- def sort_tasklist_rows(self, column, sort_order=None):
1982+ if key1 == "" and key2 == "":
1983+ return 0
1984+ elif key1 == "" and key2 != "":
1985+ return 1
1986+ elif key1 != "" and key2 == "":
1987+ return -1
1988+ else:
1989+ return cmp(key1, key2)
1990+
1991+ def sort_tasklist_rows(self, column, sort_order=None):
1992 """ Sort the rows based on the given column """
1993-
1994+
1995 # Extract sorting state
1996- last_sort_col = self.priv["tasklist"]["sort_column"]
1997+ last_sort_col = self.priv["tasklist"]["sort_column"]
1998 last_sort_order = self.priv["tasklist"]["sort_order"]
1999-
2000+
2001 # Cleanup
2002 if last_sort_col is not None:
2003 last_sort_col.set_sort_indicator(False)
2004-
2005+
2006 # Ascending or descending?
2007 if sort_order is None:
2008 if last_sort_col == column:
2009@@ -1503,101 +1574,112 @@
2010
2011 # Store sorting state
2012 self.priv["tasklist"]["sort_column"] = column
2013- self.priv["tasklist"]["sort_order"] = sort_order
2014+ self.priv["tasklist"]["sort_order"] = sort_order
2015
2016 # Determine row sorting depending on column
2017 if column == self.priv["tasklist"]["columns"][self.TASKLIST_COL_TITLE]:
2018- cmp_func = lambda x,y: locale.strcoll(x.lower(),y.lower())
2019- sort_key = lambda x:x[self.TASK_MODEL_TITLE]
2020+ cmp_func = lambda x, y: locale.strcoll(x.lower(), y.lower())
2021+ sort_key = lambda x: x[self.TASK_MODEL_TITLE]
2022 else:
2023 cmp_func = self.cmp_duedate_str
2024- sort_key = lambda x:x[self.TASK_MODEL_DDATE_STR]
2025-
2026+ sort_key = lambda x: x[self.TASK_MODEL_DDATE_STR]
2027+
2028 # Determine sorting direction
2029- if sort_order == gtk.SORT_ASCENDING: sort_reverse = True
2030- else : sort_reverse = False
2031+ if sort_order == gtk.SORT_ASCENDING:
2032+ sort_reverse = True
2033+ else:
2034+ sort_reverse = False
2035
2036 # Sort rows
2037 rows = [tuple(r) + (i,) for i, r in enumerate(self.task_ts)]
2038 if len(rows) != 0:
2039- rows.sort(key=lambda x:x[self.TASK_MODEL_TITLE].lower())
2040- rows.sort(cmp=cmp_func,key=sort_key,reverse=sort_reverse)
2041+ rows.sort(key=lambda x: x[self.TASK_MODEL_TITLE].lower())
2042+ rows.sort(cmp=cmp_func, key=sort_key, reverse=sort_reverse)
2043 self.task_ts.reorder(None, [r[-1] for r in rows])
2044-
2045+
2046 # Display the sort indicator
2047 column.set_sort_indicator(True)
2048 column.set_sort_order(sort_order)
2049
2050 def __create_task_tview(self):
2051-
2052+
2053 self.priv["tasklist"]["columns"] = []
2054-
2055+
2056 # Tag column
2057 self.TASKLIST_COL_TAGS = 0
2058- tag_col = gtk.TreeViewColumn()
2059+ tag_col = gtk.TreeViewColumn()
2060 render_tags = CellRendererTags()
2061- tag_col.set_title (_("Tags"))
2062- tag_col.pack_start (render_tags, expand=False)
2063- tag_col.add_attribute (render_tags, "tag_list", self.TASK_MODEL_TAGS)
2064- render_tags.set_property ('xalign', 0.0)
2065- tag_col.set_resizable (False)
2066- tag_col.add_attribute (render_tags, "cell-background", self.TASK_MODEL_BGCOL)
2067- #tag_col.set_clickable (True)
2068- #tag_col.connect ('clicked', self.sort_tasklist_rows)
2069- self.task_tview.append_column (tag_col)
2070- self.priv["tasklist"]["columns"].insert(self.TASKLIST_COL_TAGS, tag_col)
2071-
2072+ tag_col.set_title(_("Tags"))
2073+ tag_col.pack_start(render_tags, expand=False)
2074+ tag_col.add_attribute(render_tags, "tag_list", self.TASK_MODEL_TAGS)
2075+ render_tags.set_property('xalign', 0.0)
2076+ tag_col.set_resizable(False)
2077+ tag_col.add_attribute(
2078+ render_tags, "cell-background", self.TASK_MODEL_BGCOL)
2079+ self.task_tview.append_column(tag_col)
2080+ self.priv["tasklist"]["columns"].insert(
2081+ self.TASKLIST_COL_TAGS, tag_col)
2082+
2083 # Title column
2084 self.TASKLIST_COL_TITLE = 1
2085- title_col = gtk.TreeViewColumn()
2086+ title_col = gtk.TreeViewColumn()
2087 render_text = gtk.CellRendererText()
2088- title_col.set_title (_("Title"))
2089- title_col.pack_start (render_text, expand=False)
2090- title_col.add_attribute (render_text, "markup", self.TASK_MODEL_TITLE_STR)
2091- title_col.set_resizable (True)
2092- title_col.set_expand (True)
2093+ title_col.set_title(_("Title"))
2094+ title_col.pack_start(render_text, expand=False)
2095+ title_col.add_attribute(
2096+ render_text, "markup", self.TASK_MODEL_TITLE_STR)
2097+ title_col.set_resizable(True)
2098+ title_col.set_expand(True)
2099 #The following line seems to fix bug #317469
2100 #I don't understand why !!! It's voodoo !
2101 #Is there a Rubber Chicken With a Pulley in the Middle ?
2102- title_col.set_max_width (100)
2103- title_col.add_attribute (render_text, "cell_background", self.TASK_MODEL_BGCOL)
2104- title_col.set_clickable (True)
2105- title_col.connect ('clicked', self.sort_tasklist_rows)
2106- self.task_tview.append_column (title_col)
2107- self.priv["tasklist"]["columns"].insert(self.TASKLIST_COL_TITLE, title_col)
2108-
2109+ title_col.set_max_width(100)
2110+ title_col.add_attribute(
2111+ render_text, "cell_background", self.TASK_MODEL_BGCOL)
2112+ title_col.set_clickable(True)
2113+ title_col.connect('clicked', self.sort_tasklist_rows)
2114+ self.task_tview.append_column(title_col)
2115+ self.priv["tasklist"]["columns"].insert(
2116+ self.TASKLIST_COL_TITLE, title_col)
2117+
2118 # Due date column
2119 self.TASKLIST_COL_DDATE = 2
2120- ddate_col = gtk.TreeViewColumn()
2121+ ddate_col = gtk.TreeViewColumn()
2122 render_text = gtk.CellRendererText()
2123- ddate_col.set_title (_("Due date"))
2124- ddate_col.pack_start (render_text, expand=False)
2125- ddate_col.add_attribute (render_text, "markup", self.TASK_MODEL_DDATE_STR)
2126- ddate_col.set_resizable (False)
2127- ddate_col.add_attribute (render_text, "cell_background", self.TASK_MODEL_BGCOL)
2128- ddate_col.set_clickable (True)
2129- ddate_col.connect ('clicked', self.sort_tasklist_rows)
2130- self.task_tview.append_column (ddate_col)
2131- self.priv["tasklist"]["columns"].insert(self.TASKLIST_COL_DDATE, ddate_col)
2132-
2133+ ddate_col.set_title(_("Due date"))
2134+ ddate_col.pack_start(render_text, expand=False)
2135+ ddate_col.add_attribute(
2136+ render_text, "markup", self.TASK_MODEL_DDATE_STR)
2137+ ddate_col.set_resizable(False)
2138+ ddate_col.add_attribute(
2139+ render_text, "cell_background", self.TASK_MODEL_BGCOL)
2140+ ddate_col.set_clickable(True)
2141+ ddate_col.connect('clicked', self.sort_tasklist_rows)
2142+ self.task_tview.append_column(ddate_col)
2143+ self.priv["tasklist"]["columns"].insert(
2144+ self.TASKLIST_COL_DDATE, ddate_col)
2145+
2146 # days left
2147 self.TASKLIST_COL_DLEFT = 3
2148- dleft_col = gtk.TreeViewColumn()
2149+ dleft_col = gtk.TreeViewColumn()
2150 render_text = gtk.CellRendererText()
2151- dleft_col.set_title (_("Days left"))
2152- dleft_col.pack_start (render_text, expand=False)
2153- dleft_col.add_attribute (render_text, "markup", self.TASK_MODEL_DLEFT_STR)
2154- dleft_col.set_resizable (False)
2155- dleft_col.add_attribute (render_text, "cell_background", self.TASK_MODEL_BGCOL)
2156- dleft_col.set_clickable (True)
2157- dleft_col.connect ('clicked', self.sort_tasklist_rows)
2158- self.task_tview.append_column (dleft_col)
2159- self.priv["tasklist"]["columns"].insert(self.TASKLIST_COL_DLEFT, dleft_col)
2160+ dleft_col.set_title(_("Days left"))
2161+ dleft_col.pack_start(render_text, expand=False)
2162+ dleft_col.add_attribute(
2163+ render_text, "markup", self.TASK_MODEL_DLEFT_STR)
2164+ dleft_col.set_resizable(False)
2165+ dleft_col.add_attribute(
2166+ render_text, "cell_background", self.TASK_MODEL_BGCOL)
2167+ dleft_col.set_clickable(True)
2168+ dleft_col.connect('clicked', self.sort_tasklist_rows)
2169+ self.task_tview.append_column(dleft_col)
2170+ self.priv["tasklist"]["columns"].insert(
2171+ self.TASKLIST_COL_DLEFT, dleft_col)
2172
2173 # Global treeview properties
2174- self.task_tview.set_property ("expander-column", title_col)
2175- self.task_tview.set_property ("enable-tree-lines", False)
2176- self.task_tview.set_rules_hint (False)
2177+ self.task_tview.set_property("expander-column", title_col)
2178+ self.task_tview.set_property("enable-tree-lines", False)
2179+ self.task_tview.set_rules_hint(False)
2180
2181 def __create_closed_tasks_tview(self):
2182
2183@@ -1605,64 +1687,66 @@
2184
2185 # Tag column
2186 self.CTASKLIST_COL_TAGS = 0
2187- tag_col = gtk.TreeViewColumn()
2188+ tag_col = gtk.TreeViewColumn()
2189 render_tags = CellRendererTags()
2190- tag_col.set_title (_("Tags"))
2191- tag_col.pack_start (render_tags, expand=False)
2192- tag_col.add_attribute (render_tags, "tag_list", self.CTASKS_MODEL_TAGS)
2193- render_tags.set_property ('xalign', 0.0)
2194- tag_col.set_resizable (False)
2195- tag_col.add_attribute (render_tags, "cell-background", self.CTASKS_MODEL_BGCOL)
2196- #tag_col.set_clickable (True)
2197- #tag_col.connect ('clicked', self.sort_tasklist_rows)
2198- self.taskdone_tview.append_column (tag_col)
2199- self.priv["ctasklist"]["columns"].insert(self.CTASKLIST_COL_TAGS, tag_col)
2200-
2201+ tag_col.set_title(_("Tags"))
2202+ tag_col.pack_start(render_tags, expand=False)
2203+ tag_col.add_attribute(render_tags, "tag_list", self.CTASKS_MODEL_TAGS)
2204+ render_tags.set_property('xalign', 0.0)
2205+ tag_col.set_resizable(False)
2206+ tag_col.add_attribute(
2207+ render_tags, "cell-background", self.CTASKS_MODEL_BGCOL)
2208+ self.taskdone_tview.append_column(tag_col)
2209+ self.priv["ctasklist"]["columns"].insert(
2210+ self.CTASKLIST_COL_TAGS, tag_col)
2211+
2212 # Done date column
2213 self.CTASKLIST_COL_DDATE = 1
2214- ddate_col = gtk.TreeViewColumn()
2215- render_text = gtk.CellRendererText()
2216- ddate_col.set_title (_("Closing date"))
2217- ddate_col.pack_start (render_text , expand=True)
2218- ddate_col.set_attributes (render_text , markup=self.CTASKS_MODEL_DDATE_STR)
2219- ddate_col.set_sort_column_id (self.CTASKS_MODEL_DDATE)
2220- ddate_col.add_attribute (render_text, "cell_background", self.CTASKS_MODEL_BGCOL)
2221- self.taskdone_tview.append_column (ddate_col)
2222- self.priv["ctasklist"]["columns"].insert(self.CTASKLIST_COL_DDATE, ddate_col)
2223-
2224+ ddate_col = gtk.TreeViewColumn()
2225+ render_text = gtk.CellRendererText()
2226+ ddate_col.set_title(_("Closing date"))
2227+ ddate_col.pack_start(render_text, expand=True)
2228+ ddate_col.set_attributes(
2229+ render_text, markup=self.CTASKS_MODEL_DDATE_STR)
2230+ ddate_col.set_sort_column_id(self.CTASKS_MODEL_DDATE)
2231+ ddate_col.add_attribute(
2232+ render_text, "cell_background", self.CTASKS_MODEL_BGCOL)
2233+ self.taskdone_tview.append_column(ddate_col)
2234+ self.priv["ctasklist"]["columns"].insert(
2235+ self.CTASKLIST_COL_DDATE, ddate_col)
2236+
2237 # Title column
2238 self.CTASKLIST_COL_TITLE = 2
2239- title_col = gtk.TreeViewColumn()
2240- render_text = gtk.CellRendererText()
2241- title_col.set_title (_("Title"))
2242- title_col.pack_start (render_text , expand=True)
2243- title_col.set_attributes (render_text , markup=self.CTASKS_MODEL_TITLE)
2244- title_col.set_sort_column_id (self.CTASKS_MODEL_TITLE)
2245- title_col.set_expand (True)
2246- title_col.add_attribute (render_text, "cell_background", self.CTASKS_MODEL_BGCOL)
2247- self.taskdone_tview.append_column (title_col)
2248- self.priv["ctasklist"]["columns"].insert(self.CTASKLIST_COL_TITLE, title_col)
2249-
2250+ title_col = gtk.TreeViewColumn()
2251+ render_text = gtk.CellRendererText()
2252+ title_col.set_title(_("Title"))
2253+ title_col.pack_start(render_text, expand=True)
2254+ title_col.set_attributes(render_text, markup=self.CTASKS_MODEL_TITLE)
2255+ title_col.set_sort_column_id(self.CTASKS_MODEL_TITLE)
2256+ title_col.set_expand(True)
2257+ title_col.add_attribute(
2258+ render_text, "cell_background", self.CTASKS_MODEL_BGCOL)
2259+ self.taskdone_tview.append_column(title_col)
2260+ self.priv["ctasklist"]["columns"].insert(
2261+ self.CTASKLIST_COL_TITLE, title_col)
2262+
2263 # Global treeview properties
2264- self.taskdone_ts.set_sort_column_id(self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
2265-
2266+ self.taskdone_ts.set_sort_column_id(
2267+ self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
2268+
2269 def __create_note_tview(self):
2270 # Title column
2271- title_col = gtk.TreeViewColumn()
2272- render_text = gtk.CellRendererText()
2273- title_col.set_title (_("Notes"))
2274- title_col.pack_start (render_text , expand=True)
2275- title_col.set_attributes (render_text , markup=self.CTASKS_MODEL_TITLE)
2276- title_col.set_sort_column_id (self.CTASKS_MODEL_TITLE)
2277- title_col.set_expand (True)
2278- self.note_tview.append_column (title_col)
2279-
2280- # Global treeview properties
2281- #self.taskdone_ts.set_sort_column_id(self.CTASKS_MODEL_DDATE, gtk.SORT_DESCENDING)
2282-
2283-
2284- ######Closing the window
2285- def close(self,widget=None) : #pylint: disable-msg=W0613
2286+ title_col = gtk.TreeViewColumn()
2287+ render_text = gtk.CellRendererText()
2288+ title_col.set_title(_("Notes"))
2289+ title_col.pack_start(render_text, expand=True)
2290+ title_col.set_attributes(render_text, markup=self.CTASKS_MODEL_TITLE)
2291+ title_col.set_sort_column_id(self.CTASKS_MODEL_TITLE)
2292+ title_col.set_expand(True)
2293+ self.note_tview.append_column(title_col)
2294+
2295+ def close(self, widget=None):
2296+ """Closing the window."""
2297 #Saving is now done in main.py
2298 self.on_delete(None, None)
2299 gtk.main_quit()

Subscribers

People subscribed via source and target branches

to status/vote changes: