GTG

Merge lp:~mendymeng-1206/gtg/mendy into lp:~gtg/gtg/old-trunk

Proposed by Meng Meng
Status: Rejected
Rejected by: Izidor Matušov
Proposed branch: lp:~mendymeng-1206/gtg/mendy
Merge into: lp:~gtg/gtg/old-trunk
Diff against target: 369 lines (+92/-87)
10 files modified
GTG/__init__.py (+1/-0)
GTG/core/__init__.py (+1/-0)
GTG/gtk/browser/browser.py (+1/-1)
GTG/gtk/editor/editor.py (+40/-10)
GTG/gtk/manager.py (+2/-1)
GTG/gtk/preferences.glade (+22/-0)
GTG/gtk/preferences.py (+17/-2)
GTG/tools/dates.py (+7/-1)
gtg (+0/-72)
test/data/bryce/xdg/config/gtg/gtg.conf (+1/-0)
To merge this branch: bzr merge lp:~mendymeng-1206/gtg/mendy
Reviewer Review Type Date Requested Status
Izidor Matušov code review Needs Resubmitting
Luca Invernizzi Pending
Review via email: mp+80224@code.launchpad.net

Commit message

This commit fixed the due date can be chosen before start date bug. Partially finished the custom date format setting feature.

Description of the change

Date format preference implemented. But currently only AU date format supported.
More related work need to be done in the future.

Due date cannot be set before start date. otherwise it will be set to the same date as the start date and the background of due date textbox will turn to green color to inform user the change.

To post a comment you must log in.
Revision history for this message
Izidor Matušov (izidor) wrote :

I don't think we need date format preference in GTG. That information is already in the system as locale setting.

Adding preferences for all languages is really laborious work - somebody else has done it already as locales system. Please, rewrite your patch using the locale.

Few tips:
 - use %x to get dateformat as it is with locales
 - See this question if you have problems: http://stackoverflow.com/questions/3438120/python-date-formatted-with-x-locale-is-not-as-expected

Please resubmit the rewritten patch.

review: Needs Resubmitting (code review)

Unmerged revisions

1016. By Meng Meng

AU dateformat implemented

1015. By Meng Meng

try

1014. By Meng Meng

date format change not finished

1013. By Meng Meng

set red color to the text box if due date is before start date

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'GTG/__init__.py'
--- GTG/__init__.py 2011-09-25 15:25:40 +0000
+++ GTG/__init__.py 2011-10-24 14:14:27 +0000
@@ -1,5 +1,6 @@
1# -*- coding: utf-8 -*-1# -*- coding: utf-8 -*-
2# -----------------------------------------------------------------------------2# -----------------------------------------------------------------------------
3# -----------------------------------------------------------------------------
3# Gettings Things Gnome! - a personal organizer for the GNOME desktop4# Gettings Things Gnome! - a personal organizer for the GNOME desktop
4# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau5# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
5#6#
67
=== modified file 'GTG/core/__init__.py'
--- GTG/core/__init__.py 2011-09-25 15:21:46 +0000
+++ GTG/core/__init__.py 2011-10-24 14:14:27 +0000
@@ -53,6 +53,7 @@
53'browser': {53'browser': {
54 'bg_color_enable' : False,54 'bg_color_enable' : False,
55 "contents_preview_enable" : False,55 "contents_preview_enable" : False,
56 "AU_date_format_enable" : False,
56 'tag_pane' : False,57 'tag_pane' : False,
57 "sidebar_width": 120,58 "sidebar_width": 120,
58 "closed_task_pane" : False,59 "closed_task_pane" : False,
5960
=== modified file 'GTG/gtk/browser/browser.py'
--- GTG/gtk/browser/browser.py 2011-10-08 22:28:53 +0000
+++ GTG/gtk/browser/browser.py 2011-10-24 14:14:27 +0000
@@ -1001,7 +1001,7 @@
1001 def on_edit_active_task(self, widget, row=None, col=None):1001 def on_edit_active_task(self, widget, row=None, col=None):
1002 tid = self.get_selected_task()1002 tid = self.get_selected_task()
1003 if tid:1003 if tid:
1004 self.vmanager.open_task(tid)1004 self.vmanager.open_task(tid,config_priv = self.config) #TODO: self.config
10051005
1006 def on_edit_done_task(self, widget, row=None, col=None):1006 def on_edit_done_task(self, widget, row=None, col=None):
1007 tid = self.get_selected_task('closed')1007 tid = self.get_selected_task('closed')
10081008
=== modified file 'GTG/gtk/editor/editor.py'
--- GTG/gtk/editor/editor.py 2010-09-15 05:02:01 +0000
+++ GTG/gtk/editor/editor.py 2011-10-24 14:14:27 +0000
@@ -48,6 +48,7 @@
48 requester, 48 requester,
49 vmanager, 49 vmanager,
50 task, 50 task,
51 globconfig,
51 taskconfig = None,52 taskconfig = None,
52 thisisnew = False,53 thisisnew = False,
53 clipboard = None) :54 clipboard = None) :
@@ -60,6 +61,7 @@
60 self.req = requester61 self.req = requester
61 self.vmanager = vmanager62 self.vmanager = vmanager
62 self.config = taskconfig63 self.config = taskconfig
64 self.globconfig = globconfig
63 self.time = None65 self.time = None
64 self.clipboard = clipboard66 self.clipboard = clipboard
65 self.builder = gtk.Builder()67 self.builder = gtk.Builder()
@@ -278,16 +280,25 @@
278280
279 #refreshing the due date field281 #refreshing the due date field
280 duedate = self.task.get_due_date()282 duedate = self.task.get_due_date()
281 prevdate = dates.strtodate(self.duedate_widget.get_text())283 #prevdate = dates.strtodate(self.duedate_widget.get_text())
282 if duedate != prevdate or type(duedate) is not type(prevdate):284 #the changes made below is not good , just show we can set different date format
285 #if duedate != prevdate or type(duedate) is not type(prevdate):
286 # zedate = str(duedate).replace("-", date_separator)
287 # self.duedate_widget.set_text(zedate)
288 if self.globconfig.get("AU_date_format_enable"):
289 self.duedate_widget.set_text(duedate.to_py_date().strftime('%d/%h/%Y'))
290 else:
283 zedate = str(duedate).replace("-", date_separator)291 zedate = str(duedate).replace("-", date_separator)
284 self.duedate_widget.set_text(zedate)292 self.duedate_widget.set_text(zedate)
285 # refreshing the closed date field293 # refreshing the closed date field
286 closeddate = self.task.get_closed_date()294 closeddate = self.task.get_closed_date()
287 prevcldate = dates.strtodate(self.closeddate_widget.get_text())295 #prevcldate = dates.strtodate(self.closeddate_widget.get_text())
288 if closeddate != prevcldate or type(closeddate) is not type(prevcldate):296 #if closeddate != prevcldate or type(closeddate) is not type(prevcldate):
289 zecldate = str(closeddate).replace("-", date_separator)297 if self.globconfig.get("AU_date_format_enable"):
290 self.closeddate_widget.set_text(zecldate)298 self.closeddate_widget.set_text(closeddate.to_py_date().strftime('%d/%h/%Y'))
299 else:
300 zedate = str(closeddate).replace("-", date_separator)
301 self.closeddate_widget.set_text(zedate)
291 #refreshing the day left label302 #refreshing the day left label
292 #If the task is marked as done, we display the delay between the 303 #If the task is marked as done, we display the delay between the
293 #due date and the actual closing date. If the task isn't marked 304 #due date and the actual closing date. If the task isn't marked
@@ -319,10 +330,14 @@
319 self.dayleft_label.set_markup("<span color='"+color+"'>"+txt+"</span>")330 self.dayleft_label.set_markup("<span color='"+color+"'>"+txt+"</span>")
320331
321 startdate = self.task.get_start_date()332 startdate = self.task.get_start_date()
322 prevdate = dates.strtodate(self.startdate_widget.get_text())333 #prevdate = dates.strtodate(self.startdate_widget.get_text())
323 if startdate != prevdate or type(startdate) is not type(prevdate):334 #if startdate != prevdate or type(startdate) is not type(prevdate):
335 if self.globconfig.get("AU_date_format_enable"):
336 self.startdate_widget.set_text(startdate.to_py_date().strftime('%d/%h/%Y'))
337 else:
324 zedate = str(startdate).replace("-",date_separator)338 zedate = str(startdate).replace("-",date_separator)
325 self.startdate_widget.set_text(zedate) 339 self.startdate_widget.set_text(zedate)
340
326 #Refreshing the tag list in the insert tag button341 #Refreshing the tag list in the insert tag button
327 taglist = self.req.get_used_tags()342 taglist = self.req.get_used_tags()
328 menu = gtk.Menu()343 menu = gtk.Menu()
@@ -345,13 +360,17 @@
345 self.light_save()360 self.light_save()
346361
347 def date_changed(self,widget,data):362 def date_changed(self,widget,data):
363 """we need to do some thing here , as the date text format has been changed"""
348 text = widget.get_text()364 text = widget.get_text()
349 validdate = False365 validdate = False
350 if not text :366 if not text :
351 validdate = True367 validdate = True
352 datetoset = dates.no_date368 datetoset = dates.no_date
353 else :369 else :
354 datetoset = dates.strtodate(text)370 if self.globconfig.get("AU_date_format_enable"):
371 datetoset = dates.strtodate(text, "AU")
372 else :
373 datetoset = dates.strtodate(text)
355 if datetoset :374 if datetoset :
356 validdate = True375 validdate = True
357376
@@ -371,7 +390,18 @@
371 start_date = self.task.get_start_date()390 start_date = self.task.get_start_date()
372 due_date = self.task.get_due_date()391 due_date = self.task.get_due_date()
373 if start_date and (start_date > due_date):392 if start_date and (start_date > due_date):
374 self.task.set_due_date(self.task.get_start_date())393 self.task.set_due_date(self.task.get_start_date())
394 # there may be problem here, as the view is different with model
395 # so set the text.
396 startdate = self.task.get_start_date()
397 if self.globconfig.get("AU_date_format_enable"):
398 self.duedate_widget.set_text(startdate.to_py_date().strftime('%d/%h/%Y'))
399 else:
400 zedate = str(startdate).replace("-",date_separator)
401 self.duedate_widget.set_text(zedate)
402 # in this case, set color to green to inform user that the due date is reseted to the same with start date
403 self.duedate_widget.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000"))
404 self.duedate_widget.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse("#8F8"))
375 else :405 else :
376 #We should write in red in the entry if the date is not valid406 #We should write in red in the entry if the date is not valid
377 widget.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F00"))407 widget.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("#F00"))
378408
=== modified file 'GTG/gtk/manager.py'
--- GTG/gtk/manager.py 2011-08-16 16:20:15 +0000
+++ GTG/gtk/manager.py 2011-10-24 14:14:27 +0000
@@ -147,7 +147,7 @@
147 '''147 '''
148 return self.opened_task148 return self.opened_task
149149
150 def open_task(self, uid,thisisnew = False):150 def open_task(self, uid,thisisnew = False, config_priv = None):
151 """Open the task identified by 'uid'.151 """Open the task identified by 'uid'.
152152
153 If a Task editor is already opened for a given task, we present it.153 If a Task editor is already opened for a given task, we present it.
@@ -163,6 +163,7 @@
163 requester = self.req, \163 requester = self.req, \
164 vmanager = self, \164 vmanager = self, \
165 task = t, \165 task = t, \
166 globconfig = config_priv, \
166 taskconfig = self.task_config, \167 taskconfig = self.task_config, \
167 thisisnew = thisisnew,\168 thisisnew = thisisnew,\
168 clipboard = self.clipboard)169 clipboard = self.clipboard)
169170
=== modified file 'GTG/gtk/preferences.glade'
--- GTG/gtk/preferences.glade 2010-07-29 10:36:24 +0000
+++ GTG/gtk/preferences.glade 2011-10-24 14:14:27 +0000
@@ -113,6 +113,28 @@
113 <property name="position">0</property>113 <property name="position">0</property>
114 </packing>114 </packing>
115 </child>115 </child>
116
117
118
119 <child>
120 <object class="GtkCheckButton" id="pref_date_format">
121 <property name="label" translatable="yes">Use Australia date format "dd/mm/yy".</property>
122 <property name="visible">True</property>
123 <property name="can_focus">True</property>
124 <property name="receives_default">False</property>
125 <property name="draw_indicator">True</property>
126 <signal name="toggled" handler="on_pref_date_format_toggled"/>
127 </object>
128 <packing>
129 <property name="expand">False</property>
130 <property name="padding">3</property>
131 <property name="position">0</property>
132 </packing>
133 </child>
134
135
136
137
116 <child>138 <child>
117 <object class="GtkHBox" id="prefs-hbox1">139 <object class="GtkHBox" id="prefs-hbox1">
118 <property name="no_show_all">True</property>140 <property name="no_show_all">True</property>
119141
=== modified file 'GTG/gtk/preferences.py'
--- GTG/gtk/preferences.py 2011-08-07 09:32:44 +0000
+++ GTG/gtk/preferences.py 2011-10-24 14:14:27 +0000
@@ -118,7 +118,8 @@
118 'plugin_depends': 'PluginDepends',118 'plugin_depends': 'PluginDepends',
119 'plugin_config_dialog': 'PluginConfigDialog',119 'plugin_config_dialog': 'PluginConfigDialog',
120 'pref_autostart': 'pref_autostart',120 'pref_autostart': 'pref_autostart',
121 'pref_show_preview': 'pref_show_preview'121 'pref_show_preview': 'pref_show_preview',
122 'pref_date_format': 'pref_date_format'
122 }123 }
123 for attr, widget in widgets.iteritems():124 for attr, widget in widgets.iteritems():
124 setattr(self, attr, self.builder.get_object(widget))125 setattr(self, attr, self.builder.get_object(widget))
@@ -176,6 +177,13 @@
176 else:177 else:
177 toset = 0178 toset = 0
178 self.pref_show_preview.set_active(toset)179 self.pref_show_preview.set_active(toset)
180
181 if self.config_priv.get("AU_date_format_enable"):
182 toset = 1
183 else:
184 toset = 0
185 self.pref_date_format.set_active(toset)
186
179187
180188
181 def _init_plugin_tree(self):189 def _init_plugin_tree(self):
@@ -233,6 +241,8 @@
233 # preferences on the Tasks tab241 # preferences on the Tasks tab
234 'on_pref_show_preview_toggled':242 'on_pref_show_preview_toggled':
235 self.toggle_preview,243 self.toggle_preview,
244 'on_pref_date_format_toggled':
245 self.toggle_date_format,
236 'on_pref_check_spelling_toggled':246 'on_pref_check_spelling_toggled':
237 self.toggle_spellcheck,247 self.toggle_spellcheck,
238 # buttons on the Plugins tab248 # buttons on the Plugins tab
@@ -350,7 +360,12 @@
350 self.config_priv.set("contents_preview_enable",widget.get_active())360 self.config_priv.set("contents_preview_enable",widget.get_active())
351 view = self.req.get_tasks_tree(refresh=False)361 view = self.req.get_tasks_tree(refresh=False)
352 view.refresh_all()362 view.refresh_all()
353363
364 def toggle_date_format(self, widget):
365 """use AU date format or not."""
366 self.config_priv.set("AU_date_format_enable",widget.get_active())
367 view = self.req.get_tasks_tree(refresh=False)
368 view.refresh_all()
354 369
355 def toggle_spellcheck(self, widget):370 def toggle_spellcheck(self, widget):
356 """Toggle spell checking on or off."""371 """Toggle spell checking on or off."""
357372
=== modified file 'GTG/tools/dates.py'
--- GTG/tools/dates.py 2011-09-25 12:57:54 +0000
+++ GTG/tools/dates.py 2011-10-24 14:14:27 +0000
@@ -20,6 +20,7 @@
20from datetime import date, timedelta20from datetime import date, timedelta
21import locale21import locale
22import calendar22import calendar
23import time
23from GTG import _, ngettext24from GTG import _, ngettext
2425
25#setting the locale of gtg to the system locale 26#setting the locale of gtg to the system locale
@@ -133,7 +134,7 @@
133#function to convert a string of the form YYYY-MM-DD134#function to convert a string of the form YYYY-MM-DD
134#to a date135#to a date
135#If the date is not correct, the function returns None136#If the date is not correct, the function returns None
136def strtodate(stri) :137def strtodate(stri, dateformat="") :
137 if stri == _("now") or stri == "now":138 if stri == _("now") or stri == "now":
138 return NOW139 return NOW
139 elif stri == _("soon") or stri == "soon":140 elif stri == _("soon") or stri == "soon":
@@ -153,6 +154,11 @@
153 y = zedate[0]154 y = zedate[0]
154 m = zedate[1]155 m = zedate[1]
155 d = zedate[2]156 d = zedate[2]
157 if dateformat == "AU": # Australia date format dd/mm/yy
158 t = time.strptime(stri, '%d/%b/%Y')
159 y = str(t.tm_year)
160 m = str(t.tm_mon)
161 d = str(t.tm_mday)
156 if y.isdigit() and m.isdigit() and d.isdigit() :162 if y.isdigit() and m.isdigit() and d.isdigit() :
157 yy = int(y)163 yy = int(y)
158 mm = int(m)164 mm = int(m)
159165
=== removed file 'gtg'
--- gtg 2010-09-08 09:50:32 +0000
+++ gtg 1970-01-01 00:00:00 +0000
@@ -1,72 +0,0 @@
1#!/usr/bin/env python
2# -*- coding:utf-8 -*-
3
4# -----------------------------------------------------------------------------
5# Getting Things Gnome! - A personal organizer for the GNOME desktop
6# Copyright (c) 2008,2009,2010 Lionel Dricot & Bertrand Rousseau
7#
8# This program is free software: you can redistribute it and/or modify it under
9# the terms of the GNU General Public License as published by the Free Software
10# Foundation, either version 3 of the License, or (at your option) any later
11# version.
12#
13# This program is distributed in the hope that it will be useful, but WITHOUT
14# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16# details.
17#
18# You should have received a copy of the GNU General Public License along with
19# this program. If not, see <http://www.gnu.org/licenses/>.
20# -----------------------------------------------------------------------------
21
22"""
23Getting Things Gnome! - A personal organizer for the GNOME desktop
24==================================================================
25
26:copyright: 2008,2009,2010 Lionel Dricot & Bertrand Rousseau
27:license: GNU General Public License, version 3 or later
28"""
29
30import sys
31from optparse import OptionParser
32
33
34def X_is_running():
35 from gtk.gdk import Screen
36 try:
37 if Screen().get_display():
38 return True
39 except RuntimeError:
40 pass
41 return False
42
43
44try:
45 parser = OptionParser()
46 parser.add_option('-b', '--boot-test', action='store_true', dest='boot_test',
47 help="Exit immediately after completing boot-up actions", default=False)
48 parser.add_option('-c', '--no-crash-handler', action='store_true', dest='no_crash_handler',
49 help="Disable the automatic crash handler", default=False)
50 parser.add_option('-d', '--debug', action='store_true', dest='debug',
51 help="Enable debug output", default=False)
52 parser.add_option('-v', '--version', action='store_true', dest='version_and_exit',
53 help="Print GTG's version number", default=False)
54 (options, args) = parser.parse_args()
55
56 if options.version_and_exit:
57 from GTG import info
58 print "gtg (Getting Things Gnome!) %s" %(info.VERSION)
59 print
60 print "For more information: %s" %(info.URL)
61 sys.exit(0)
62
63 elif not X_is_running():
64 print "Could not open X display"
65 sys.exit(1)
66
67 else:
68 import GTG.gtg
69 sys.exit(GTG.gtg.main(options, args))
70
71except KeyboardInterrupt:
72 sys.exit(1)
730
=== modified file 'test/data/bryce/xdg/config/gtg/gtg.conf'
--- test/data/bryce/xdg/config/gtg/gtg.conf 2010-06-16 07:54:55 +0000
+++ test/data/bryce/xdg/config/gtg/gtg.conf 2011-10-24 14:14:27 +0000
@@ -1,5 +1,6 @@
1[browser]1[browser]
2contents_preview_enable = True2contents_preview_enable = True
3AU_date_format_enable = True
3x_pos = 5624x_pos = 562
4collapsed_tags = ,5collapsed_tags = ,
5tag_pane_width = 2506tag_pane_width = 250

Subscribers

People subscribed via source and target branches

to status/vote changes: