GTG

Merge lp:~pcabido/gtg/plugin-engine into lp:~gtg/gtg/old-trunk

Proposed by Paulo Cabido
Status: Merged
Merged at revision: not available
Proposed branch: lp:~pcabido/gtg/plugin-engine
Merge into: lp:~gtg/gtg/old-trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~pcabido/gtg/plugin-engine
Reviewer Review Type Date Requested Status
Bertrand Rousseau (community) Approve
Review via email: mp+9435@code.launchpad.net
To post a comment you must log in.
lp:~pcabido/gtg/plugin-engine updated
303. By Paulo Cabido

fixed a bug in the plugin-engine, LoadPlugins and loadPlugin where changed

304. By Paulo Cabido

changed some of the names of the methos in the plugin api and corrected the plugins

305. By Paulo Cabido

fixed a small typo error in the hello world plugin and commented a debug line

306. By Paulo Cabido

commented some more debug prints on the engine

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 'AUTHORS'
2--- AUTHORS 2009-07-24 06:16:28 +0000
3+++ AUTHORS 2009-07-29 15:14:01 +0000
4@@ -34,3 +34,4 @@
5 * Ryan Paul <segphault@arstechnica.com>
6 * Jonathan Lange <jml@mumak.net>
7 * Kevin Mehall <km@kevinmehall.net>
8+* Paulo Cabido <paulo.cabido@gmail.com>
9
10=== modified file 'GTG/__init__.py'
11--- GTG/__init__.py 2009-07-23 20:14:01 +0000
12+++ GTG/__init__.py 2009-07-29 15:14:01 +0000
13@@ -68,3 +68,9 @@
14 DATA_DIR = DIST_ROOTDIR
15 else:
16 DATA_DIR = os.path.join(LOCAL_ROOTDIR,'data')
17+
18+#GTG plugin dir setup
19+if not os.path.isdir( os.path.join(LOCAL_ROOTDIR,'GTG/plugins/') ) :
20+ PLUGIN_DIR = [DIST_ROOTDIR]
21+else:
22+ PLUGIN_DIR = [os.path.join(LOCAL_ROOTDIR,'GTG/plugins/')]
23
24=== added directory 'GTG/core/plugins'
25=== added file 'GTG/core/plugins/__init__.py'
26--- GTG/core/plugins/__init__.py 1970-01-01 00:00:00 +0000
27+++ GTG/core/plugins/__init__.py 2009-07-07 15:12:42 +0000
28@@ -0,0 +1,28 @@
29+# -*- coding: utf-8 -*-
30+# -----------------------------------------------------------------------------
31+# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
32+# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
33+#
34+# This program is free software: you can redistribute it and/or modify it under
35+# the terms of the GNU General Public License as published by the Free Software
36+# Foundation, either version 3 of the License, or (at your option) any later
37+# version.
38+#
39+# This program is distributed in the hope that it will be useful, but WITHOUT
40+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
41+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
42+# details.
43+#
44+# You should have received a copy of the GNU General Public License along with
45+# this program. If not, see <http://www.gnu.org/licenses/>.
46+# -----------------------------------------------------------------------------
47+
48+
49+#This is the tool package. It contains some useful function and tool
50+#that could be useful for any part of GTG.
51+
52+import os
53+
54+class GnomeConfig :
55+ current_rep = os.path.dirname(os.path.abspath(__file__))
56+ GLADE_FILE = os.path.join(current_rep,"pluginmanager.glade")
57
58=== added file 'GTG/core/plugins/api.py'
59--- GTG/core/plugins/api.py 1970-01-01 00:00:00 +0000
60+++ GTG/core/plugins/api.py 2009-07-28 00:41:33 +0000
61@@ -0,0 +1,185 @@
62+# -*- coding: utf-8 -*-
63+# -----------------------------------------------------------------------------
64+# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
65+# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
66+#
67+# This program is free software: you can redistribute it and/or modify it under
68+# the terms of the GNU General Public License as published by the Free Software
69+# Foundation, either version 3 of the License, or (at your option) any later
70+# version.
71+#
72+# This program is distributed in the hope that it will be useful, but WITHOUT
73+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
74+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
75+# details.
76+#
77+# You should have received a copy of the GNU General Public License along with
78+# this program. If not, see <http://www.gnu.org/licenses/>.
79+# -----------------------------------------------------------------------------
80+import gtk
81+
82+class PluginAPI:
83+ def __init__(self, window, config, wTree, requester, taskview, workview_task_filter, \
84+ tagpopup, tagview, task=None, textview=None):
85+ # private vars
86+ self.__window = window
87+ self.config = config
88+ self.__wTree = wTree
89+ self.__requester = requester
90+
91+ self.taskview = taskview
92+ self.__workview_task_filter = workview_task_filter
93+
94+ self.__tagpopup = tagpopup
95+ self.tagview = tagview
96+
97+ if task:
98+ self.task = task
99+
100+ if textview:
101+ self.textview = textview
102+
103+ # adds items to the MenuBar of the Main Window (TaskBrowser)
104+ def AddMenuItem(self, item):
105+ self.__wTree.get_widget('menu_plugin').get_submenu().append(item)
106+ item.show()
107+
108+ # removes the item from the MenuBar
109+ def RemoveMenuItem(self, item):
110+ try:
111+ self.__wTree.get_widget('menu_plugin').get_submenu().remove(item)
112+ except Exception, e:
113+ print "Error removing menu item: %s" % e
114+
115+ def AddToolbarItem(self, item):
116+ # calculates the number of items on the ToolBar and adds the item
117+ # on the end
118+ try:
119+ i = 0
120+ while self.__wTree.get_widget('task_tb').get_nth_item(i) is not None:
121+ i = i + 1
122+ self.__wTree.get_widget('task_tb').insert(item, i)
123+ item.show()
124+ return i
125+ except Exception, e:
126+ print "Error adding a toolbar item: %s" % e
127+
128+ def RemoveToolbarItem(self, item, n=None):
129+ try:
130+ if not n:
131+ self.__wTree.get_widget('task_tb').remove(item)
132+ else:
133+ i = 0
134+ while self.__wTree.get_widget('task_tb').get_nth_item(i) is not None:
135+ if i == n:
136+ self.__wTree.get_widget('task_tb').remove(self.__wTree.get_widget('task_tb').get_nth_item(i))
137+ i = i + 1
138+ except Exception, e:
139+ print "Error removing a toolbar item: %s" % e
140+
141+ # adds items to the Task Menu
142+ def AddTaskToolbarItem(self, item):
143+ try:
144+ i = 0
145+ while self.__wTree.get_widget('task_tb1').get_nth_item(i) is not None:
146+ i = i + 1
147+ self.__wTree.get_widget('task_tb1').insert(item, i)
148+ item.show()
149+ except Exception, e:
150+ print "Error adding a toolbar item in to the TaskEditor: %s" % e
151+
152+ # passes the requester to the plugin
153+ def getRequester(self):
154+ return self.__requester
155+
156+ # changes the tasks TreeStore
157+ def changeTaskTreeStore(self, treestore):
158+ task_tview = self.__wTree.get_widget("task_tview")
159+ task_tview.set_model(treestore)
160+
161+ def get_all_tasks(self):
162+ return self.__requester.get_tasks_list()
163+
164+ # this method returns the task by tid or the current task in case
165+ # of the edit task window
166+ # by default returns the current task, in other words, it's default action
167+ # is to use with the onTaskOpened method
168+ def get_task(self, tid=None):
169+ if tid:
170+ return self.__requester.get_task(tid)
171+ else:
172+ return self.task
173+
174+ # this method only works for the onTaskOpened method
175+ def get_task_title(self):
176+ return self.task.get_title()
177+
178+ # adds a tag, updated the text buffer, inserting the tag at the end of
179+ # the task
180+ # this method only works for the onTaskOpened method
181+ def add_tag(self, tag):
182+ self.task.add_tag("@" + tag)
183+ #self.textview.insert_text("@" + tag)
184+ self.textview.insert_tag("@" + tag)
185+
186+ # adds a attribute to a tag
187+ # this method only works for the onTaskOpened method
188+ def add_tag_attribute(self, tag, attrib_name, attrib_value):
189+ try:
190+ tags = self.task.get_tags()
191+ for t in tags:
192+ if t.get_name() == tag:
193+ t.set_attribute(attrib_name, attrib_value)
194+ return True
195+ except:
196+ return False
197+
198+ # pass all the tags to the plug-in
199+ # this method only works for the onTaskOpened method
200+ def get_tags(self):
201+ return self.task.get_tags()
202+
203+ # this will allow plugins to use the textview properties
204+ def get_textview(self):
205+ return self.textview
206+
207+ # defines the child's parent window
208+ def set_parent_window(self, child):
209+ child.set_transient_for(self.__window)
210+
211+ # add's a menu to the tagpopup
212+ def add_menu_tagpopup(self, item):
213+ self.__tagpopup.append(item)
214+ item.show()
215+
216+ def remove_menu_tagpopup(self, item):
217+ self.__tagpopup.remove(item)
218+
219+ # get's the selected tag in the tag view
220+ def get_tagpopup_tag(self):
221+ selected = self.tagview.get_selection()
222+ model, iter = selected.get_selected()
223+ tag = model.get_value(iter, 0)
224+ return tag
225+
226+ # returns the task view in the main window (task browser)
227+ def get_taskview(self):
228+ return self.taskview
229+
230+ # returns the selected task in the task view
231+ def get_selected_task(self):
232+ selected = self.taskview.get_selection()
233+ model, iter = selected.get_selected()
234+ if iter:
235+ return self.__requester.get_task(model.get_value(iter, 0))
236+ else:
237+ return None
238+
239+ # returns the config object
240+ def get_config(self):
241+ return self.config
242+
243+ # add's a tid to the workview filter
244+ def add_task_to_workview_filter(self, tid):
245+ self.__workview_task_filter.append(tid)
246+
247\ No newline at end of file
248
249=== added file 'GTG/core/plugins/engine.py'
250--- GTG/core/plugins/engine.py 1970-01-01 00:00:00 +0000
251+++ GTG/core/plugins/engine.py 2009-07-26 22:24:46 +0000
252@@ -0,0 +1,152 @@
253+# -*- coding: utf-8 -*-
254+# -----------------------------------------------------------------------------
255+# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
256+# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
257+#
258+# This program is free software: you can redistribute it and/or modify it under
259+# the terms of the GNU General Public License as published by the Free Software
260+# Foundation, either version 3 of the License, or (at your option) any later
261+# version.
262+#
263+# This program is distributed in the hope that it will be useful, but WITHOUT
264+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
265+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
266+# details.
267+#
268+# You should have received a copy of the GNU General Public License along with
269+# this program. If not, see <http://www.gnu.org/licenses/>.
270+# -----------------------------------------------------------------------------
271+
272+import pkgutil
273+import imp
274+import os
275+
276+try:
277+ import pygtk
278+ pygtk.require("2.0")
279+except:
280+ sys.exit(1)
281+try:
282+ import gtk
283+except:
284+ sys.exit(1)
285+
286+
287+
288+# this class manages the plug-ins
289+class PluginEngine:
290+
291+ # initializes the plug-in engine
292+ # NOTE: the path has to be a list of paths
293+ def __init__(self, plugin_path):
294+ self.Plugins = []
295+ self.plugin_path = plugin_path
296+ self.initialized_plugins = []
297+
298+ # loads the plugins from the plugin dir
299+ def LoadPlugins(self):
300+ plugins = {}
301+
302+ # find all the folders in the plugin dir
303+ plugin_dirs = []
304+ plugin_dirs.append(self.plugin_path[0])
305+ for f in os.listdir(self.plugin_path[0]):
306+ if os.path.isdir(os.path.join(self.plugin_path[0], f)):
307+ plugin_dirs.append(os.path.join(self.plugin_path[0], f))
308+
309+ try:
310+ for loader, name, ispkg in pkgutil.iter_modules(plugin_dirs):
311+ file, pathname, desc = imp.find_module(name, plugin_dirs)
312+ plugins[name] = imp.load_module(name, file, pathname, desc)
313+ except Exception, e:
314+ print "Error: %s" % e
315+
316+ for name, plugin in plugins.items():
317+ tmp_plgin = self.loadPlugin(plugin)
318+ if tmp_plgin:
319+ self.Plugins.append(tmp_plgin)
320+
321+ return self.Plugins
322+
323+ # checks if the module loaded is a plugin and gets the main class
324+ def loadPlugin(self, plugin):
325+ plugin_locals = plugin.__dict__
326+ is_plugin = False
327+ loaded_plugin = {}
328+
329+ # find the plugin class
330+ for key in plugin_locals.keys():
331+ try:
332+ is_plugin = getattr(plugin_locals[key], 'PLUGIN_NAME', None)
333+ except TypeError:
334+ continue
335+
336+ # loads the plugin info
337+ if is_plugin:
338+ try:
339+ loaded_plugin['plugin'] = plugin.__name__
340+ loaded_plugin['class_name'] = key
341+ loaded_plugin['class'] = plugin_locals[key]
342+ loaded_plugin['name'] = plugin_locals[key].PLUGIN_NAME
343+ loaded_plugin['version'] = plugin_locals[key].PLUGIN_VERSION
344+ loaded_plugin['authors'] = plugin_locals[key].PLUGIN_AUTHORS
345+ loaded_plugin['description'] = plugin_locals[key].PLUGIN_DESCRIPTION
346+ loaded_plugin['state'] = plugin_locals[key].PLUGIN_ENABLED
347+ loaded_plugin['instance'] = None
348+ except:
349+ continue
350+
351+ if not loaded_plugin:
352+ return None
353+ return loaded_plugin
354+
355+ def enabledPlugins(self, plugins):
356+ pe = []
357+ for p in plugins:
358+ if p['state']:
359+ pe.append(p['name'])
360+ return pe
361+
362+ def disabledPlugins(self, plugins):
363+ pd = []
364+ for p in plugins:
365+ if not p['state']:
366+ pd.append(p['name'])
367+ return pd
368+
369+ # activates the plugins
370+ def activatePlugins(self, plugins, plugin_api):
371+ for plgin in plugins:
372+ if plgin['state']:
373+ plgin['instance'] = plgin['class']()
374+ plgin['instance'].activate(plugin_api)
375+
376+ # deactivate the enabled plugins
377+ def deactivatePlugins(self, plugins, plugin_api):
378+ for plgin in plugins:
379+ if plgin['state']:
380+ plgin['instance'].deactivate(plugin_api)
381+
382+ # loads the plug-in features for a task
383+ def onTaskLoad(self, plugins, plugin_api):
384+ for plgin in plugins:
385+ if plgin['state']:
386+ plgin['instance'].onTaskOpened(plugin_api)
387+
388+ # rechecks the plug-ins to see if any changes where done to the state
389+ def recheckPlugins(self, plugins, plugin_api):
390+ for plgin in plugins:
391+ if plgin['instance'] != None and plgin['state'] == False:
392+ try:
393+ print "deactivating plugin: " + plgin['name']
394+ plgin['instance'].deactivate(plugin_api)
395+ plgin['instance'] = None
396+ except Exception, e:
397+ print "Error: %s" % e
398+ elif plgin['instance'] == None and plgin['state'] == True:
399+ try:
400+ print "activating plugin: " + plgin['name']
401+ plgin['instance'] = plgin['class']()
402+ plgin['instance'].activate(plugin_api)
403+ except Exception, e:
404+ print "Error: %s" % e
405
406=== added file 'GTG/core/plugins/manager.py'
407--- GTG/core/plugins/manager.py 1970-01-01 00:00:00 +0000
408+++ GTG/core/plugins/manager.py 2009-07-17 02:01:48 +0000
409@@ -0,0 +1,126 @@
410+# -*- coding: utf-8 -*-
411+# -----------------------------------------------------------------------------
412+# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
413+# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
414+#
415+# This program is free software: you can redistribute it and/or modify it under
416+# the terms of the GNU General Public License as published by the Free Software
417+# Foundation, either version 3 of the License, or (at your option) any later
418+# version.
419+#
420+# This program is distributed in the hope that it will be useful, but WITHOUT
421+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
422+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
423+# details.
424+#
425+# You should have received a copy of the GNU General Public License along with
426+# this program. If not, see <http://www.gnu.org/licenses/>.
427+# -----------------------------------------------------------------------------
428+
429+from GTG.core.plugins import GnomeConfig
430+# not being used
431+#from GTG.core.plugins.engine import PluginEngine
432+#from GTG.core.plugins.engine import PluginAPI
433+
434+import sys
435+import gobject
436+
437+try:
438+ import pygtk
439+ pygtk.require("2.0")
440+except:
441+ sys.exit(1)
442+try:
443+ import gtk
444+except:
445+ sys.exit(1)
446+
447+class PluginManager:
448+
449+ def __init__(self, parent, plugins, pengine, plugin_api):
450+ self.plugins = plugins
451+ self.pengine = pengine
452+ self.plugin_api = plugin_api
453+ self.gladefile = GnomeConfig.GLADE_FILE
454+ self.wTree = gtk.glade.XML(self.gladefile, "PluginManagerDialog")
455+
456+ self.dialog = self.wTree.get_widget("PluginManagerDialog")
457+
458+ # stuff to populate
459+ self.lblPluginName = self.wTree.get_widget("lblPluginName")
460+ self.lblPluginVersion = self.wTree.get_widget("lblPluginVersion")
461+ self.lblPluginAuthors = self.wTree.get_widget("lblPluginAuthors")
462+ self.txtPluginDescription = self.wTree.get_widget("txtPluginDescription")
463+
464+ #self.btnClose = self.wTree.get_widget("close_btn")
465+ #self.btnClose.connect('clicked', self.close, None)
466+
467+ # liststore
468+ self.PluginList = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING)
469+ for plgin in self.plugins:
470+ #print "file name :", name
471+ self.PluginList.append([plgin['state'], plgin['name'], plgin['version']])
472+ # end - liststore
473+
474+ # treeview
475+ self.pluginTree = self.wTree.get_widget("pluginTree")
476+
477+ self.rendererToggle = gtk.CellRendererToggle()
478+ self.rendererToggle.set_property('activatable', True)
479+ self.rendererToggle.connect('toggled', self.colToggledClicked, self.PluginList)
480+ self.colToggle = gtk.TreeViewColumn("Enabled", self.rendererToggle)
481+ self.colToggle.add_attribute(self.rendererToggle, "active", 0)
482+
483+ self.rendererText = gtk.CellRendererText()
484+ self.colName = gtk.TreeViewColumn("Name", self.rendererText, text=1)
485+ self.colVersion = gtk.TreeViewColumn("Version", self.rendererText, text=2)
486+
487+ self.pluginTree.append_column(self.colToggle)
488+ self.pluginTree.append_column(self.colName)
489+ self.pluginTree.append_column(self.colVersion)
490+
491+ self.pluginTree.set_model(self.PluginList)
492+ self.pluginTree.set_search_column(2)
493+ # end - treeview
494+
495+ self.dialog.set_transient_for(parent)
496+
497+ # connect signals
498+ self.dialog.connect("delete_event", self.close)
499+ self.dialog.connect("response", self.close)
500+ self.pluginTree.connect("cursor-changed", self.pluginExtraInfo, self.plugins)
501+
502+ self.dialog.show_all()
503+
504+
505+ def close(self, widget, response=None):
506+ # get the plugins that are going to be initialized and the ones
507+ # that are going do be desabled
508+ self.pengine.recheckPlugins(self.plugins, self.plugin_api)
509+ self.dialog.destroy()
510+ return True
511+
512+ #def delete(self, widget, response=None):
513+ # self.dialog.destroy()
514+ # return True
515+
516+ def colToggledClicked(self, cell, path, model):
517+ model[path][0] = not model[path][0]
518+ if path:
519+ iter = model.get_iter(path)
520+ for plgin in self.plugins:
521+ if model[path][1] == plgin['name'] and model[path][2] == plgin['version']:
522+ plgin['state'] = not plgin['state']
523+
524+ def pluginExtraInfo(self, treeview, plugins):
525+ path = treeview.get_cursor()[0]
526+ if path:
527+ model = treeview.get_model()
528+ iter = treeview.get_model().get_iter(path)
529+
530+ for plgin in plugins:
531+ if (model.get_value(iter,1) == plgin['name']) and (model.get_value(iter,2) == plgin['version']):
532+ self.lblPluginName.set_label("<b>" + plgin['name'] + "</b>")
533+ self.lblPluginVersion.set_label(plgin['version'])
534+ self.lblPluginAuthors.set_label(plgin['authors'])
535+ self.txtPluginDescription.get_buffer().set_text(plgin['description'].replace("\n", " ").replace(r'\n', "\n"))
536
537=== added file 'GTG/core/plugins/pluginmanager.glade'
538--- GTG/core/plugins/pluginmanager.glade 1970-01-01 00:00:00 +0000
539+++ GTG/core/plugins/pluginmanager.glade 2009-07-07 15:12:42 +0000
540@@ -0,0 +1,351 @@
541+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
542+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
543+
544+<glade-interface>
545+<requires lib="gnome"/>
546+
547+<widget class="GtkDialog" id="PluginManagerDialog">
548+ <property name="width_request">670</property>
549+ <property name="height_request">410</property>
550+ <property name="visible">True</property>
551+ <property name="title" translatable="yes">Plugin Manager</property>
552+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
553+ <property name="window_position">GTK_WIN_POS_NONE</property>
554+ <property name="modal">False</property>
555+ <property name="resizable">True</property>
556+ <property name="destroy_with_parent">False</property>
557+ <property name="decorated">True</property>
558+ <property name="skip_taskbar_hint">False</property>
559+ <property name="skip_pager_hint">False</property>
560+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
561+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
562+ <property name="focus_on_map">True</property>
563+ <property name="urgency_hint">False</property>
564+ <property name="has_separator">True</property>
565+
566+ <child internal-child="vbox">
567+ <widget class="GtkVBox" id="dialog-vbox2">
568+ <property name="visible">True</property>
569+ <property name="homogeneous">False</property>
570+ <property name="spacing">0</property>
571+
572+ <child internal-child="action_area">
573+ <widget class="GtkHButtonBox" id="dialog-action_area2">
574+ <property name="visible">True</property>
575+ <property name="layout_style">GTK_BUTTONBOX_END</property>
576+
577+ <child>
578+ <widget class="GtkButton" id="close_btn">
579+ <property name="visible">True</property>
580+ <property name="can_default">True</property>
581+ <property name="can_focus">True</property>
582+ <property name="label">gtk-close</property>
583+ <property name="use_stock">True</property>
584+ <property name="relief">GTK_RELIEF_NORMAL</property>
585+ <property name="focus_on_click">True</property>
586+ <property name="response_id">-7</property>
587+ </widget>
588+ </child>
589+ </widget>
590+ <packing>
591+ <property name="padding">0</property>
592+ <property name="expand">False</property>
593+ <property name="fill">True</property>
594+ <property name="pack_type">GTK_PACK_END</property>
595+ </packing>
596+ </child>
597+
598+ <child>
599+ <widget class="GtkHBox" id="hbox3">
600+ <property name="visible">True</property>
601+ <property name="homogeneous">False</property>
602+ <property name="spacing">0</property>
603+
604+ <child>
605+ <widget class="GtkScrolledWindow" id="scrolledwindow3">
606+ <property name="width_request">240</property>
607+ <property name="visible">True</property>
608+ <property name="can_focus">True</property>
609+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
610+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
611+ <property name="shadow_type">GTK_SHADOW_IN</property>
612+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
613+
614+ <child>
615+ <widget class="GtkTreeView" id="pluginTree">
616+ <property name="visible">True</property>
617+ <property name="can_focus">True</property>
618+ <property name="headers_visible">True</property>
619+ <property name="rules_hint">False</property>
620+ <property name="reorderable">False</property>
621+ <property name="enable_search">True</property>
622+ <property name="fixed_height_mode">False</property>
623+ <property name="hover_selection">False</property>
624+ <property name="hover_expand">False</property>
625+ </widget>
626+ </child>
627+ </widget>
628+ <packing>
629+ <property name="padding">0</property>
630+ <property name="expand">False</property>
631+ <property name="fill">False</property>
632+ </packing>
633+ </child>
634+
635+ <child>
636+ <widget class="GtkFrame" id="frame2">
637+ <property name="visible">True</property>
638+ <property name="label_xalign">0</property>
639+ <property name="label_yalign">0.5</property>
640+ <property name="shadow_type">GTK_SHADOW_NONE</property>
641+
642+ <child>
643+ <widget class="GtkAlignment" id="alignment2">
644+ <property name="visible">True</property>
645+ <property name="xalign">0.5</property>
646+ <property name="yalign">0.5</property>
647+ <property name="xscale">1</property>
648+ <property name="yscale">1</property>
649+ <property name="top_padding">0</property>
650+ <property name="bottom_padding">0</property>
651+ <property name="left_padding">12</property>
652+ <property name="right_padding">0</property>
653+
654+ <child>
655+ <widget class="GtkVBox" id="vbox2">
656+ <property name="visible">True</property>
657+ <property name="homogeneous">False</property>
658+ <property name="spacing">0</property>
659+
660+ <child>
661+ <widget class="GtkHBox" id="hbox5">
662+ <property name="visible">True</property>
663+ <property name="homogeneous">False</property>
664+ <property name="spacing">0</property>
665+
666+ <child>
667+ <widget class="GtkLabel" id="label10">
668+ <property name="visible">True</property>
669+ <property name="label" translatable="yes">Version: </property>
670+ <property name="use_underline">False</property>
671+ <property name="use_markup">False</property>
672+ <property name="justify">GTK_JUSTIFY_LEFT</property>
673+ <property name="wrap">False</property>
674+ <property name="selectable">False</property>
675+ <property name="xalign">0</property>
676+ <property name="yalign">0.5</property>
677+ <property name="xpad">1</property>
678+ <property name="ypad">4</property>
679+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
680+ <property name="width_chars">-1</property>
681+ <property name="single_line_mode">False</property>
682+ <property name="angle">0</property>
683+ </widget>
684+ <packing>
685+ <property name="padding">0</property>
686+ <property name="expand">False</property>
687+ <property name="fill">False</property>
688+ </packing>
689+ </child>
690+
691+ <child>
692+ <widget class="GtkLabel" id="lblPluginVersion">
693+ <property name="visible">True</property>
694+ <property name="label" translatable="yes"></property>
695+ <property name="use_underline">False</property>
696+ <property name="use_markup">False</property>
697+ <property name="justify">GTK_JUSTIFY_LEFT</property>
698+ <property name="wrap">False</property>
699+ <property name="selectable">False</property>
700+ <property name="xalign">0</property>
701+ <property name="yalign">0.5</property>
702+ <property name="xpad">1</property>
703+ <property name="ypad">4</property>
704+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
705+ <property name="width_chars">-1</property>
706+ <property name="single_line_mode">False</property>
707+ <property name="angle">0</property>
708+ </widget>
709+ <packing>
710+ <property name="padding">0</property>
711+ <property name="expand">False</property>
712+ <property name="fill">False</property>
713+ </packing>
714+ </child>
715+ </widget>
716+ <packing>
717+ <property name="padding">0</property>
718+ <property name="expand">False</property>
719+ <property name="fill">False</property>
720+ </packing>
721+ </child>
722+
723+ <child>
724+ <widget class="GtkHBox" id="hbox6">
725+ <property name="visible">True</property>
726+ <property name="homogeneous">False</property>
727+ <property name="spacing">0</property>
728+
729+ <child>
730+ <widget class="GtkLabel" id="label11">
731+ <property name="visible">True</property>
732+ <property name="label" translatable="yes">Authors: </property>
733+ <property name="use_underline">False</property>
734+ <property name="use_markup">False</property>
735+ <property name="justify">GTK_JUSTIFY_LEFT</property>
736+ <property name="wrap">False</property>
737+ <property name="selectable">False</property>
738+ <property name="xalign">0</property>
739+ <property name="yalign">0.5</property>
740+ <property name="xpad">1</property>
741+ <property name="ypad">4</property>
742+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
743+ <property name="width_chars">-1</property>
744+ <property name="single_line_mode">False</property>
745+ <property name="angle">0</property>
746+ </widget>
747+ <packing>
748+ <property name="padding">0</property>
749+ <property name="expand">False</property>
750+ <property name="fill">False</property>
751+ </packing>
752+ </child>
753+
754+ <child>
755+ <widget class="GtkLabel" id="lblPluginAuthors">
756+ <property name="visible">True</property>
757+ <property name="label" translatable="yes"></property>
758+ <property name="use_underline">False</property>
759+ <property name="use_markup">False</property>
760+ <property name="justify">GTK_JUSTIFY_LEFT</property>
761+ <property name="wrap">True</property>
762+ <property name="selectable">False</property>
763+ <property name="xalign">0.5</property>
764+ <property name="yalign">0.5</property>
765+ <property name="xpad">0</property>
766+ <property name="ypad">0</property>
767+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
768+ <property name="width_chars">-1</property>
769+ <property name="single_line_mode">False</property>
770+ <property name="angle">0</property>
771+ </widget>
772+ <packing>
773+ <property name="padding">0</property>
774+ <property name="expand">False</property>
775+ <property name="fill">False</property>
776+ </packing>
777+ </child>
778+ </widget>
779+ <packing>
780+ <property name="padding">0</property>
781+ <property name="expand">False</property>
782+ <property name="fill">False</property>
783+ </packing>
784+ </child>
785+
786+ <child>
787+ <widget class="GtkLabel" id="label14">
788+ <property name="visible">True</property>
789+ <property name="label" translatable="yes">Description:</property>
790+ <property name="use_underline">False</property>
791+ <property name="use_markup">False</property>
792+ <property name="justify">GTK_JUSTIFY_LEFT</property>
793+ <property name="wrap">False</property>
794+ <property name="selectable">False</property>
795+ <property name="xalign">0</property>
796+ <property name="yalign">0.5</property>
797+ <property name="xpad">0</property>
798+ <property name="ypad">4</property>
799+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
800+ <property name="width_chars">-1</property>
801+ <property name="single_line_mode">False</property>
802+ <property name="angle">0</property>
803+ </widget>
804+ <packing>
805+ <property name="padding">0</property>
806+ <property name="expand">False</property>
807+ <property name="fill">False</property>
808+ </packing>
809+ </child>
810+
811+ <child>
812+ <widget class="GtkScrolledWindow" id="scrolledwindow4">
813+ <property name="visible">True</property>
814+ <property name="can_focus">True</property>
815+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
816+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
817+ <property name="shadow_type">GTK_SHADOW_IN</property>
818+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
819+
820+ <child>
821+ <widget class="GtkTextView" id="txtPluginDescription">
822+ <property name="visible">True</property>
823+ <property name="can_focus">True</property>
824+ <property name="editable">False</property>
825+ <property name="overwrite">False</property>
826+ <property name="accepts_tab">True</property>
827+ <property name="justification">GTK_JUSTIFY_LEFT</property>
828+ <property name="wrap_mode">GTK_WRAP_WORD</property>
829+ <property name="cursor_visible">False</property>
830+ <property name="pixels_above_lines">0</property>
831+ <property name="pixels_below_lines">0</property>
832+ <property name="pixels_inside_wrap">0</property>
833+ <property name="left_margin">0</property>
834+ <property name="right_margin">0</property>
835+ <property name="indent">0</property>
836+ <property name="text" translatable="yes"></property>
837+ </widget>
838+ </child>
839+ </widget>
840+ <packing>
841+ <property name="padding">0</property>
842+ <property name="expand">True</property>
843+ <property name="fill">True</property>
844+ </packing>
845+ </child>
846+ </widget>
847+ </child>
848+ </widget>
849+ </child>
850+
851+ <child>
852+ <widget class="GtkLabel" id="lblPluginName">
853+ <property name="visible">True</property>
854+ <property name="label" translatable="yes">&lt;b&gt;No Plugin Selected&lt;/b&gt;</property>
855+ <property name="use_underline">False</property>
856+ <property name="use_markup">True</property>
857+ <property name="justify">GTK_JUSTIFY_LEFT</property>
858+ <property name="wrap">False</property>
859+ <property name="selectable">False</property>
860+ <property name="xalign">0.5</property>
861+ <property name="yalign">0.5</property>
862+ <property name="xpad">10</property>
863+ <property name="ypad">4</property>
864+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
865+ <property name="width_chars">-1</property>
866+ <property name="single_line_mode">False</property>
867+ <property name="angle">0</property>
868+ </widget>
869+ <packing>
870+ <property name="type">label_item</property>
871+ </packing>
872+ </child>
873+ </widget>
874+ <packing>
875+ <property name="padding">2</property>
876+ <property name="expand">True</property>
877+ <property name="fill">True</property>
878+ </packing>
879+ </child>
880+ </widget>
881+ <packing>
882+ <property name="padding">0</property>
883+ <property name="expand">True</property>
884+ <property name="fill">True</property>
885+ </packing>
886+ </child>
887+ </widget>
888+ </child>
889+</widget>
890+
891+</glade-interface>
892
893=== added directory 'GTG/plugins'
894=== added directory 'GTG/plugins/geolocalized-tasks'
895=== added file 'GTG/plugins/geolocalized-tasks/geolocalized-tasks.py'
896--- GTG/plugins/geolocalized-tasks/geolocalized-tasks.py 1970-01-01 00:00:00 +0000
897+++ GTG/plugins/geolocalized-tasks/geolocalized-tasks.py 2009-07-29 16:20:32 +0000
898@@ -0,0 +1,572 @@
899+# -*- coding: utf-8 -*-
900+# Copyright (c) 2009 - Paulo Cabido <paulo.cabido@gmail.com>
901+#
902+# This program is free software: you can redistribute it and/or modify it under
903+# the terms of the GNU General Public License as published by the Free Software
904+# Foundation, either version 3 of the License, or (at your option) any later
905+# version.
906+#
907+# This program is distributed in the hope that it will be useful, but WITHOUT
908+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
909+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
910+# details.
911+#
912+# You should have received a copy of the GNU General Public License along with
913+# this program. If not, see <http://www.gnu.org/licenses/>.
914+
915+import gtk, pygtk
916+import os, sys
917+from time import sleep
918+
919+from xdg.BaseDirectory import *
920+from configobj import ConfigObj
921+
922+import Geoclue
923+
924+import clutter, cluttergtk
925+import champlain, champlaingtk
926+
927+# IMPORTANT This add's the plugin's path to python sys path
928+sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
929+from marker import MarkerLayer
930+
931+
932+from GTG.core.plugins.engine import PluginEngine
933+
934+class geolocalizedTasks:
935+ PLUGIN_NAME = 'Geolocalized Tasks'
936+ PLUGIN_AUTHORS = 'Paulo Cabido <paulo.cabido@gmail.com>'
937+ PLUGIN_VERSION = '0.1'
938+ PLUGIN_DESCRIPTION = 'This plugin adds geolocalized tasks to GTG!.\n \
939+ WARNING: This plugin is still heavy development.'
940+
941+ PLUGIN_ENABLED = False
942+
943+ def __init__(self):
944+ self.geoclue = Geoclue.DiscoverLocation()
945+ self.geoclue.init()
946+ self.location = self.geoclue.get_location_info()
947+
948+ self.plugin_path = os.path.dirname(os.path.abspath(__file__))
949+ self.glade_file = os.path.join(self.plugin_path, "geolocalized.glade")
950+
951+ # the preference menu for the plugin
952+ self.menu_item = gtk.MenuItem("Geolocalized-tasks Preferences")
953+
954+ # toolbar button for the new Location view
955+ # create the pixbuf with the icon and it's size.
956+ # 24,24 is the TaskEditor's toolbar icon size
957+ image_geolocalization_path = os.path.join(self.plugin_path, "icons/hicolor/24x24/geolocalization.png")
958+ pixbuf_geolocalization = gtk.gdk.pixbuf_new_from_file_at_size(image_geolocalization_path, 24, 24)
959+
960+ image_assign_location_path = os.path.join(self.plugin_path, "icons/hicolor/16x16/assign-location.png")
961+ pixbug_assign_location = gtk.gdk.pixbuf_new_from_file_at_size(image_assign_location_path, 16, 16)
962+
963+ # create the image and associate the pixbuf
964+ self.icon_geolocalization = gtk.Image()
965+ self.icon_geolocalization.set_from_pixbuf(pixbuf_geolocalization)
966+ self.icon_geolocalization.show()
967+
968+ image_assign_location = gtk.Image()
969+ image_assign_location.set_from_pixbuf(pixbug_assign_location)
970+ image_assign_location.show()
971+
972+ # the menu intem for the tag context
973+ self.context_item = gtk.ImageMenuItem("Assign a location to this tag")
974+ self.context_item.set_image(image_assign_location)
975+ # TODO: add a short cut to the menu
976+
977+ # toolbar button for the location_view
978+ self.btn_location_view = gtk.ToggleToolButton()
979+ self.btn_location_view.set_icon_widget(self.icon_geolocalization)
980+ self.btn_location_view.set_label("Location View")
981+
982+ self.PROXIMITY_FACTOR = 5 # 5 km
983+ self.LOCATION_ACCURACY = 3 # Locality
984+ self.LOCATION_DETERMINATION_METHOD = ["network", "gps", "cellphone"]
985+ #for provider in self.geoclue.get_available_providers():
986+ # if provider['position'] and (provider['provider'] != "Example Provider" and provider['provider'] != "Plazes"):
987+ # self.LOCATION_DETERMINATION_METHOD.append(provider["provider"])
988+
989+
990+
991+ def activate(self, plugin_api):
992+ self.menu_item.connect('activate', self.on_geolocalized_preferences, plugin_api)
993+ plugin_api.AddMenuItem(self.menu_item)
994+
995+ self.context_item.connect('activate', self.on_contextmenu_tag_location, plugin_api)
996+ plugin_api.add_menu_tagpopup(self.context_item)
997+
998+ # get the user settings from the config file
999+ self.config = plugin_api.get_config()
1000+ if self.config.has_key("geolocalized-tasks"):
1001+ if self.config["geolocalized-tasks"].has_key("proximity_factor"):
1002+ self.PROXIMITY_FACTOR = self.config["geolocalized-tasks"]["proximity_factor"]
1003+
1004+ if self.config["geolocalized-tasks"].has_key("accuracy"):
1005+ self.LOCATION_ACCURACY = self.config["geolocalized-tasks"]["accuracy"]
1006+
1007+ if self.config["geolocalized-tasks"].has_key("location_determination_method"):
1008+ self.LOCATION_DETERMINATION_METHOD = self.config["geolocalized-tasks"]["location_determination_method"]
1009+
1010+ # filter the tasks location for the workview
1011+ self.filter_workview_by_location(plugin_api)
1012+
1013+ def deactivate(self, plugin_api):
1014+ plugin_api.RemoveMenuItem(self.menu_item)
1015+ plugin_api.remove_menu_tagpopup(self.context_item)
1016+ #plugin_api.RemoveToolbarItem(None, self.seperator_location_view)
1017+
1018+ self.config["geolocalized-tasks"] = {}
1019+ self.config["geolocalized-tasks"]["proximity_factor"] = self.PROXIMITY_FACTOR
1020+ self.config["geolocalized-tasks"]["accuracy"] = self.LOCATION_ACCURACY
1021+ self.config["geolocalized-tasks"]["location_determination_method"] = self.LOCATION_DETERMINATION_METHOD
1022+
1023+ def onTaskOpened(self, plugin_api):
1024+ plugin_api.AddTaskToolbarItem(gtk.SeparatorToolItem())
1025+
1026+ btn_set_location = gtk.ToolButton()
1027+ btn_set_location.set_icon_widget(self.icon_geolocalization)
1028+ btn_set_location.set_label("Set/View location")
1029+ btn_set_location.connect('clicked', self.set_task_location, plugin_api)
1030+ plugin_api.AddTaskToolbarItem(btn_set_location)
1031+
1032+ # the task location filter
1033+ def filter_workview_by_location(self, plugin_api):
1034+ # TODO: if the location has a delay in being calculated it may not exist at
1035+ # this point
1036+ if self.location.has_key("latitude") and self.location.has_key("longitude"):
1037+ tasks = plugin_api.get_all_tasks()
1038+
1039+ tasks_with_location = []
1040+ tasks_without_location = []
1041+
1042+ for tid in tasks:
1043+ task = plugin_api.get_task(tid)
1044+ tags = task.get_tags()
1045+ for tag in tags:
1046+ if "location" in tag.get_all_attributes():
1047+ tasks_with_location.append(task)
1048+ else:
1049+ tasks_without_location.append(task)
1050+
1051+ for task in tasks_with_location:
1052+ if task.is_workable():
1053+ tags = task.get_tags()
1054+ for tag in tags:
1055+ if tag.get_attribute("location"):
1056+ position = eval(tag.get_attribute("location"))
1057+ if not self.geoclue.compare_position(position[0], position[1], float(self.PROXIMITY_FACTOR)):
1058+ plugin_api.add_task_to_workview_filter(task.get_id())
1059+
1060+
1061+ #=== GEOLOCALIZED PREFERENCES===================================================
1062+ def on_geolocalized_preferences(self, widget, plugin_api):
1063+ wTree = gtk.glade.XML(self.glade_file, "Preferences")
1064+ dialog = wTree.get_widget("Preferences")
1065+ dialog.connect("response", self.preferences_close)
1066+ plugin_api.set_parent_window(dialog)
1067+
1068+ cmb_accuracy = wTree.get_widget("cmb_accuracy")
1069+ for i in range(len(cmb_accuracy.get_model())):
1070+ if str(self.accuracy_to_value(cmb_accuracy.get_model()[i][0])) == str(self.LOCATION_ACCURACY):
1071+ cmb_accuracy.set_active(i)
1072+ cmb_accuracy.connect("changed", self.cmb_accuracy_changed)
1073+ self.tmp_location_accuracy = self.LOCATION_ACCURACY
1074+
1075+ check_network = wTree.get_widget("check_network")
1076+ check_cellphone = wTree.get_widget("check_cellphone")
1077+ check_gps = wTree.get_widget("check_gps")
1078+
1079+ if "network" in self.LOCATION_DETERMINATION_METHOD:
1080+ check_network.set_active(True)
1081+
1082+ if "cellphone" in self.LOCATION_DETERMINATION_METHOD:
1083+ check_cellphone.set_active(True)
1084+
1085+ if "gps" in self.LOCATION_DETERMINATION_METHOD:
1086+ check_gps.set_active(True)
1087+
1088+
1089+ spin_proximityfactor = wTree.get_widget("spin_proximityfactor")
1090+ spin_proximityfactor.set_value(float(self.PROXIMITY_FACTOR))
1091+ spin_proximityfactor.connect("changed", self.spin_proximityfactor_changed)
1092+ self.tmp_proximityfactor = float(self.PROXIMITY_FACTOR)
1093+
1094+ dialog.show_all()
1095+
1096+ # converts the accuracy to a value
1097+ def accuracy_to_value(self, accuracy):
1098+ if not accuracy:
1099+ return 0
1100+ elif accuracy.lower() == "Country".lower():
1101+ return 1
1102+ elif accuracy.lower() == "Region".lower():
1103+ return 2
1104+ elif accuracy.lower() == "Locality".lower():
1105+ return 3
1106+ elif accuracy.lower() == "Postalcode".lower():
1107+ return 4
1108+ elif accuracy.lower() == "Street".lower():
1109+ return 5
1110+ elif accuracy.lower() == "Detailed".lower():
1111+ return 6
1112+ return 0
1113+
1114+ # converts the value of a accuracy to the accuracy
1115+ def value_to_accuracy(self, value):
1116+ if not value:
1117+ return None
1118+ elif value == 1:
1119+ return "Country"
1120+ elif value == 2:
1121+ return "Region"
1122+ elif value == 3:
1123+ return "Locality"
1124+ elif value == 4:
1125+ return "Postalcode"
1126+ elif value == 5:
1127+ return "Street"
1128+ elif value == 6:
1129+ return "Detailed"
1130+ return None
1131+
1132+ def cmb_accuracy_changed(self, comboboxentry):
1133+ index = comboboxentry.get_active()
1134+ model = comboboxentry.get_model()
1135+ self.tmp_location_accuracy = self.accuracy_to_value(model[index][0])
1136+
1137+ def spin_proximityfactor_changed(self, spinbutton):
1138+ self.tmp_proximityfactor = spinbutton.get_value()
1139+
1140+ def preferences_close(self, dialog, response=None):
1141+ if response == gtk.RESPONSE_OK:
1142+ self.LOCATION_ACCURACY = self.tmp_location_accuracy
1143+ self.PROXIMITY_FACTOR = float(self.tmp_proximityfactor)
1144+ dialog.destroy()
1145+ else:
1146+ dialog.destroy()
1147+
1148+ #=== GEOLOCALIZED PREFERENCES===================================================
1149+
1150+ #=== SET TASK LOCATION =========================================================
1151+ def set_task_location(self, widget, plugin_api, location=None):
1152+ location = self.geoclue.get_location_info()
1153+ self.plugin_api = plugin_api
1154+
1155+ wTree = gtk.glade.XML(self.glade_file, "SetTaskLocation")
1156+ dialog = wTree.get_widget("SetTaskLocation")
1157+ self.plugin_api.set_parent_window(dialog)
1158+
1159+ btn_zoom_in = wTree.get_widget("btn_zoom_in")
1160+ btn_zoom_out = wTree.get_widget("btn_zoom_out")
1161+
1162+ self.radiobutton1 = wTree.get_widget("radiobutton1")
1163+ self.radiobutton2 = wTree.get_widget("radiobutton2")
1164+ self.txt_new_tag = wTree.get_widget("txt_new_tag")
1165+ self.cmb_existing_tag = wTree.get_widget("cmb_existing_tag")
1166+
1167+ tabela = wTree.get_widget("tabela_set_task")
1168+ vbox_map = wTree.get_widget("vbox_map")
1169+ vbox_opt = wTree.get_widget("vbox_opt")
1170+
1171+ champlain_view = champlain.View()
1172+ champlain_view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
1173+ #champlain_view.set_property("zoom-on-double-click", False)
1174+
1175+ # create a list of the tags and their attributes
1176+ tag_list = []
1177+ for tag in plugin_api.get_tags():
1178+ tmp_tag = {}
1179+ for attr in tag.get_all_attributes():
1180+ if attr == "color":
1181+ tmp_tag[attr] = self.HTMLColorToRGB(tag.get_attribute(attr))
1182+ tmp_tag['has_color'] = "yes"
1183+ elif attr == "location":
1184+ tmp_tag[attr] = eval(tag.get_attribute(attr))
1185+ else:
1186+ tmp_tag[attr] = tag.get_attribute(attr)
1187+ tag_list.append(tmp_tag)
1188+
1189+ # checks if there is one tag with a location
1190+ task_has_location = False
1191+ for tag in tag_list:
1192+ for key, item in tag.items():
1193+ if key == "location":
1194+ task_has_location = True
1195+ break
1196+
1197+ # set the markers
1198+ layer = MarkerLayer()
1199+
1200+ self.marker_list = []
1201+ if task_has_location:
1202+ for tag in tag_list:
1203+ for key, item in tag.items():
1204+ if key == "location":
1205+ color = None
1206+ try:
1207+ if tag['has_color'] == "yes":
1208+ color = tag['color']
1209+ except:
1210+ # PROBLEM: the tag doesn't have color
1211+ # Possibility, use a color from another tag
1212+ pass
1213+
1214+ self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), tag['location'][0], tag['location'][1], color))
1215+ else:
1216+ try:
1217+ if location['longitude'] and location['latitude']:
1218+ self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), location['latitude'], location['longitude']))
1219+ except:
1220+ self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), None, None))
1221+
1222+ champlain_view.add_layer(layer)
1223+
1224+ embed = cluttergtk.Embed()
1225+ embed.set_size_request(400, 300)
1226+
1227+ if not task_has_location:
1228+ # method that will change the marker's position
1229+ champlain_view.set_reactive(True)
1230+ champlain_view.connect("button-release-event", self.champlain_change_marker, champlain_view)
1231+
1232+ layer.show_all()
1233+
1234+ if task_has_location:
1235+ champlain_view.set_property("zoom-level", 9)
1236+ elif location:
1237+ champlain_view.set_property("zoom-level", 5)
1238+ else:
1239+ champlain_view.set_property("zoom-level", 1)
1240+
1241+ vbox_map.add(embed)
1242+
1243+ embed.realize()
1244+ stage = embed.get_stage()
1245+ champlain_view.set_size(400, 300)
1246+ stage.add(champlain_view)
1247+
1248+ # connect the toolbar buttons for zoom
1249+ btn_zoom_in.connect("clicked", self.zoom_in, champlain_view)
1250+ btn_zoom_out.connect("clicked", self.zoom_out, champlain_view)
1251+ dialog.connect("response", self.set_task_location_close)
1252+
1253+ #if there is no location set, we want to set it
1254+ if not task_has_location:
1255+ self.location_defined = False
1256+ if len(plugin_api.get_tags()) > 0:
1257+ liststore = gtk.ListStore(str)
1258+ self.cmb_existing_tag.set_model(liststore)
1259+ for tag in plugin_api.get_tags():
1260+ liststore.append([tag.get_attribute("name")])
1261+ self.cmb_existing_tag.set_text_column(0)
1262+ self.cmb_existing_tag.set_active(0)
1263+ else:
1264+ #remove radiobutton2 and the comboboxentry
1265+ tabela.remove(self.radiobutton1)
1266+ tabela.remove(self.radiobutton2)
1267+ tabela.remove(self.cmb_existing_tag)
1268+ label = gtk.Label()
1269+ label.set_text("Associate with new tag: ")
1270+ tabela.attach(label, 0, 1, 0, 1)
1271+ label.show()
1272+ else:
1273+ self.location_defined = True
1274+ vbox_opt.remove(tabela)
1275+ dialog.set_title("View the task's location")
1276+
1277+ dialog.show_all()
1278+
1279+ if task_has_location:
1280+ marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
1281+ champlain_view.center_on(marker_position[0], marker_position[1])
1282+ else:
1283+ try:
1284+ if location['longitude'] and location['latitude']:
1285+ champlain_view.center_on(location['latitude'], location['longitude'])
1286+ except:
1287+ pass
1288+
1289+ def set_task_location_close(self, dialog, response=None):
1290+ if response == gtk.RESPONSE_OK:
1291+ # ok
1292+ # tries to get the radiobuttons value, witch may not exist
1293+ if not self.location_defined:
1294+ if self.radiobutton1.get_active():
1295+ # radiobutton1
1296+ if self.txt_new_tag.get_text().strip() != "":
1297+ marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
1298+
1299+ # because users sometimes make mistakes, I'll check if the tag exists
1300+ tmp_tag = ""
1301+ for tag in self.plugin_api.get_tags():
1302+ t = "@" + self.txt_new_tag.get_text().replace("@", "")
1303+ if tag.get_attribute("name") == t:
1304+ tmp_tag = t
1305+ if tmp_tag:
1306+ self.plugin_api.add_tag_attribute(self.txt_new_tag.get_text().replace("@", ""),
1307+ "location",
1308+ marker_position)
1309+ else:
1310+ self.plugin_api.add_tag(self.txt_new_tag.get_text().replace("@", ""))
1311+ self.plugin_api.add_tag_attribute("@" + self.txt_new_tag.get_text().replace("@", ""),
1312+ "location",
1313+ marker_position)
1314+ dialog.destroy()
1315+ else:
1316+ self.errorDialog(dialog, "Error: No tag defined", "The tag has to be defined so that the location can be associated with it.")
1317+ else:
1318+ # radiobutton2
1319+ marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
1320+ index = self.cmb_existing_tag.get_active()
1321+ model = self.cmb_existing_tag.get_model()
1322+ self.plugin_api.add_tag_attribute(model[index][0], "location", marker_position)
1323+ dialog.destroy()
1324+ else:
1325+ # cancel
1326+ dialog.destroy()
1327+
1328+ def champlain_change_marker(self, widget, event, view):
1329+ if event.button != 1 or event.click_count > 1:
1330+ return False
1331+
1332+ (latitude, longitude) = view.get_coords_at(int(event.x), int(event.y))
1333+ self.marker_list[0].set_position(latitude, longitude)
1334+
1335+ #=== SET TASK LOCATION =========================================================
1336+
1337+ #=== TAG VIEW CONTEXT MENU =====================================================
1338+ def on_contextmenu_tag_location(self, widget, plugin_api):
1339+ location = self.geoclue.get_location_info()
1340+ self.plugin_api_context = plugin_api
1341+
1342+ wTree = gtk.glade.XML(self.glade_file, "TagLocation")
1343+ dialog = wTree.get_widget("TagLocation")
1344+ self.plugin_api_context.set_parent_window(dialog)
1345+
1346+ btn_zoom_in = wTree.get_widget("btn_zoom_in")
1347+ btn_zoom_out = wTree.get_widget("btn_zoom_out")
1348+ vbox_map = wTree.get_widget("vbox_map")
1349+
1350+ tag = self.plugin_api_context.get_tagpopup_tag()
1351+ dialog.set_title(tag.get_attribute("name") + "'s Location")
1352+
1353+ # get the tag's location
1354+ try:
1355+ tag_location = eval(tag.get_attribute("location"))
1356+ except:
1357+ tag_location = None
1358+
1359+ # get the tag's color
1360+ try:
1361+ tag_color = self.HTMLColorToRGB(tag.get_attribute("color"))
1362+ except:
1363+ tag_color = None
1364+
1365+ champlain_view = champlain.View()
1366+ champlain_view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
1367+
1368+ layer = MarkerLayer()
1369+
1370+ marker_tag = None
1371+ if tag_location:
1372+ marker_tag = layer.add_marker(tag.get_attribute("name"), tag_location[0], tag_location[1], tag_color)
1373+ else:
1374+ try:
1375+ if location['longitude'] and location['latitude']:
1376+ marker_tag = layer.add_marker(tag.get_attribute("name"), location['latitude'], location['longitude'], tag_color)
1377+ except:
1378+ marker_tag = layer.add_marker(tag.get_attribute("name"), None, None)
1379+
1380+ champlain_view.add_layer(layer)
1381+
1382+ embed = cluttergtk.Embed()
1383+ embed.set_size_request(400, 300)
1384+
1385+ champlain_view.set_reactive(True)
1386+ champlain_view.connect("button-release-event", self.champlain__tag_change_marker, champlain_view, marker_tag)
1387+
1388+ layer.show_all()
1389+
1390+ if tag_location:
1391+ champlain_view.set_property("zoom-level", 9)
1392+ elif location:
1393+ champlain_view.set_property("zoom-level", 5)
1394+ else:
1395+ champlain_view.set_property("zoom-level", 1)
1396+
1397+ vbox_map.add(embed)
1398+
1399+ embed.realize()
1400+ stage = embed.get_stage()
1401+ champlain_view.set_size(400, 300)
1402+ stage.add(champlain_view)
1403+
1404+ # connect the toolbar buttons for zoom
1405+ btn_zoom_in.connect("clicked", self.zoom_in, champlain_view)
1406+ btn_zoom_out.connect("clicked", self.zoom_out, champlain_view)
1407+ dialog.connect("response", self.tag_location_close, tag, marker_tag)
1408+
1409+ dialog.show_all()
1410+
1411+ if tag_location:
1412+ marker_position = (marker_tag.get_property('latitude'), marker_tag.get_property('longitude'))
1413+ champlain_view.center_on(marker_position[0], marker_position[1])
1414+ else:
1415+ try:
1416+ if location['longitude'] and location['latitude']:
1417+ champlain_view.center_on(location['latitude'], location['longitude'])
1418+ except:
1419+ pass
1420+
1421+ def champlain__tag_change_marker(self, widget, event, view, marker):
1422+ if event.button != 1 or event.click_count > 1:
1423+ return False
1424+
1425+ (latitude, longitude) = view.get_coords_at(int(event.x), int(event.y))
1426+ marker.set_position(latitude, longitude)
1427+
1428+ def tag_location_close(self, dialog, response=None, tag=None, marker=None):
1429+ if response == gtk.RESPONSE_OK:
1430+ tag_location = str((marker.get_property('latitude'), marker.get_property('longitude')))
1431+ tag.set_attribute("location", tag_location)
1432+ dialog.destroy()
1433+ else:
1434+ dialog.destroy()
1435+
1436+ #=== TAG VIEW CONTEXT MENU =====================================================
1437+
1438+ def zoom_in(self, widget, view):
1439+ view.zoom_in()
1440+
1441+ def zoom_out(self, widget, view):
1442+ view.zoom_out()
1443+
1444+ # http://code.activestate.com/recipes/266466/
1445+ # original by Paul Winkler
1446+ def HTMLColorToRGB(self, colorstring):
1447+ """ convert #RRGGBB to a clutter color var """
1448+ colorstring = colorstring.strip()
1449+ if colorstring[0] == '#': colorstring = colorstring[1:]
1450+ if len(colorstring) != 6:
1451+ raise ValueError, "input #%s is not in #RRGGBB format" % colorstring
1452+ r, g, b = colorstring[:2], colorstring[2:4], colorstring[4:]
1453+ r, g, b = [int(n, 16) for n in (r, g, b)]
1454+ return clutter.Color(r, g, b)
1455+
1456+ # error dialog
1457+ def errorDialog(self, parent, header, msg):
1458+ """
1459+ Show an error message.
1460+ """
1461+
1462+ dialog = gtk.MessageDialog(parent,
1463+ flags=gtk.DIALOG_MODAL,
1464+ type=gtk.MESSAGE_ERROR,
1465+ buttons=gtk.BUTTONS_CLOSE)
1466+ dialog.set_title("")
1467+ dialog.set_markup("<big><b>%s</b></big>\n\n%s" % (header, msg))
1468+ dialog.realize()
1469+ dialog.run()
1470+ dialog.destroy()
1471\ No newline at end of file
1472
1473=== added file 'GTG/plugins/geolocalized-tasks/geolocalized.glade'
1474--- GTG/plugins/geolocalized-tasks/geolocalized.glade 1970-01-01 00:00:00 +0000
1475+++ GTG/plugins/geolocalized-tasks/geolocalized.glade 2009-07-29 15:30:45 +0000
1476@@ -0,0 +1,790 @@
1477+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
1478+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
1479+
1480+<glade-interface>
1481+
1482+<widget class="GtkDialog" id="SetTaskLocation">
1483+ <property name="visible">True</property>
1484+ <property name="title" translatable="yes">Set the task's location</property>
1485+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
1486+ <property name="window_position">GTK_WIN_POS_NONE</property>
1487+ <property name="modal">False</property>
1488+ <property name="resizable">True</property>
1489+ <property name="destroy_with_parent">False</property>
1490+ <property name="decorated">True</property>
1491+ <property name="skip_taskbar_hint">False</property>
1492+ <property name="skip_pager_hint">False</property>
1493+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
1494+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
1495+ <property name="focus_on_map">True</property>
1496+ <property name="urgency_hint">False</property>
1497+ <property name="has_separator">True</property>
1498+
1499+ <child internal-child="vbox">
1500+ <widget class="GtkVBox" id="dialog-vbox2">
1501+ <property name="visible">True</property>
1502+ <property name="homogeneous">False</property>
1503+ <property name="spacing">0</property>
1504+
1505+ <child internal-child="action_area">
1506+ <widget class="GtkHButtonBox" id="dialog-action_area2">
1507+ <property name="visible">True</property>
1508+ <property name="layout_style">GTK_BUTTONBOX_END</property>
1509+
1510+ <child>
1511+ <widget class="GtkButton" id="cancelbutton2">
1512+ <property name="visible">True</property>
1513+ <property name="can_default">True</property>
1514+ <property name="can_focus">True</property>
1515+ <property name="label">gtk-cancel</property>
1516+ <property name="use_stock">True</property>
1517+ <property name="relief">GTK_RELIEF_NORMAL</property>
1518+ <property name="focus_on_click">True</property>
1519+ <property name="response_id">-6</property>
1520+ </widget>
1521+ </child>
1522+
1523+ <child>
1524+ <widget class="GtkButton" id="okbutton2">
1525+ <property name="visible">True</property>
1526+ <property name="can_default">True</property>
1527+ <property name="can_focus">True</property>
1528+ <property name="label">gtk-ok</property>
1529+ <property name="use_stock">True</property>
1530+ <property name="relief">GTK_RELIEF_NORMAL</property>
1531+ <property name="focus_on_click">True</property>
1532+ <property name="response_id">-5</property>
1533+ </widget>
1534+ </child>
1535+ </widget>
1536+ <packing>
1537+ <property name="padding">0</property>
1538+ <property name="expand">False</property>
1539+ <property name="fill">True</property>
1540+ <property name="pack_type">GTK_PACK_END</property>
1541+ </packing>
1542+ </child>
1543+
1544+ <child>
1545+ <widget class="GtkVBox" id="vbox_map">
1546+ <property name="width_request">400</property>
1547+ <property name="visible">True</property>
1548+ <property name="homogeneous">False</property>
1549+ <property name="spacing">0</property>
1550+
1551+ <child>
1552+ <widget class="GtkToolbar" id="toolbar2">
1553+ <property name="visible">True</property>
1554+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
1555+ <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
1556+ <property name="tooltips">True</property>
1557+ <property name="show_arrow">True</property>
1558+
1559+ <child>
1560+ <widget class="GtkToolButton" id="btn_zoom_in">
1561+ <property name="visible">True</property>
1562+ <property name="stock_id">gtk-zoom-in</property>
1563+ <property name="visible_horizontal">True</property>
1564+ <property name="visible_vertical">True</property>
1565+ <property name="is_important">False</property>
1566+ </widget>
1567+ <packing>
1568+ <property name="expand">False</property>
1569+ <property name="homogeneous">True</property>
1570+ </packing>
1571+ </child>
1572+
1573+ <child>
1574+ <widget class="GtkToolButton" id="btn_zoom_out">
1575+ <property name="visible">True</property>
1576+ <property name="stock_id">gtk-zoom-out</property>
1577+ <property name="visible_horizontal">True</property>
1578+ <property name="visible_vertical">True</property>
1579+ <property name="is_important">False</property>
1580+ </widget>
1581+ <packing>
1582+ <property name="expand">False</property>
1583+ <property name="homogeneous">True</property>
1584+ </packing>
1585+ </child>
1586+ </widget>
1587+ <packing>
1588+ <property name="padding">0</property>
1589+ <property name="expand">False</property>
1590+ <property name="fill">False</property>
1591+ </packing>
1592+ </child>
1593+
1594+ <child>
1595+ <widget class="GtkVBox" id="vbox_map">
1596+ <property name="visible">True</property>
1597+ <property name="homogeneous">False</property>
1598+ <property name="spacing">0</property>
1599+
1600+ <child>
1601+ <placeholder/>
1602+ </child>
1603+ </widget>
1604+ <packing>
1605+ <property name="padding">0</property>
1606+ <property name="expand">True</property>
1607+ <property name="fill">True</property>
1608+ </packing>
1609+ </child>
1610+
1611+ <child>
1612+ <widget class="GtkVBox" id="vbox_opt">
1613+ <property name="visible">True</property>
1614+ <property name="homogeneous">False</property>
1615+ <property name="spacing">0</property>
1616+
1617+ <child>
1618+ <widget class="GtkTable" id="tabela_set_task">
1619+ <property name="visible">True</property>
1620+ <property name="n_rows">2</property>
1621+ <property name="n_columns">2</property>
1622+ <property name="homogeneous">False</property>
1623+ <property name="row_spacing">0</property>
1624+ <property name="column_spacing">0</property>
1625+
1626+ <child>
1627+ <widget class="GtkRadioButton" id="radiobutton1">
1628+ <property name="width_request">198</property>
1629+ <property name="visible">True</property>
1630+ <property name="can_focus">True</property>
1631+ <property name="label" translatable="yes">Associate with new tag</property>
1632+ <property name="use_underline">True</property>
1633+ <property name="relief">GTK_RELIEF_NORMAL</property>
1634+ <property name="focus_on_click">True</property>
1635+ <property name="active">False</property>
1636+ <property name="inconsistent">False</property>
1637+ <property name="draw_indicator">True</property>
1638+ </widget>
1639+ <packing>
1640+ <property name="left_attach">0</property>
1641+ <property name="right_attach">1</property>
1642+ <property name="top_attach">0</property>
1643+ <property name="bottom_attach">1</property>
1644+ <property name="x_options">fill</property>
1645+ <property name="y_options"></property>
1646+ </packing>
1647+ </child>
1648+
1649+ <child>
1650+ <widget class="GtkRadioButton" id="radiobutton2">
1651+ <property name="visible">True</property>
1652+ <property name="can_focus">True</property>
1653+ <property name="label" translatable="yes">Associate with existing tag</property>
1654+ <property name="use_underline">True</property>
1655+ <property name="relief">GTK_RELIEF_NORMAL</property>
1656+ <property name="focus_on_click">True</property>
1657+ <property name="active">False</property>
1658+ <property name="inconsistent">False</property>
1659+ <property name="draw_indicator">True</property>
1660+ <property name="group">radiobutton1</property>
1661+ </widget>
1662+ <packing>
1663+ <property name="left_attach">0</property>
1664+ <property name="right_attach">1</property>
1665+ <property name="top_attach">1</property>
1666+ <property name="bottom_attach">2</property>
1667+ <property name="x_options">fill</property>
1668+ <property name="y_options"></property>
1669+ </packing>
1670+ </child>
1671+
1672+ <child>
1673+ <widget class="GtkEntry" id="txt_new_tag">
1674+ <property name="visible">True</property>
1675+ <property name="can_focus">True</property>
1676+ <property name="editable">True</property>
1677+ <property name="visibility">True</property>
1678+ <property name="max_length">0</property>
1679+ <property name="text" translatable="yes"></property>
1680+ <property name="has_frame">True</property>
1681+ <property name="invisible_char">â—Ź</property>
1682+ <property name="activates_default">False</property>
1683+ </widget>
1684+ <packing>
1685+ <property name="left_attach">1</property>
1686+ <property name="right_attach">2</property>
1687+ <property name="top_attach">0</property>
1688+ <property name="bottom_attach">1</property>
1689+ <property name="y_options"></property>
1690+ </packing>
1691+ </child>
1692+
1693+ <child>
1694+ <widget class="GtkComboBoxEntry" id="cmb_existing_tag">
1695+ <property name="visible">True</property>
1696+ <property name="add_tearoffs">False</property>
1697+ <property name="has_frame">True</property>
1698+ <property name="focus_on_click">True</property>
1699+ </widget>
1700+ <packing>
1701+ <property name="left_attach">1</property>
1702+ <property name="right_attach">2</property>
1703+ <property name="top_attach">1</property>
1704+ <property name="bottom_attach">2</property>
1705+ <property name="x_options">fill</property>
1706+ <property name="y_options"></property>
1707+ </packing>
1708+ </child>
1709+ </widget>
1710+ <packing>
1711+ <property name="padding">0</property>
1712+ <property name="expand">True</property>
1713+ <property name="fill">True</property>
1714+ </packing>
1715+ </child>
1716+ </widget>
1717+ <packing>
1718+ <property name="padding">2</property>
1719+ <property name="expand">False</property>
1720+ <property name="fill">False</property>
1721+ </packing>
1722+ </child>
1723+ </widget>
1724+ <packing>
1725+ <property name="padding">0</property>
1726+ <property name="expand">False</property>
1727+ <property name="fill">False</property>
1728+ </packing>
1729+ </child>
1730+ </widget>
1731+ </child>
1732+</widget>
1733+
1734+<widget class="GtkDialog" id="TagLocation">
1735+ <property name="visible">True</property>
1736+ <property name="title" translatable="yes"></property>
1737+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
1738+ <property name="window_position">GTK_WIN_POS_NONE</property>
1739+ <property name="modal">False</property>
1740+ <property name="resizable">True</property>
1741+ <property name="destroy_with_parent">False</property>
1742+ <property name="decorated">True</property>
1743+ <property name="skip_taskbar_hint">False</property>
1744+ <property name="skip_pager_hint">False</property>
1745+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
1746+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
1747+ <property name="focus_on_map">True</property>
1748+ <property name="urgency_hint">False</property>
1749+ <property name="has_separator">True</property>
1750+
1751+ <child internal-child="vbox">
1752+ <widget class="GtkVBox" id="dialog-vbox3">
1753+ <property name="visible">True</property>
1754+ <property name="homogeneous">False</property>
1755+ <property name="spacing">0</property>
1756+
1757+ <child internal-child="action_area">
1758+ <widget class="GtkHButtonBox" id="dialog-action_area3">
1759+ <property name="visible">True</property>
1760+ <property name="layout_style">GTK_BUTTONBOX_END</property>
1761+
1762+ <child>
1763+ <widget class="GtkButton" id="cancelbutton3">
1764+ <property name="visible">True</property>
1765+ <property name="can_default">True</property>
1766+ <property name="can_focus">True</property>
1767+ <property name="label">gtk-cancel</property>
1768+ <property name="use_stock">True</property>
1769+ <property name="relief">GTK_RELIEF_NORMAL</property>
1770+ <property name="focus_on_click">True</property>
1771+ <property name="response_id">-6</property>
1772+ </widget>
1773+ </child>
1774+
1775+ <child>
1776+ <widget class="GtkButton" id="okbutton3">
1777+ <property name="visible">True</property>
1778+ <property name="can_default">True</property>
1779+ <property name="can_focus">True</property>
1780+ <property name="label">gtk-ok</property>
1781+ <property name="use_stock">True</property>
1782+ <property name="relief">GTK_RELIEF_NORMAL</property>
1783+ <property name="focus_on_click">True</property>
1784+ <property name="response_id">-5</property>
1785+ </widget>
1786+ </child>
1787+ </widget>
1788+ <packing>
1789+ <property name="padding">0</property>
1790+ <property name="expand">False</property>
1791+ <property name="fill">True</property>
1792+ <property name="pack_type">GTK_PACK_END</property>
1793+ </packing>
1794+ </child>
1795+
1796+ <child>
1797+ <widget class="GtkVBox" id="vbox3">
1798+ <property name="visible">True</property>
1799+ <property name="homogeneous">False</property>
1800+ <property name="spacing">0</property>
1801+
1802+ <child>
1803+ <widget class="GtkToolbar" id="toolbar3">
1804+ <property name="visible">True</property>
1805+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
1806+ <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
1807+ <property name="tooltips">True</property>
1808+ <property name="show_arrow">True</property>
1809+
1810+ <child>
1811+ <widget class="GtkToolButton" id="btn_zoom_in">
1812+ <property name="visible">True</property>
1813+ <property name="stock_id">gtk-zoom-in</property>
1814+ <property name="visible_horizontal">True</property>
1815+ <property name="visible_vertical">True</property>
1816+ <property name="is_important">False</property>
1817+ </widget>
1818+ <packing>
1819+ <property name="expand">False</property>
1820+ <property name="homogeneous">True</property>
1821+ </packing>
1822+ </child>
1823+
1824+ <child>
1825+ <widget class="GtkToolButton" id="btn_zoom_out">
1826+ <property name="visible">True</property>
1827+ <property name="stock_id">gtk-zoom-out</property>
1828+ <property name="visible_horizontal">True</property>
1829+ <property name="visible_vertical">True</property>
1830+ <property name="is_important">False</property>
1831+ </widget>
1832+ <packing>
1833+ <property name="expand">False</property>
1834+ <property name="homogeneous">True</property>
1835+ </packing>
1836+ </child>
1837+ </widget>
1838+ <packing>
1839+ <property name="padding">0</property>
1840+ <property name="expand">False</property>
1841+ <property name="fill">False</property>
1842+ </packing>
1843+ </child>
1844+
1845+ <child>
1846+ <widget class="GtkVBox" id="vbox_map">
1847+ <property name="width_request">400</property>
1848+ <property name="visible">True</property>
1849+ <property name="homogeneous">False</property>
1850+ <property name="spacing">0</property>
1851+
1852+ <child>
1853+ <placeholder/>
1854+ </child>
1855+ </widget>
1856+ <packing>
1857+ <property name="padding">0</property>
1858+ <property name="expand">True</property>
1859+ <property name="fill">True</property>
1860+ </packing>
1861+ </child>
1862+ </widget>
1863+ <packing>
1864+ <property name="padding">0</property>
1865+ <property name="expand">False</property>
1866+ <property name="fill">False</property>
1867+ </packing>
1868+ </child>
1869+ </widget>
1870+ </child>
1871+</widget>
1872+
1873+<widget class="GtkDialog" id="Preferences">
1874+ <property name="width_request">350</property>
1875+ <property name="visible">True</property>
1876+ <property name="title" translatable="yes">Geolocalized-tasks Preferences</property>
1877+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
1878+ <property name="window_position">GTK_WIN_POS_NONE</property>
1879+ <property name="modal">False</property>
1880+ <property name="resizable">True</property>
1881+ <property name="destroy_with_parent">False</property>
1882+ <property name="decorated">True</property>
1883+ <property name="skip_taskbar_hint">False</property>
1884+ <property name="skip_pager_hint">False</property>
1885+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
1886+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
1887+ <property name="focus_on_map">True</property>
1888+ <property name="urgency_hint">False</property>
1889+ <property name="has_separator">True</property>
1890+
1891+ <child internal-child="vbox">
1892+ <widget class="GtkVBox" id="dialog-vbox4">
1893+ <property name="visible">True</property>
1894+ <property name="homogeneous">False</property>
1895+ <property name="spacing">0</property>
1896+
1897+ <child internal-child="action_area">
1898+ <widget class="GtkHButtonBox" id="dialog-action_area4">
1899+ <property name="visible">True</property>
1900+ <property name="layout_style">GTK_BUTTONBOX_END</property>
1901+
1902+ <child>
1903+ <widget class="GtkButton" id="cancelbutton4">
1904+ <property name="visible">True</property>
1905+ <property name="can_default">True</property>
1906+ <property name="can_focus">True</property>
1907+ <property name="label">gtk-cancel</property>
1908+ <property name="use_stock">True</property>
1909+ <property name="relief">GTK_RELIEF_NORMAL</property>
1910+ <property name="focus_on_click">True</property>
1911+ <property name="response_id">-6</property>
1912+ </widget>
1913+ </child>
1914+
1915+ <child>
1916+ <widget class="GtkButton" id="okbutton4">
1917+ <property name="visible">True</property>
1918+ <property name="can_default">True</property>
1919+ <property name="can_focus">True</property>
1920+ <property name="label">gtk-ok</property>
1921+ <property name="use_stock">True</property>
1922+ <property name="relief">GTK_RELIEF_NORMAL</property>
1923+ <property name="focus_on_click">True</property>
1924+ <property name="response_id">-5</property>
1925+ </widget>
1926+ </child>
1927+ </widget>
1928+ <packing>
1929+ <property name="padding">0</property>
1930+ <property name="expand">False</property>
1931+ <property name="fill">True</property>
1932+ <property name="pack_type">GTK_PACK_END</property>
1933+ </packing>
1934+ </child>
1935+
1936+ <child>
1937+ <widget class="GtkVBox" id="vbox4">
1938+ <property name="visible">True</property>
1939+ <property name="homogeneous">False</property>
1940+ <property name="spacing">0</property>
1941+
1942+ <child>
1943+ <widget class="GtkFrame" id="frame3">
1944+ <property name="border_width">3</property>
1945+ <property name="visible">True</property>
1946+ <property name="label_xalign">0</property>
1947+ <property name="label_yalign">0.5</property>
1948+ <property name="shadow_type">GTK_SHADOW_NONE</property>
1949+
1950+ <child>
1951+ <widget class="GtkAlignment" id="alignment3">
1952+ <property name="visible">True</property>
1953+ <property name="xalign">0.5</property>
1954+ <property name="yalign">0.5</property>
1955+ <property name="xscale">1</property>
1956+ <property name="yscale">1</property>
1957+ <property name="top_padding">0</property>
1958+ <property name="bottom_padding">0</property>
1959+ <property name="left_padding">12</property>
1960+ <property name="right_padding">0</property>
1961+
1962+ <child>
1963+ <widget class="GtkHBox" id="hbox4">
1964+ <property name="visible">True</property>
1965+ <property name="homogeneous">False</property>
1966+ <property name="spacing">0</property>
1967+
1968+ <child>
1969+ <widget class="GtkComboBoxEntry" id="cmb_accuracy">
1970+ <property name="visible">True</property>
1971+ <property name="items" translatable="yes">Country
1972+Region
1973+Locality
1974+Postalcode
1975+Street
1976+Detailed</property>
1977+ <property name="add_tearoffs">False</property>
1978+ <property name="has_frame">True</property>
1979+ <property name="focus_on_click">True</property>
1980+ </widget>
1981+ <packing>
1982+ <property name="padding">0</property>
1983+ <property name="expand">False</property>
1984+ <property name="fill">False</property>
1985+ </packing>
1986+ </child>
1987+ </widget>
1988+ </child>
1989+ </widget>
1990+ </child>
1991+
1992+ <child>
1993+ <widget class="GtkLabel" id="label5">
1994+ <property name="visible">True</property>
1995+ <property name="label" translatable="yes">&lt;b&gt;Accuracy&lt;/b&gt;</property>
1996+ <property name="use_underline">False</property>
1997+ <property name="use_markup">True</property>
1998+ <property name="justify">GTK_JUSTIFY_LEFT</property>
1999+ <property name="wrap">False</property>
2000+ <property name="selectable">False</property>
2001+ <property name="xalign">0.5</property>
2002+ <property name="yalign">0.5</property>
2003+ <property name="xpad">0</property>
2004+ <property name="ypad">0</property>
2005+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2006+ <property name="width_chars">-1</property>
2007+ <property name="single_line_mode">False</property>
2008+ <property name="angle">0</property>
2009+ </widget>
2010+ <packing>
2011+ <property name="type">label_item</property>
2012+ </packing>
2013+ </child>
2014+ </widget>
2015+ <packing>
2016+ <property name="padding">0</property>
2017+ <property name="expand">False</property>
2018+ <property name="fill">False</property>
2019+ </packing>
2020+ </child>
2021+
2022+ <child>
2023+ <widget class="GtkFrame" id="frame4">
2024+ <property name="border_width">3</property>
2025+ <property name="visible">True</property>
2026+ <property name="label_xalign">0</property>
2027+ <property name="label_yalign">0.5</property>
2028+ <property name="shadow_type">GTK_SHADOW_NONE</property>
2029+
2030+ <child>
2031+ <widget class="GtkAlignment" id="alignment4">
2032+ <property name="visible">True</property>
2033+ <property name="xalign">0.5</property>
2034+ <property name="yalign">0.5</property>
2035+ <property name="xscale">1</property>
2036+ <property name="yscale">1</property>
2037+ <property name="top_padding">0</property>
2038+ <property name="bottom_padding">0</property>
2039+ <property name="left_padding">12</property>
2040+ <property name="right_padding">0</property>
2041+
2042+ <child>
2043+ <widget class="GtkHBox" id="hbox5">
2044+ <property name="visible">True</property>
2045+ <property name="homogeneous">False</property>
2046+ <property name="spacing">0</property>
2047+
2048+ <child>
2049+ <widget class="GtkVBox" id="vbox5">
2050+ <property name="visible">True</property>
2051+ <property name="homogeneous">False</property>
2052+ <property name="spacing">0</property>
2053+
2054+ <child>
2055+ <widget class="GtkCheckButton" id="check_network">
2056+ <property name="visible">True</property>
2057+ <property name="can_focus">True</property>
2058+ <property name="label" translatable="yes">Use network</property>
2059+ <property name="use_underline">True</property>
2060+ <property name="relief">GTK_RELIEF_NORMAL</property>
2061+ <property name="focus_on_click">True</property>
2062+ <property name="active">False</property>
2063+ <property name="inconsistent">False</property>
2064+ <property name="draw_indicator">True</property>
2065+ </widget>
2066+ <packing>
2067+ <property name="padding">0</property>
2068+ <property name="expand">False</property>
2069+ <property name="fill">False</property>
2070+ </packing>
2071+ </child>
2072+
2073+ <child>
2074+ <widget class="GtkCheckButton" id="check_cellphone">
2075+ <property name="visible">True</property>
2076+ <property name="can_focus">True</property>
2077+ <property name="label" translatable="yes">Use cellphone (if available)</property>
2078+ <property name="use_underline">True</property>
2079+ <property name="relief">GTK_RELIEF_NORMAL</property>
2080+ <property name="focus_on_click">True</property>
2081+ <property name="active">False</property>
2082+ <property name="inconsistent">False</property>
2083+ <property name="draw_indicator">True</property>
2084+ </widget>
2085+ <packing>
2086+ <property name="padding">0</property>
2087+ <property name="expand">False</property>
2088+ <property name="fill">False</property>
2089+ </packing>
2090+ </child>
2091+
2092+ <child>
2093+ <widget class="GtkCheckButton" id="check_gps">
2094+ <property name="visible">True</property>
2095+ <property name="can_focus">True</property>
2096+ <property name="label" translatable="yes">Use gps (if available)</property>
2097+ <property name="use_underline">True</property>
2098+ <property name="relief">GTK_RELIEF_NORMAL</property>
2099+ <property name="focus_on_click">True</property>
2100+ <property name="active">False</property>
2101+ <property name="inconsistent">False</property>
2102+ <property name="draw_indicator">True</property>
2103+ </widget>
2104+ <packing>
2105+ <property name="padding">0</property>
2106+ <property name="expand">False</property>
2107+ <property name="fill">False</property>
2108+ </packing>
2109+ </child>
2110+ </widget>
2111+ <packing>
2112+ <property name="padding">0</property>
2113+ <property name="expand">True</property>
2114+ <property name="fill">True</property>
2115+ </packing>
2116+ </child>
2117+ </widget>
2118+ </child>
2119+ </widget>
2120+ </child>
2121+
2122+ <child>
2123+ <widget class="GtkLabel" id="label6">
2124+ <property name="visible">True</property>
2125+ <property name="label" translatable="yes">&lt;b&gt;Location Determination Method&lt;/b&gt;</property>
2126+ <property name="use_underline">False</property>
2127+ <property name="use_markup">True</property>
2128+ <property name="justify">GTK_JUSTIFY_LEFT</property>
2129+ <property name="wrap">False</property>
2130+ <property name="selectable">False</property>
2131+ <property name="xalign">0.5</property>
2132+ <property name="yalign">0.5</property>
2133+ <property name="xpad">0</property>
2134+ <property name="ypad">0</property>
2135+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2136+ <property name="width_chars">-1</property>
2137+ <property name="single_line_mode">False</property>
2138+ <property name="angle">0</property>
2139+ </widget>
2140+ <packing>
2141+ <property name="type">label_item</property>
2142+ </packing>
2143+ </child>
2144+ </widget>
2145+ <packing>
2146+ <property name="padding">0</property>
2147+ <property name="expand">True</property>
2148+ <property name="fill">True</property>
2149+ </packing>
2150+ </child>
2151+
2152+ <child>
2153+ <widget class="GtkFrame" id="frame5">
2154+ <property name="border_width">3</property>
2155+ <property name="visible">True</property>
2156+ <property name="label_xalign">0</property>
2157+ <property name="label_yalign">0.5</property>
2158+ <property name="shadow_type">GTK_SHADOW_NONE</property>
2159+
2160+ <child>
2161+ <widget class="GtkAlignment" id="alignment5">
2162+ <property name="visible">True</property>
2163+ <property name="xalign">0.5</property>
2164+ <property name="yalign">0.5</property>
2165+ <property name="xscale">1</property>
2166+ <property name="yscale">1</property>
2167+ <property name="top_padding">0</property>
2168+ <property name="bottom_padding">0</property>
2169+ <property name="left_padding">12</property>
2170+ <property name="right_padding">0</property>
2171+
2172+ <child>
2173+ <widget class="GtkHBox" id="hbox3">
2174+ <property name="visible">True</property>
2175+ <property name="homogeneous">False</property>
2176+ <property name="spacing">0</property>
2177+
2178+ <child>
2179+ <widget class="GtkSpinButton" id="spin_proximityfactor">
2180+ <property name="visible">True</property>
2181+ <property name="can_focus">True</property>
2182+ <property name="climb_rate">1</property>
2183+ <property name="digits">1</property>
2184+ <property name="numeric">False</property>
2185+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
2186+ <property name="snap_to_ticks">False</property>
2187+ <property name="wrap">False</property>
2188+ <property name="adjustment">5 1 100 0.10000000149 10 10</property>
2189+ </widget>
2190+ <packing>
2191+ <property name="padding">0</property>
2192+ <property name="expand">False</property>
2193+ <property name="fill">False</property>
2194+ </packing>
2195+ </child>
2196+
2197+ <child>
2198+ <widget class="GtkLabel" id="label8">
2199+ <property name="visible">True</property>
2200+ <property name="label" translatable="yes">km</property>
2201+ <property name="use_underline">False</property>
2202+ <property name="use_markup">False</property>
2203+ <property name="justify">GTK_JUSTIFY_LEFT</property>
2204+ <property name="wrap">False</property>
2205+ <property name="selectable">False</property>
2206+ <property name="xalign">0.5</property>
2207+ <property name="yalign">0.5</property>
2208+ <property name="xpad">4</property>
2209+ <property name="ypad">0</property>
2210+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2211+ <property name="width_chars">-1</property>
2212+ <property name="single_line_mode">False</property>
2213+ <property name="angle">0</property>
2214+ </widget>
2215+ <packing>
2216+ <property name="padding">0</property>
2217+ <property name="expand">False</property>
2218+ <property name="fill">False</property>
2219+ </packing>
2220+ </child>
2221+ </widget>
2222+ </child>
2223+ </widget>
2224+ </child>
2225+
2226+ <child>
2227+ <widget class="GtkLabel" id="label7">
2228+ <property name="visible">True</property>
2229+ <property name="label" translatable="yes">&lt;b&gt;Proximity Factor&lt;/b&gt;</property>
2230+ <property name="use_underline">False</property>
2231+ <property name="use_markup">True</property>
2232+ <property name="justify">GTK_JUSTIFY_LEFT</property>
2233+ <property name="wrap">False</property>
2234+ <property name="selectable">False</property>
2235+ <property name="xalign">0.5</property>
2236+ <property name="yalign">0.5</property>
2237+ <property name="xpad">0</property>
2238+ <property name="ypad">0</property>
2239+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2240+ <property name="width_chars">-1</property>
2241+ <property name="single_line_mode">False</property>
2242+ <property name="angle">0</property>
2243+ </widget>
2244+ <packing>
2245+ <property name="type">label_item</property>
2246+ </packing>
2247+ </child>
2248+ </widget>
2249+ <packing>
2250+ <property name="padding">0</property>
2251+ <property name="expand">True</property>
2252+ <property name="fill">True</property>
2253+ </packing>
2254+ </child>
2255+ </widget>
2256+ <packing>
2257+ <property name="padding">0</property>
2258+ <property name="expand">True</property>
2259+ <property name="fill">True</property>
2260+ </packing>
2261+ </child>
2262+ </widget>
2263+ </child>
2264+</widget>
2265+
2266+</glade-interface>
2267
2268=== added directory 'GTG/plugins/geolocalized-tasks/icons'
2269=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor'
2270=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/16x16'
2271=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/16x16/assign-location.png'
2272Binary files GTG/plugins/geolocalized-tasks/icons/hicolor/16x16/assign-location.png 1970-01-01 00:00:00 +0000 and GTG/plugins/geolocalized-tasks/icons/hicolor/16x16/assign-location.png 2009-07-27 14:37:04 +0000 differ
2273=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/24x24'
2274=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/24x24/geolocalization.png'
2275Binary files GTG/plugins/geolocalized-tasks/icons/hicolor/24x24/geolocalization.png 1970-01-01 00:00:00 +0000 and GTG/plugins/geolocalized-tasks/icons/hicolor/24x24/geolocalization.png 2009-07-27 14:37:04 +0000 differ
2276=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg'
2277=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg'
2278--- GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg 1970-01-01 00:00:00 +0000
2279+++ GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg 2009-07-27 14:37:04 +0000
2280@@ -0,0 +1,57 @@
2281+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2282+<!-- Created with Inkscape (http://www.inkscape.org/) -->
2283+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="16" height="16" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="assign-location.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0" inkscape:export-filename="/home/kj/Dropbox/Public/assign-location.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
2284+ <defs id="defs4">
2285+ <linearGradient inkscape:collect="always" id="linearGradient7943">
2286+ <stop style="stop-color: rgb(249, 166, 166); stop-opacity: 1;" offset="0" id="stop7945"/>
2287+ <stop style="stop-color: rgb(243, 156, 156); stop-opacity: 1;" offset="1" id="stop7947"/>
2288+ </linearGradient>
2289+ <linearGradient inkscape:collect="always" id="linearGradient7935">
2290+ <stop style="stop-color: rgb(132, 0, 0); stop-opacity: 1;" offset="0" id="stop7937"/>
2291+ <stop style="stop-color: rgb(203, 0, 0); stop-opacity: 1;" offset="1" id="stop7939"/>
2292+ </linearGradient>
2293+ <linearGradient inkscape:collect="always" id="linearGradient7874">
2294+ <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 0.941785;" offset="0" id="stop7876"/>
2295+ <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7878"/>
2296+ </linearGradient>
2297+ <linearGradient inkscape:collect="always" id="linearGradient7741">
2298+ <stop style="stop-color: rgb(254, 244, 164); stop-opacity: 1;" offset="0" id="stop7743"/>
2299+ <stop style="stop-color: rgb(255, 252, 225); stop-opacity: 1;" offset="1" id="stop7745"/>
2300+ </linearGradient>
2301+ <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective10"/>
2302+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7741" id="linearGradient8081" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.07143, 0, 0, 1.06757, -13.9643, -7.45285)" x1="15.727029" y1="6.9999995" x2="23.542524" y2="14.983313"/>
2303+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient8083" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.07143, 0, 0, 1.06757, -46.1072, -7.45285)" x1="44.812893" y1="7.2946024" x2="52.456104" y2="21.549175"/>
2304+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient8085" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.07143, 0, 0, 1.06757, -46.1072, -7.45285)" x1="47.146225" y1="11.041414" x2="52.339439" y2="21.968351"/>
2305+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7935" id="linearGradient8117" gradientUnits="userSpaceOnUse" x1="57.438805" y1="14.430664" x2="54.385418" y2="9.703125"/>
2306+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7943" id="linearGradient8119" gradientUnits="userSpaceOnUse" x1="55.795582" y1="10.903276" x2="55.84375" y2="14.84375"/>
2307+ </defs>
2308+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="15.281524" inkscape:cy="5.7182209" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:snap-bbox="true" inkscape:snap-nodes="false" inkscape:window-width="1440" inkscape:window-height="794" inkscape:window-x="0" inkscape:window-y="25" showborder="false">
2309+ <inkscape:grid type="xygrid" id="grid8091" visible="true" enabled="true"/>
2310+ </sodipodi:namedview>
2311+ <metadata id="metadata7">
2312+ <rdf:RDF>
2313+ <cc:Work rdf:about="">
2314+ <dc:format>image/svg+xml</dc:format>
2315+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
2316+ </cc:Work>
2317+ </rdf:RDF>
2318+ </metadata>
2319+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
2320+ <rect style="overflow: visible; marker: none; fill: url(#linearGradient8081) rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient8083) rgb(0, 0, 0); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7868" width="14.999999" height="14.946039" x="0.50000006" y="0.55396086" rx="1.9905777" ry="1.9905777"/>
2321+ <rect transform="matrix(0, 1, -1, 0, 0, 0)" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7905" width="14.946039" height="2" x="0.55396086" y="-12.5" rx="0" ry="0"/>
2322+ <rect ry="0" rx="0" y="2.5539608" x="0.50000006" height="2.9460392" width="15" id="rect7907" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2323+ <rect ry="0" rx="0" y="-5.5" x="0.55396086" height="2" width="14.946039" id="rect7909" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" transform="matrix(0, 1, -1, 0, 0, 0)"/>
2324+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7911" width="15" height="2" x="0.50000006" y="10.553965" rx="0" ry="0"/>
2325+ <rect ry="1.9905776" rx="1.9905776" y="0.55396092" x="0.50000012" height="14.946039" width="15" id="rect7913" style="overflow: visible; marker: none; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient8085) rgb(0, 0, 0); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2326+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7915" width="12" height="1.9460392" x="1" y="3.0539608" rx="0" ry="0"/>
2327+ <rect ry="0" rx="0" y="2.0539608" x="4" height="11" width="1" id="rect7917" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2328+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7919" width="1" height="11" x="11" y="2.0539608" rx="0" ry="0"/>
2329+ <rect ry="0" rx="0" y="11.053965" x="1" height="1" width="12" id="rect7921" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2330+ <g id="g8112" transform="translate(1, -2)">
2331+ <path transform="matrix(0.685714, 0, 0, 0.680851, -30.2929, 2.44758)" d="M 58.03125,12.640625 A 2.1875,2.203125 0 1 1 53.65625,12.640625 A 2.1875,2.203125 0 1 1 58.03125,12.640625 z" sodipodi:ry="2.203125" sodipodi:rx="2.1875" sodipodi:cy="12.640625" sodipodi:cx="55.84375" id="path7925" style="overflow: visible; marker: none; fill: rgb(242, 72, 72); fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient8117) rgb(0, 0, 0); stroke-width: 1.46353px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" sodipodi:type="arc"/>
2332+ <path sodipodi:type="arc" style="overflow: visible; marker: none; fill: url(#linearGradient8119) rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1.46353px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="path7933" sodipodi:cx="55.84375" sodipodi:cy="12.640625" sodipodi:rx="2.1875" sodipodi:ry="2.203125" d="M 58.03125,12.640625 A 2.1875,2.203125 0 1 1 53.65625,12.640625 A 2.1875,2.203125 0 1 1 58.03125,12.640625 z" transform="matrix(0.228571, 0, 0, 0.22695, -5.26429, 7.68517)"/>
2333+ <path sodipodi:type="arc" style="overflow: visible; marker: none; opacity: 0.303738; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: rgb(255, 255, 255); stroke-width: 0.87812px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="path7951" sodipodi:cx="55.84375" sodipodi:cy="12.640625" sodipodi:rx="2.1875" sodipodi:ry="2.203125" d="M 58.03125,12.640625 A 2.1875,2.203125 0 1 1 53.65625,12.640625 A 2.1875,2.203125 0 1 1 58.03125,12.640625 z" transform="matrix(1.14286, 0, 0, 1.13475, -55.8214, -3.29)"/>
2334+ </g>
2335+ <rect style="overflow: visible; marker: none; opacity: 0.350962; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: rgb(255, 255, 255); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect8093" width="13.000001" height="13.053962" x="1.5" y="1.5" rx="1.2367706" ry="1.2367706"/>
2336+ </g>
2337+</svg>
2338\ No newline at end of file
2339
2340=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg'
2341--- GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg 1970-01-01 00:00:00 +0000
2342+++ GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg 2009-07-27 14:37:04 +0000
2343@@ -0,0 +1,101 @@
2344+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2345+<!-- Created with Inkscape (http://www.inkscape.org/) -->
2346+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="24" height="24" id="svg2" sodipodi:version="0.32" inkscape:version="0.46" sodipodi:docname="geolocalization.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.0" inkscape:export-filename="/home/kj/Dropbox/Public/geolocalization.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90">
2347+ <defs id="defs4">
2348+ <linearGradient inkscape:collect="always" id="linearGradient7943">
2349+ <stop style="stop-color: rgb(249, 166, 166); stop-opacity: 1;" offset="0" id="stop7945"/>
2350+ <stop style="stop-color: rgb(243, 156, 156); stop-opacity: 1;" offset="1" id="stop7947"/>
2351+ </linearGradient>
2352+ <linearGradient inkscape:collect="always" id="linearGradient7935">
2353+ <stop style="stop-color: rgb(132, 0, 0); stop-opacity: 1;" offset="0" id="stop7937"/>
2354+ <stop style="stop-color: rgb(203, 0, 0); stop-opacity: 1;" offset="1" id="stop7939"/>
2355+ </linearGradient>
2356+ <linearGradient inkscape:collect="always" id="linearGradient7874">
2357+ <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 0.941785;" offset="0" id="stop7876"/>
2358+ <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7878"/>
2359+ </linearGradient>
2360+ <linearGradient id="linearGradient7838" inkscape:collect="always">
2361+ <stop id="stop7840" offset="0" style="stop-color: rgb(250, 173, 173); stop-opacity: 1;"/>
2362+ <stop id="stop7842" offset="1" style="stop-color: rgb(204, 0, 0); stop-opacity: 1;"/>
2363+ </linearGradient>
2364+ <linearGradient id="linearGradient7765" inkscape:collect="always">
2365+ <stop id="stop7767" offset="0" style="stop-color: rgb(238, 238, 236); stop-opacity: 1;"/>
2366+ <stop id="stop7769" offset="1" style="stop-color: rgb(173, 173, 173); stop-opacity: 1;"/>
2367+ </linearGradient>
2368+ <linearGradient id="linearGradient7757" inkscape:collect="always">
2369+ <stop id="stop7759" offset="0" style="stop-color: rgb(85, 87, 83); stop-opacity: 1;"/>
2370+ <stop id="stop7761" offset="1" style="stop-color: rgb(146, 148, 144); stop-opacity: 1;"/>
2371+ </linearGradient>
2372+ <linearGradient inkscape:collect="always" id="linearGradient7741">
2373+ <stop style="stop-color: rgb(254, 244, 164); stop-opacity: 1;" offset="0" id="stop7743"/>
2374+ <stop style="stop-color: rgb(255, 252, 225); stop-opacity: 1;" offset="1" id="stop7745"/>
2375+ </linearGradient>
2376+ <linearGradient inkscape:collect="always" id="linearGradient7081">
2377+ <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 1;" offset="0" id="stop7083"/>
2378+ <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7085"/>
2379+ </linearGradient>
2380+ <linearGradient inkscape:collect="always" id="linearGradient7013">
2381+ <stop style="stop-color: rgb(125, 0, 0); stop-opacity: 1;" offset="0" id="stop7015"/>
2382+ <stop style="stop-color: rgb(204, 0, 0); stop-opacity: 1;" offset="1" id="stop7017"/>
2383+ </linearGradient>
2384+ <linearGradient inkscape:collect="always" id="linearGradient7003">
2385+ <stop style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" offset="0" id="stop7005"/>
2386+ <stop style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" offset="1" id="stop7007"/>
2387+ </linearGradient>
2388+ <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective10"/>
2389+ <filter inkscape:collect="always" id="filter7386" x="-0.18793105" width="1.3758621" y="-0.26054078" height="1.5210816">
2390+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.59707262" id="feGaussianBlur7388"/>
2391+ </filter>
2392+ <inkscape:perspective id="perspective7482" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 526.18109 : 1" sodipodi:type="inkscape:persp3d"/>
2393+ <filter inkscape:collect="always" id="filter7589" x="-0.077992738" width="1.1559855" y="-0.38996369" height="1.7799274">
2394+ <feGaussianBlur inkscape:collect="always" stdDeviation="0.64993949" id="feGaussianBlur7591"/>
2395+ </filter>
2396+ <inkscape:perspective id="perspective7600" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 526.18109 : 1" sodipodi:type="inkscape:persp3d"/>
2397+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7081" id="linearGradient7707" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.904762, 0, 0, 1, 1.14286, 0)" x1="5.2149124" y1="15.558913" x2="6.9804454" y2="22"/>
2398+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7741" id="linearGradient7747" x1="-25.013903" y1="4" x2="-18" y2="17.119036" gradientUnits="userSpaceOnUse" gradientTransform="translate(30)"/>
2399+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7765" id="linearGradient7828" gradientUnits="userSpaceOnUse" gradientTransform="translate(20, 3)" x1="13.866498" y1="13.029231" x2="15.55635" y2="5.924583"/>
2400+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7757" id="linearGradient7830" gradientUnits="userSpaceOnUse" gradientTransform="translate(20, 3)" x1="15.642897" y1="9.4588156" x2="13.90625" y2="8.4726801"/>
2401+ <radialGradient inkscape:collect="always" xlink:href="#linearGradient7838" id="radialGradient7832" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.088672, 0.799838, -1.00097, 0.100044, 17.8398, -9.21998)" cx="14.825197" cy="3.6196058" fx="14.825197" fy="3.6196058" r="3.524409"/>
2402+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7013" id="linearGradient7834" gradientUnits="userSpaceOnUse" x1="16.304688" y1="8.2946424" x2="14.868303" y2="4.9375"/>
2403+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7003" id="linearGradient7836" gradientUnits="userSpaceOnUse" x1="14.844542" y1="9.349679" x2="18.449074" y2="0.33173633"/>
2404+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient7880" x1="44.812893" y1="7.2946024" x2="52.456104" y2="21.549175" gradientUnits="userSpaceOnUse"/>
2405+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7741" id="linearGradient7903" gradientUnits="userSpaceOnUse" gradientTransform="translate(30)" x1="15.727029" y1="6.9999995" x2="23.542524" y2="14.983313"/>
2406+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient7923" gradientUnits="userSpaceOnUse" x1="44.812893" y1="7.2946024" x2="54.206104" y2="20.549175"/>
2407+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7935" id="linearGradient7941" x1="57.438805" y1="14.430664" x2="54.385418" y2="9.703125" gradientUnits="userSpaceOnUse"/>
2408+ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7943" id="linearGradient7949" x1="55.795582" y1="10.903276" x2="55.84375" y2="14.84375" gradientUnits="userSpaceOnUse"/>
2409+ </defs>
2410+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" gridtolerance="10000" guidetolerance="10" objecttolerance="10" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" inkscape:cx="44.238097" inkscape:cy="9.3925275" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:snap-bbox="true" inkscape:snap-nodes="false" inkscape:window-width="1440" inkscape:window-height="794" inkscape:window-x="0" inkscape:window-y="25" showborder="false">
2411+ <inkscape:grid type="xygrid" id="grid6922" visible="true" enabled="true"/>
2412+ </sodipodi:namedview>
2413+ <metadata id="metadata7">
2414+ <rdf:RDF>
2415+ <cc:Work rdf:about="">
2416+ <dc:format>image/svg+xml</dc:format>
2417+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
2418+ </cc:Work>
2419+ </rdf:RDF>
2420+ </metadata>
2421+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
2422+ <rect style="overflow: visible; marker: none; opacity: 0.191589; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline; filter: url(#filter7589);" id="rect7089" width="20" height="4" x="2" y="19" rx="2.1022727" ry="1.5416666" transform="matrix(1.1, 0, 0, 1.5, -1.2, -11.5)"/>
2423+ <rect style="overflow: visible; marker: none; fill: url(#linearGradient7747) rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect6924" width="18" height="17" x="3" y="4" rx="0" ry="0"/>
2424+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect6943" width="19" height="3" x="2.5" y="5.5" rx="0" ry="0"/>
2425+ <rect ry="0" rx="0" y="-9.5" x="11.5" height="2" width="9.9999981" id="rect6945" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" transform="matrix(0, 1, -1, 0, 0, 0)"/>
2426+ <rect ry="0" rx="0" y="12.5" x="2.4999998" height="2" width="15.999999" id="rect7488" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2427+ <rect transform="matrix(0, 1, -1, 0, 0, 0)" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect6949" width="12.000001" height="2" x="9.5" y="-19.5" rx="0" ry="0"/>
2428+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7509" width="1" height="7" x="8" y="13"/>
2429+ <rect ry="0.92807764" rx="0.92807764" y="3.5" x="2.5" height="18" width="19" id="rect6969" style="overflow: visible; marker: none; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient7707) rgb(0, 0, 0); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2430+ <rect ry="0.16215134" rx="0.16215134" y="4.5" x="3.5" height="16.000002" width="16.999998" id="rect6967" style="overflow: visible; marker: none; opacity: 0.266355; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: rgb(255, 255, 255); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2431+ <rect y="13" x="17" height="1" width="1" id="rect7781" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;"/>
2432+ <g id="g7820" transform="translate(-19, -1)">
2433+ <path sodipodi:nodetypes="ccccc" transform="matrix(1.18033, 0, 0, 1.09091, 18.0164, 1)" id="path7135" d="M 10.947049,16.958333 C 14.13631,17.001634 16.454712,14.258591 17.969243,11.734888 L 17.760387,11.041703 L 11.189471,14.412416 L 10.947049,16.958333 z" style="opacity: 0.420561; fill: rgb(0, 0, 0); fill-rule: evenodd; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1; filter: url(#filter7386);"/>
2434+ <path sodipodi:nodetypes="cccccc" id="path6955" d="M 35.558846,7.5 L 31.53125,16.562501 L 31.553739,18.537462 L 33.477077,17.548192 L 37.40625,8.3643436 L 35.558846,7.5 z" style="fill: url(#linearGradient7828) rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: url(#linearGradient7830) rgb(0, 0, 0); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1;"/>
2435+ <path style="opacity: 0.257009; fill: rgb(0, 0, 0); fill-rule: evenodd; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1;" d="M 33.481904,10.990773 C 34.207813,11.574681 34.893276,11.98175 36.351844,12 L 37.081048,10.464566 L 34.318912,9 L 33.481904,10.990773 z" id="path7771" sodipodi:nodetypes="ccccc"/>
2436+ <path transform="matrix(1.29293, 0, 0, 1.3617, 17.4192, -0.223404)" d="M 18.625,4.9375 A 3.09375,2.9375 0 1 1 12.4375,4.9375 A 3.09375,2.9375 0 1 1 18.625,4.9375 z" sodipodi:ry="2.9375" sodipodi:rx="3.09375" sodipodi:cy="4.9375" sodipodi:cx="15.53125" id="path6953" style="overflow: visible; marker: none; fill: url(#radialGradient7832) rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient7834) rgb(0, 0, 0); stroke-width: 0.753653px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" sodipodi:type="arc"/>
2437+ <path sodipodi:type="arc" style="overflow: visible; marker: none; opacity: 0.429907; fill: none; fill-opacity: 1; fill-rule: nonzero; stroke: url(#linearGradient7836) rgb(0, 0, 0); stroke-width: 1.00487px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="path6979" sodipodi:cx="15.53125" sodipodi:cy="4.9375" sodipodi:rx="3.09375" sodipodi:ry="2.9375" d="M 18.625,4.9375 A 3.09375,2.9375 0 1 1 12.4375,4.9375 A 3.09375,2.9375 0 1 1 18.625,4.9375 z" transform="matrix(0.969697, 0, 0, 1.02128, 22.4394, 1.45745)"/>
2438+ </g>
2439+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7854" width="8.8817842e-16" height="3" x="5" y="11"/>
2440+ <rect ry="0" rx="0" y="-9.5" x="9.5" height="2" width="5" id="rect7864" style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: rgb(193, 190, 157); stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" transform="matrix(0, 1, -1, 0, 0, 0)"/>
2441+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7866" width="1" height="8" x="8" y="7"/>
2442+ <rect style="overflow: visible; marker: none; fill: rgb(255, 253, 236); fill-opacity: 1; fill-rule: nonzero; stroke: none; stroke-width: 1px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1; visibility: visible; display: inline;" id="rect7490" width="6" height="1" x="5" y="13"/>
2443+ </g>
2444+</svg>
2445\ No newline at end of file
2446
2447=== added file 'GTG/plugins/geolocalized-tasks/marker.py'
2448--- GTG/plugins/geolocalized-tasks/marker.py 1970-01-01 00:00:00 +0000
2449+++ GTG/plugins/geolocalized-tasks/marker.py 2009-07-25 18:58:39 +0000
2450@@ -0,0 +1,47 @@
2451+# -*- coding: utf-8 -*-
2452+# Copyright (c) 2009 - Paulo Cabido <paulo.cabido@gmail.com>
2453+#
2454+# This program is free software: you can redistribute it and/or modify it under
2455+# the terms of the GNU General Public License as published by the Free Software
2456+# Foundation, either version 3 of the License, or (at your option) any later
2457+# version.
2458+#
2459+# This program is distributed in the hope that it will be useful, but WITHOUT
2460+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
2461+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
2462+# details.
2463+#
2464+# You should have received a copy of the GNU General Public License along with
2465+# this program. If not, see <http://www.gnu.org/licenses/>.
2466+
2467+import clutter
2468+import champlain
2469+import champlaingtk
2470+
2471+class MarkerLayer(champlain.Layer):
2472+
2473+ def __init__(self):
2474+ champlain.Layer.__init__(self)
2475+ # a marker can also be set in RGB with ints
2476+ self.gray = clutter.Color(51, 51, 51)
2477+
2478+ #RGBA
2479+ self.white = clutter.Color(0xff, 0xff, 0xff, 0xff)
2480+ self.black = clutter.Color(0x00, 0x00, 0x00, 0xff)
2481+
2482+ self.hide()
2483+
2484+ def add_marker(self, text, latitude, longitude, bg_color=None, text_color=None, font="Airmole 8"):
2485+ if not text_color:
2486+ text_color = self.white
2487+
2488+ if not bg_color:
2489+ bg_color = self.gray
2490+
2491+ marker = champlain.marker_new_with_text(text, font, text_color, bg_color)
2492+
2493+ #marker.set_position(38.575935, -7.921326)
2494+ if latitude and longitude:
2495+ marker.set_position(latitude, longitude)
2496+ self.add(marker)
2497+ return marker
2498\ No newline at end of file
2499
2500=== added directory 'GTG/plugins/helloworld'
2501=== added file 'GTG/plugins/helloworld/hello_world.glade'
2502--- GTG/plugins/helloworld/hello_world.glade 1970-01-01 00:00:00 +0000
2503+++ GTG/plugins/helloworld/hello_world.glade 2009-07-14 16:32:20 +0000
2504@@ -0,0 +1,122 @@
2505+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2506+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
2507+
2508+<glade-interface>
2509+
2510+<widget class="GtkDialog" id="helloworld">
2511+ <property name="width_request">300</property>
2512+ <property name="height_request">150</property>
2513+ <property name="title" translatable="yes">Hello World</property>
2514+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
2515+ <property name="window_position">GTK_WIN_POS_NONE</property>
2516+ <property name="modal">False</property>
2517+ <property name="resizable">True</property>
2518+ <property name="destroy_with_parent">False</property>
2519+ <property name="decorated">True</property>
2520+ <property name="skip_taskbar_hint">False</property>
2521+ <property name="skip_pager_hint">False</property>
2522+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
2523+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
2524+ <property name="focus_on_map">True</property>
2525+ <property name="urgency_hint">False</property>
2526+ <property name="has_separator">True</property>
2527+
2528+ <child internal-child="vbox">
2529+ <widget class="GtkVBox" id="dialog-vbox1">
2530+ <property name="visible">True</property>
2531+ <property name="homogeneous">False</property>
2532+ <property name="spacing">0</property>
2533+
2534+ <child internal-child="action_area">
2535+ <widget class="GtkHButtonBox" id="dialog-action_area1">
2536+ <property name="visible">True</property>
2537+ <property name="layout_style">GTK_BUTTONBOX_END</property>
2538+
2539+ <child>
2540+ <widget class="GtkButton" id="btn_close">
2541+ <property name="visible">True</property>
2542+ <property name="can_default">True</property>
2543+ <property name="can_focus">True</property>
2544+ <property name="label">gtk-close</property>
2545+ <property name="use_stock">True</property>
2546+ <property name="relief">GTK_RELIEF_NORMAL</property>
2547+ <property name="focus_on_click">True</property>
2548+ <property name="response_id">-7</property>
2549+ </widget>
2550+ </child>
2551+ </widget>
2552+ <packing>
2553+ <property name="padding">0</property>
2554+ <property name="expand">False</property>
2555+ <property name="fill">True</property>
2556+ <property name="pack_type">GTK_PACK_END</property>
2557+ </packing>
2558+ </child>
2559+
2560+ <child>
2561+ <widget class="GtkVBox" id="vbox1">
2562+ <property name="visible">True</property>
2563+ <property name="homogeneous">False</property>
2564+ <property name="spacing">0</property>
2565+
2566+ <child>
2567+ <widget class="GtkLabel" id="label1">
2568+ <property name="visible">True</property>
2569+ <property name="label" translatable="yes">Hello World Plugin</property>
2570+ <property name="use_underline">False</property>
2571+ <property name="use_markup">False</property>
2572+ <property name="justify">GTK_JUSTIFY_LEFT</property>
2573+ <property name="wrap">False</property>
2574+ <property name="selectable">False</property>
2575+ <property name="xalign">0.5</property>
2576+ <property name="yalign">0.5</property>
2577+ <property name="xpad">0</property>
2578+ <property name="ypad">6</property>
2579+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2580+ <property name="width_chars">-1</property>
2581+ <property name="single_line_mode">False</property>
2582+ <property name="angle">0</property>
2583+ </widget>
2584+ <packing>
2585+ <property name="padding">0</property>
2586+ <property name="expand">False</property>
2587+ <property name="fill">False</property>
2588+ </packing>
2589+ </child>
2590+
2591+ <child>
2592+ <widget class="GtkLabel" id="lbl_helloworld">
2593+ <property name="visible">True</property>
2594+ <property name="label" translatable="yes"></property>
2595+ <property name="use_underline">False</property>
2596+ <property name="use_markup">False</property>
2597+ <property name="justify">GTK_JUSTIFY_LEFT</property>
2598+ <property name="wrap">True</property>
2599+ <property name="selectable">False</property>
2600+ <property name="xalign">0.5</property>
2601+ <property name="yalign">0.5</property>
2602+ <property name="xpad">0</property>
2603+ <property name="ypad">24</property>
2604+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
2605+ <property name="width_chars">-1</property>
2606+ <property name="single_line_mode">False</property>
2607+ <property name="angle">0</property>
2608+ </widget>
2609+ <packing>
2610+ <property name="padding">0</property>
2611+ <property name="expand">False</property>
2612+ <property name="fill">False</property>
2613+ </packing>
2614+ </child>
2615+ </widget>
2616+ <packing>
2617+ <property name="padding">0</property>
2618+ <property name="expand">True</property>
2619+ <property name="fill">True</property>
2620+ </packing>
2621+ </child>
2622+ </widget>
2623+ </child>
2624+</widget>
2625+
2626+</glade-interface>
2627
2628=== added file 'GTG/plugins/helloworld/helloworld.py'
2629--- GTG/plugins/helloworld/helloworld.py 1970-01-01 00:00:00 +0000
2630+++ GTG/plugins/helloworld/helloworld.py 2009-07-17 02:27:18 +0000
2631@@ -0,0 +1,77 @@
2632+# -*- coding: utf-8 -*-
2633+import gtk, pygtk
2634+import os
2635+
2636+class pluginTest:
2637+
2638+ PLUGIN_NAME = 'Hello World'
2639+ PLUGIN_AUTHORS = 'Paulo Cabido <paulo.cabido@gmail.com>'
2640+ PLUGIN_VERSION = '0.1.1'
2641+ PLUGIN_DESCRIPTION = 'Plugin Description goes here. Helo World!'
2642+ PLUGIN_ENABLED = False
2643+
2644+ def __init__(self):
2645+ self.menu_item = gtk.MenuItem("Hello World Plugin")
2646+ self.menu_item.connect('activate', self.onTesteMenu)
2647+
2648+ self.tb_button = gtk.ToolButton(gtk.STOCK_INFO)
2649+ self.tb_button.set_label("Hello World")
2650+ self.tb_button.connect('clicked', self.onTbButton)
2651+
2652+
2653+ # plugin engine methods
2654+ def activate(self, plugin_api):
2655+ # add a menu item to the menu bar
2656+ plugin_api.AddMenuItem(self.menu_item)
2657+
2658+ # saves the separator's index to later remove it
2659+ self.separator = plugin_api.AddToolbarItem(gtk.SeparatorToolItem())
2660+ # add a item (button) to the ToolBar
2661+ plugin_api.AddToolbarItem(self.tb_button)
2662+
2663+ def onTaskOpened(self, plugin_api):
2664+ # add a item (button) to the ToolBar
2665+ self.tb_Taskbutton = gtk.ToolButton(gtk.STOCK_EXECUTE)
2666+ self.tb_Taskbutton.set_label("Hello World")
2667+ self.tb_Taskbutton.connect('clicked', self.onTbTaskButton, plugin_api)
2668+ plugin_api.AddTaskToolbarItem(gtk.SeparatorToolItem())
2669+ plugin_api.AddTaskToolbarItem(self.tb_Taskbutton)
2670+
2671+ def deactivate(self, plugin_api):
2672+ plugin_api.RemoveMenuItem(self.menu_item)
2673+ plugin_api.RemoveToolbarItem(self.tb_button)
2674+ plugin_api.RemoveToolbarItem(None, self.separator)
2675+
2676+ #load a dialog with a String
2677+ def loadDialog(self, msg):
2678+ path = os.path.dirname(os.path.abspath(__file__))
2679+ glade_file = os.path.join(path, "hello_world.glade")
2680+ wTree = gtk.glade.XML(glade_file, "helloworld")
2681+ self.dialog = wTree.get_widget("helloworld")
2682+ lblHelloWorld = wTree.get_widget("lbl_helloworld")
2683+ lblHelloWorld.set_text(msg)
2684+
2685+ self.dialog.connect("delete_event", self.close_dialog)
2686+ self.dialog.connect("response", self.close_dialog)
2687+
2688+ self.dialog.show_all()
2689+
2690+ def close_dialog(self, widget, data=None):
2691+ self.dialog.destroy()
2692+ return True
2693+
2694+ # plugin features
2695+ def onTesteMenu(self, widget):
2696+ self.loadDialog("Hello World! From the MenuBar! :-)")
2697+
2698+ def onTbButton(self, widget):
2699+ self.loadDialog("Hello World! From the ToolBar! :-)")
2700+
2701+ def onTbTaskButton(self, widget, plugin_api):
2702+ self.loadDialog("Hello World! The tag @hello_world was just added to the end of the task!")
2703+ plugin_api.add_tag("hello_world")
2704+ #plugin_api.add_tag_attribute("@addingtag", "atrrib_teste", "teste")
2705+
2706+ def teste(self):
2707+ print "TESTE!"
2708+
2709
2710=== modified file 'GTG/taskbrowser/browser.py'
2711--- GTG/taskbrowser/browser.py 2009-07-28 15:57:10 +0000
2712+++ GTG/taskbrowser/browser.py 2009-07-29 15:14:01 +0000
2713@@ -40,6 +40,9 @@
2714 from GTG.taskbrowser import GnomeConfig
2715 from GTG.taskbrowser import browser_tools
2716 from GTG.tools import colors, openurl
2717+from GTG.core.plugins.manager import PluginManager
2718+from GTG.core.plugins.engine import PluginEngine
2719+from GTG.core.plugins.api import PluginAPI
2720
2721 #=== OBJECTS ==================================================================
2722
2723@@ -120,6 +123,9 @@
2724
2725 # Define accelerator keys
2726 self.init_accelerators()
2727+
2728+ # Initialize the plugin-engine
2729+ self.init_plugin_engine()
2730
2731 # NOTES
2732 self.init_note_support()
2733@@ -138,6 +144,7 @@
2734 self.priv['selected_rows'] = None
2735 self.priv['workview'] = False
2736 self.priv['noteview'] = False
2737+ self.priv['workview_task_filter'] = []
2738
2739 def init_icon_theme(self):
2740 icon_dirs = [GTG.DATA_DIR, os.path.join(GTG.DATA_DIR, "icons")]
2741@@ -262,7 +269,10 @@
2742 "on_about_close":
2743 self.on_about_close,
2744 "on_nonworkviewtag_toggled":
2745- self.on_nonworkviewtag_toggled}
2746+ self.on_nonworkviewtag_toggled,
2747+ "on_pluginmanager_activate":
2748+ self.on_pluginmanager_activate
2749+ }
2750
2751 self.wTree.signal_autoconnect(SIGNAL_CONNECTIONS_DIC)
2752 if (self.window):
2753@@ -329,6 +339,33 @@
2754 key, mod = gtk.accelerator_parse('<Control>i')
2755 task_dismiss.add_accelerator(
2756 'activate', agr, key, mod, gtk.ACCEL_VISIBLE)
2757+
2758+ def init_plugin_engine(self):
2759+ # plugins - Init
2760+ self.pengine = PluginEngine(GTG.PLUGIN_DIR)
2761+ # loads the plugins in the plugin dir
2762+ self.plugins = self.pengine.LoadPlugins()
2763+
2764+ # checks the conf for user settings
2765+ if self.config.has_key("plugins"):
2766+ if self.config["plugins"].has_key("enabled"):
2767+ plugins_enabled = self.config["plugins"]["enabled"]
2768+ for p in self.plugins:
2769+ if p['name'] in plugins_enabled:
2770+ p['state'] = True
2771+
2772+ if self.config["plugins"].has_key("disabled"):
2773+ plugins_disabled = self.config["plugins"]["disabled"]
2774+ for p in self.plugins:
2775+ if p['name'] in plugins_disabled:
2776+ p['state'] = False
2777+
2778+ # initializes the plugin api class
2779+ self.plugin_api = PluginAPI(self.window, self.config, self.wTree, self.req, \
2780+ self.task_tview, self.priv['workview_task_filter'], \
2781+ self.tagpopup, self.tag_tview, None, None)
2782+ # initializes and activates each plugin (that is enabled)
2783+ self.pengine.activatePlugins(self.plugins, self.plugin_api)
2784
2785 def init_note_support(self):
2786 self.notes = EXPERIMENTAL_NOTES
2787@@ -667,9 +704,9 @@
2788 self.opened_task[uid].present()
2789 else:
2790 tv = TaskEditor(
2791- self.req, t, self.do_refresh, self.on_delete_task,
2792- self.close_task, self.open_task, self.get_tasktitle,
2793- notes=self.notes)
2794+ self.req, t, self.plugins, self.do_refresh,
2795+ self.on_delete_task, self.close_task, self.open_task,
2796+ self.get_tasktitle, notes=self.notes)
2797 #registering as opened
2798 self.opened_task[uid] = tv
2799
2800@@ -861,6 +898,9 @@
2801 view = "workview"
2802 else:
2803 view = "default"
2804+
2805+ # plugins are deactivated
2806+ self.pengine.deactivatePlugins(self.plugins, self.plugin_api)
2807
2808 # Populate configuration dictionary
2809 self.config["browser"] = {
2810@@ -899,6 +939,11 @@
2811 self.config["browser"]["view"] = view
2812 if self.notes:
2813 self.config["browser"]["experimental_notes"] = True
2814+
2815+ # adds the plugin settings to the conf
2816+ self.config["plugins"] = {}
2817+ self.config["plugins"]["disabled"] = self.pengine.disabledPlugins(self.plugins)
2818+ self.config["plugins"]["enabled"] = self.pengine.enabledPlugins(self.plugins)
2819
2820 def on_about_clicked(self, widget):
2821 self.about.show()
2822@@ -1275,6 +1320,9 @@
2823 if selection.count_selected_rows() > 0:
2824 self.ctask_tview.get_selection().unselect_all()
2825 self.task_tview.get_selection().unselect_all()
2826+
2827+ def on_pluginmanager_activate(self, widget) :
2828+ PluginManager(self.window, self.plugins, self.pengine, self.plugin_api)
2829
2830 def on_close(self, widget=None):
2831 """Closing the window."""
2832@@ -1358,6 +1406,10 @@
2833 if self.priv['workview']:
2834 count = len(\
2835 self.req.get_active_tasks_list(tags=[tag], workable=True))
2836+ for tid in self.priv['workview_task_filter']:
2837+ for t in self.req.get_task(tid).get_tags():
2838+ if tag == t:
2839+ count = count -1
2840 else:
2841 count = len(\
2842 self.req.get_tasks_list(started_only=False, tags=[tag]))
2843@@ -1399,9 +1451,10 @@
2844 tags=tag_list, notag_only=notag_only, workable=True,
2845 started_only=False)
2846 for tid in tasks:
2847- self.add_task_tree_to_list(
2848- new_taskts, tid, None, selected_uid, treeview=False)
2849- nbr_of_tasks = len(tasks)
2850+ if tid not in self.priv['workview_task_filter']: # this filters out tasks
2851+ self.add_task_tree_to_list(new_taskts,tid, None,\
2852+ selected_uid, treeview=False)
2853+ nbr_of_tasks = len(tasks) - len(self.priv['workview_task_filter'])
2854
2855 else:
2856 #building the classical treeview
2857
2858=== modified file 'GTG/taskbrowser/taskbrowser.glade'
2859--- GTG/taskbrowser/taskbrowser.glade 2009-07-14 13:02:15 +0000
2860+++ GTG/taskbrowser/taskbrowser.glade 2009-07-29 15:14:01 +0000
2861@@ -1,991 +1,1353 @@
2862-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2863-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
2864-<!--Generated with glade3 3.4.5 on Tue Mar 31 14:57:26 2009 -->
2865+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2866+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
2867+
2868 <glade-interface>
2869- <widget class="GtkWindow" id="MainWindow">
2870- <property name="title" translatable="yes">Getting Things Gnome!</property>
2871- <property name="default_width">640</property>
2872- <property name="default_height">480</property>
2873- <signal name="configure_event" handler="on_move"/>
2874- <signal name="size_allocate" handler="on_size_allocate"/>
2875- <signal name="delete_event" handler="on_delete"/>
2876- <child>
2877- <widget class="GtkVBox" id="vbox1">
2878- <property name="visible">True</property>
2879- <child>
2880- <widget class="GtkMenuBar" id="browser_menu">
2881- <property name="visible">True</property>
2882- <child>
2883- <widget class="GtkMenuItem" id="menuitem1">
2884- <property name="visible">True</property>
2885- <property name="label" translatable="yes">_File</property>
2886- <property name="use_underline">True</property>
2887- <child>
2888- <widget class="GtkMenu" id="menu1">
2889- <property name="visible">True</property>
2890- <child>
2891- <widget class="GtkImageMenuItem" id="file_quit">
2892- <property name="visible">True</property>
2893- <property name="label">gtk-quit</property>
2894- <property name="use_underline">True</property>
2895- <property name="use_stock">True</property>
2896- <signal name="activate" handler="gtk_main_quit"/>
2897- </widget>
2898- </child>
2899- </widget>
2900- </child>
2901- </widget>
2902- </child>
2903- <child>
2904- <widget class="GtkMenuItem" id="menu_edit">
2905- <property name="label" translatable="yes">_Edit</property>
2906- <property name="use_underline">True</property>
2907- <child>
2908- <widget class="GtkMenu" id="menu2">
2909- <property name="visible">True</property>
2910- <child>
2911- <widget class="GtkImageMenuItem" id="edit_undo">
2912- <property name="visible">True</property>
2913- <property name="label">gtk-undo</property>
2914- <property name="use_underline">True</property>
2915- <property name="use_stock">True</property>
2916- </widget>
2917- </child>
2918- <child>
2919- <widget class="GtkImageMenuItem" id="edit_redo">
2920- <property name="visible">True</property>
2921- <property name="label">gtk-redo</property>
2922- <property name="use_underline">True</property>
2923- <property name="use_stock">True</property>
2924- </widget>
2925- </child>
2926- </widget>
2927- </child>
2928- </widget>
2929- </child>
2930- <child>
2931- <widget class="GtkMenuItem" id="menu_view">
2932- <property name="visible">True</property>
2933- <property name="label" translatable="yes">_View</property>
2934- <property name="use_underline">True</property>
2935- <child>
2936- <widget class="GtkMenu" id="menu5">
2937- <property name="visible">True</property>
2938- <child>
2939- <widget class="GtkCheckMenuItem" id="view_workview">
2940- <property name="visible">True</property>
2941- <property name="label" translatable="yes">_Work View</property>
2942- <property name="use_underline">True</property>
2943- <signal name="toggled" handler="on_view_workview_toggled"/>
2944- </widget>
2945- </child>
2946- <child>
2947- <widget class="GtkSeparatorMenuItem" id="separator1">
2948- <property name="visible">True</property>
2949- </widget>
2950- </child>
2951- <child>
2952- <widget class="GtkCheckMenuItem" id="bgcol_enable">
2953- <property name="visible">True</property>
2954- <property name="label" translatable="yes">_Background Colors</property>
2955- <property name="use_underline">True</property>
2956- <property name="active">True</property>
2957- <signal name="toggled" handler="on_bg_color_toggled"/>
2958- </widget>
2959- </child>
2960- <child>
2961- <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
2962- <property name="visible">True</property>
2963- </widget>
2964- </child>
2965- <child>
2966- <widget class="GtkCheckMenuItem" id="view_sidebar">
2967- <property name="visible">True</property>
2968- <property name="label" translatable="yes">_Tags Sidebar</property>
2969- <property name="use_underline">True</property>
2970- <signal name="toggled" handler="on_view_sidebar_toggled"/>
2971- </widget>
2972- </child>
2973- <child>
2974- <widget class="GtkCheckMenuItem" id="view_closed">
2975- <property name="visible">True</property>
2976- <property name="label" translatable="yes">_Closed Tasks Pane</property>
2977- <property name="use_underline">True</property>
2978- <signal name="toggled" handler="on_view_closed_toggled"/>
2979- </widget>
2980- </child>
2981- <child><widget class="GtkCheckMenuItem" id="view_toolbar">
2982- <property name="visible">True</property>
2983- <property name="label" translatable="yes">T_oolbar</property>
2984- <property name="use_underline">True</property>
2985- <signal name="toggled" handler="on_view_toolbar_toggled" />
2986- </widget></child>
2987- <child>
2988- <widget class="GtkCheckMenuItem" id="view_quickadd">
2989- <property name="visible">True</property>
2990- <property name="label" translatable="yes">_Quick Add Entry</property>
2991- <property name="use_underline">True</property>
2992- <signal name="toggled" handler="on_view_quickadd_toggled"/>
2993- </widget>
2994- </child></widget>
2995- </child>
2996- </widget>
2997- </child>
2998- <child>
2999- <widget class="GtkMenuItem" id="bm_task">
3000- <property name="visible">True</property>
3001- <property name="label" translatable="yes">_Tasks</property>
3002- <property name="use_underline">True</property>
3003- <child>
3004- <widget class="GtkMenu" id="menu4">
3005- <property name="visible">True</property>
3006- <child>
3007- <widget class="GtkImageMenuItem" id="new_task_mi">
3008- <property name="visible">True</property>
3009- <property name="tooltip" translatable="yes">Create a new task</property>
3010- <property name="label" translatable="yes">New _Task</property>
3011- <property name="use_underline">True</property>
3012- <signal name="activate" handler="on_add_task"/>
3013- <child internal-child="image">
3014- <widget class="GtkImage" id="image1">
3015- <property name="visible">True</property>
3016- <property name="pixel_size">16</property>
3017- <property name="icon_name">gtg-task-new</property>
3018- </widget>
3019- </child>
3020- </widget>
3021- </child>
3022- <child>
3023- <widget class="GtkImageMenuItem" id="new_subtask_mi">
3024- <property name="visible">True</property>
3025- <property name="label" translatable="yes">New _Subtask</property>
3026- <property name="use_underline">True</property>
3027- <signal name="activate" handler="on_add_subtask"/>
3028- <child internal-child="image">
3029- <widget class="GtkImage" id="image2">
3030- <property name="visible">True</property>
3031- <property name="pixel_size">16</property>
3032- <property name="icon_name">gtg-task-new</property>
3033- </widget>
3034- </child>
3035- </widget>
3036- </child>
3037- <child>
3038- <widget class="GtkImageMenuItem" id="edit_mi">
3039- <property name="visible">True</property>
3040- <property name="label">gtk-edit</property>
3041- <property name="use_underline">True</property>
3042- <property name="use_stock">True</property>
3043- <signal name="activate" handler="on_edit_active_task"/>
3044- </widget>
3045- </child>
3046- <child>
3047- <widget class="GtkSeparatorMenuItem" id="separatormenuitem2">
3048- <property name="visible">True</property>
3049- </widget>
3050- </child>
3051- <child>
3052- <widget class="GtkImageMenuItem" id="mark_done_mi">
3053- <property name="visible">True</property>
3054- <property name="label" translatable="yes">Mark as _Done</property>
3055- <property name="use_underline">True</property>
3056- <signal name="activate" handler="on_mark_as_done"/>
3057- <child internal-child="image">
3058- <widget class="GtkImage" id="image3">
3059- <property name="visible">True</property>
3060- <property name="pixel_size">16</property>
3061- <property name="icon_name">gtg-task-done</property>
3062- </widget>
3063- </child>
3064- </widget>
3065- </child>
3066- <child>
3067- <widget class="GtkImageMenuItem" id="task_dismiss">
3068- <property name="visible">True</property>
3069- <property name="label" translatable="yes">D_ismiss</property>
3070- <property name="use_underline">True</property>
3071- <signal name="activate" handler="on_dismiss_task"/>
3072- <child internal-child="image">
3073- <widget class="GtkImage" id="image4">
3074- <property name="visible">True</property>
3075- <property name="pixel_size">16</property>
3076- <property name="icon_name">gtg-task-dismiss</property>
3077- </widget>
3078- </child>
3079- </widget>
3080- </child>
3081- <child>
3082- <widget class="GtkImageMenuItem" id="delete_mi">
3083- <property name="visible">True</property>
3084- <property name="label">gtk-delete</property>
3085- <property name="use_underline">True</property>
3086- <property name="use_stock">True</property>
3087- <signal name="activate" handler="on_delete_task"/>
3088- </widget>
3089- </child>
3090- </widget>
3091- </child>
3092- </widget>
3093- </child>
3094- <child>
3095- <widget class="GtkMenuItem" id="menuitem4">
3096- <property name="visible">True</property>
3097- <property name="label" translatable="yes">_Help</property>
3098- <property name="use_underline">True</property>
3099- <child>
3100- <widget class="GtkMenu" id="menu3">
3101- <property name="visible">True</property>
3102- <child>
3103- <widget class="GtkImageMenuItem" id="imagemenuitem10">
3104- <property name="visible">True</property>
3105- <property name="label">gtk-about</property>
3106- <property name="use_underline">True</property>
3107- <property name="use_stock">True</property>
3108- <signal name="activate" handler="on_about_clicked"/>
3109- </widget>
3110- </child>
3111- </widget>
3112- </child>
3113- </widget>
3114- </child>
3115- </widget>
3116- <packing>
3117- <property name="expand">False</property>
3118- </packing>
3119- </child>
3120- <child>
3121- <widget class="GtkToolbar" id="task_tb">
3122- <property name="visible">True</property>
3123- <child>
3124- <widget class="GtkToolButton" id="new_task_b">
3125- <property name="visible">True</property>
3126- <property name="label" translatable="yes">New Task</property>
3127- <property name="icon_name">gtg-task-new</property>
3128- <signal name="clicked" handler="on_add_task"/>
3129- </widget>
3130- <packing>
3131- <property name="homogeneous">True</property>
3132- </packing>
3133- </child>
3134- <child>
3135- <widget class="GtkToolButton" id="new_subtask_b">
3136- <property name="label" translatable="yes">New Subtask</property>
3137- <property name="icon_name">gtg-task-new</property>
3138- <signal name="clicked" handler="on_add_subtask"/>
3139- </widget>
3140- <packing>
3141- <property name="homogeneous">True</property>
3142- </packing>
3143- </child>
3144- <child>
3145- <widget class="GtkToolButton" id="new_note_button">
3146- <property name="visible">True</property>
3147- <property name="label" translatable="yes">New Note</property>
3148- <property name="icon_name">gtg-note-new</property>
3149- <signal name="clicked" handler="on_add_note"/>
3150- </widget>
3151- <packing>
3152- <property name="homogeneous">True</property>
3153- </packing>
3154- </child>
3155- <child>
3156- <widget class="GtkToolButton" id="edit_b">
3157- <property name="visible">True</property>
3158- <property name="label" translatable="yes">Edit</property>
3159- <property name="stock_id">gtk-edit</property>
3160- <signal name="clicked" handler="on_edit_active_task"/>
3161- </widget>
3162- <packing>
3163- <property name="homogeneous">True</property>
3164- </packing>
3165- </child>
3166- <child>
3167- <widget class="GtkSeparatorToolItem" id="&lt;separateur&gt;">
3168- </widget>
3169- <packing>
3170- <property name="homogeneous">True</property>
3171- </packing>
3172- </child>
3173- <child>
3174- <widget class="GtkToolButton" id="Undo">
3175- <property name="label" translatable="yes">Undo</property>
3176- <property name="stock_id">gtk-undo</property>
3177- </widget>
3178- <packing>
3179- <property name="homogeneous">True</property>
3180- </packing>
3181- </child>
3182- <child>
3183- <widget class="GtkToolButton" id="Redo">
3184- <property name="label" translatable="yes">Redo</property>
3185- <property name="stock_id">gtk-redo</property>
3186- </widget>
3187- <packing>
3188- <property name="homogeneous">True</property>
3189- </packing>
3190- </child>
3191- <child>
3192- <widget class="GtkSeparatorToolItem" id="toolbutton2">
3193- <property name="visible">True</property>
3194- </widget>
3195- <packing>
3196- <property name="homogeneous">True</property>
3197- </packing>
3198- </child>
3199- <child>
3200- <widget class="GtkToolButton" id="mark_as_done_b">
3201- <property name="visible">True</property>
3202- <property name="label" translatable="yes">Mark as Done</property>
3203- <property name="icon_name">gtg-task-done</property>
3204- <signal name="clicked" handler="on_mark_as_done"/>
3205- </widget>
3206- <packing>
3207- <property name="homogeneous">True</property>
3208- </packing>
3209- </child>
3210- <child>
3211- <widget class="GtkToolButton" id="dismiss">
3212- <property name="visible">True</property>
3213- <property name="label" translatable="yes">Dismiss</property>
3214- <property name="icon_name">gtg-task-dismiss</property>
3215- <signal name="clicked" handler="on_dismiss_task"/>
3216- </widget>
3217- <packing>
3218- <property name="homogeneous">True</property>
3219- </packing>
3220- </child>
3221- <child>
3222- <widget class="GtkSeparatorToolItem" id="toolbutton1">
3223- <property name="visible">True</property>
3224- </widget>
3225- <packing>
3226- <property name="homogeneous">True</property>
3227- </packing>
3228- </child>
3229- <child>
3230- <widget class="GtkToggleToolButton" id="note_toggle">
3231- <property name="visible">True</property>
3232- <property name="label" translatable="yes">View Notes</property>
3233- <property name="stock_id">gtk-file</property>
3234- <signal name="toggled" handler="on_note_toggled"/>
3235- </widget>
3236- <packing>
3237- <property name="homogeneous">True</property>
3238- </packing>
3239- </child>
3240- <child>
3241- <widget class="GtkToggleToolButton" id="workview_toggle">
3242- <property name="visible">True</property>
3243- <property name="label" translatable="yes">Work View</property>
3244- <property name="stock_id">gtk-index</property>
3245- <signal name="toggled" handler="on_workview_toggled"/>
3246- </widget>
3247- <packing>
3248- <property name="homogeneous">True</property>
3249- </packing>
3250- </child>
3251- </widget>
3252- <packing>
3253- <property name="expand">False</property>
3254- <property name="position">1</property>
3255- </packing>
3256- </child>
3257- <child>
3258- <widget class="GtkHPaned" id="hpaned1">
3259- <property name="visible">True</property>
3260- <property name="can_focus">True</property>
3261- <property name="position">200</property>
3262- <property name="position_set">True</property>
3263- <child>
3264- <widget class="GtkVBox" id="sidebar">
3265- <child>
3266- <widget class="GtkHBox" id="hbox4">
3267- <property name="visible">True</property>
3268- <child>
3269- <widget class="GtkImage" id="image8">
3270- <property name="visible">True</property>
3271- <property name="xpad">5</property>
3272- <property name="icon_name">gtg-tag</property>
3273- </widget>
3274- <packing>
3275- <property name="expand">False</property>
3276- </packing>
3277- </child>
3278- <child>
3279- <widget class="GtkLabel" id="label4">
3280- <property name="visible">True</property>
3281- <property name="xalign">0</property>
3282- <property name="label" translatable="yes">Tags</property>
3283- </widget>
3284- <packing>
3285- <property name="position">1</property>
3286- </packing>
3287- </child>
3288- <child>
3289- <widget class="GtkButton" id="button-sidebar-close">
3290- <property name="visible">True</property>
3291- <property name="can_focus">True</property>
3292- <property name="receives_default">True</property>
3293- <property name="relief">GTK_RELIEF_NONE</property>
3294- <property name="response_id">0</property>
3295- <signal name="clicked" handler="on_view_sidebar_toggled"/>
3296- <child>
3297- <widget class="GtkImage" id="image9">
3298- <property name="visible">True</property>
3299- <property name="stock">gtk-close</property>
3300- <property name="icon_size">1</property>
3301- </widget>
3302- </child>
3303- </widget>
3304- <packing>
3305- <property name="expand">False</property>
3306- <property name="position">2</property>
3307- </packing>
3308- </child>
3309- </widget>
3310- <packing>
3311- <property name="expand">False</property>
3312- </packing>
3313- </child>
3314- <child>
3315- <widget class="GtkScrolledWindow" id="sidebar-scroll">
3316- <property name="visible">True</property>
3317- <property name="can_focus">True</property>
3318- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
3319- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
3320- <property name="shadow_type">GTK_SHADOW_IN</property>
3321- <child>
3322- <widget class="GtkTreeView" id="tag_tview">
3323- <property name="visible">True</property>
3324- <property name="can_focus">True</property>
3325- <signal name="button_press_event" handler="on_tag_treeview_button_press_event"/>
3326- <signal name="row_activated" handler="on_select_tag"/>
3327- <signal name="cursor_changed" handler="on_select_tag"/>
3328- </widget>
3329- </child>
3330- </widget>
3331- <packing>
3332- <property name="position">1</property>
3333- </packing>
3334- </child>
3335- </widget>
3336- <packing>
3337- <property name="resize">True</property>
3338- <property name="shrink">True</property>
3339- </packing>
3340- </child>
3341- <child>
3342- <widget class="GtkVBox" id="vbox2">
3343- <property name="visible">True</property>
3344- <child>
3345- <widget class="GtkHBox" id="quickadd_pane">
3346- <property name="visible">True</property>
3347- <child>
3348- <widget class="GtkEntry" id="quickadd_field">
3349- <property name="visible">True</property>
3350- <property name="can_focus">True</property>
3351- <property name="has_focus">True</property>
3352- <property name="is_focus">True</property>
3353- <property name="can_default">True</property>
3354- <signal name="activate" handler="on_quickadd_field_activate"/>
3355- </widget>
3356- </child>
3357- <child>
3358- <widget class="GtkButton" id="button1">
3359- <property name="visible">True</property>
3360- <property name="can_focus">True</property>
3361- <property name="receives_default">True</property>
3362- <property name="label">gtk-add</property>
3363- <property name="use_stock">True</property>
3364- <property name="response_id">0</property>
3365- <signal name="clicked" handler="on_quickadd_button_activate"/>
3366- </widget>
3367- <packing>
3368- <property name="expand">False</property>
3369- <property name="fill">False</property>
3370- <property name="position">1</property>
3371- </packing>
3372- </child>
3373- </widget>
3374- <packing>
3375- <property name="expand">False</property>
3376- <property name="fill">False</property>
3377- <property name="padding">2</property>
3378- </packing>
3379- </child>
3380- <child>
3381- <widget class="GtkVPaned" id="vpaned1">
3382- <property name="visible">True</property>
3383- <property name="can_focus">True</property>
3384- <property name="position">330</property>
3385- <property name="position_set">True</property>
3386- <child>
3387- <widget class="GtkScrolledWindow" id="main_pane">
3388- <property name="visible">True</property>
3389- <property name="can_focus">True</property>
3390- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
3391- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
3392- <child>
3393- <widget class="GtkTreeView" id="task_tview">
3394- <property name="visible">True</property>
3395- <property name="can_focus">True</property>
3396- <property name="reorderable">True</property>
3397- <property name="rules_hint">True</property>
3398- <property name="enable_search">False</property>
3399- <property name="search_column">8</property>
3400- <property name="rubber_banding">True</property>
3401- <property name="enable_tree_lines">True</property>
3402- <signal name="button_press_event" handler="on_task_treeview_button_press_event"/>
3403- <signal name="key_press_event" handler="on_task_treeview_key_press_event"/>
3404- <signal name="row_activated" handler="on_edit_active_task"/>
3405- <signal name="cursor_changed" handler="on_task_tview_cursor_changed"/>
3406- </widget>
3407- </child>
3408- </widget>
3409- <packing>
3410- <property name="resize">True</property>
3411- <property name="shrink">True</property>
3412- </packing>
3413- </child>
3414- <child>
3415- <widget class="GtkScrolledWindow" id="closed_pane">
3416- <property name="height_request">200</property>
3417- <property name="can_focus">True</property>
3418- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
3419- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
3420- <child>
3421- <widget class="GtkTreeView" id="taskdone_tview">
3422- <property name="visible">True</property>
3423- <property name="can_focus">True</property>
3424- <property name="rules_hint">True</property>
3425- <property name="search_column">8</property>
3426- <signal name="button_press_event" handler="on_closed_task_treeview_button_press_event"/>
3427- <signal name="key_press_event" handler="on_closed_task_treeview_key_press_event"/>
3428- <signal name="row_activated" handler="on_edit_done_task"/>
3429- </widget>
3430- </child>
3431- </widget>
3432- <packing>
3433- <property name="resize">True</property>
3434- <property name="shrink">True</property>
3435- </packing>
3436- </child>
3437- </widget>
3438- <packing>
3439- <property name="position">1</property>
3440- </packing>
3441- </child>
3442- </widget>
3443- <packing>
3444- <property name="resize">True</property>
3445- <property name="shrink">True</property>
3446- </packing>
3447- </child>
3448- </widget>
3449- <packing>
3450- <property name="position">2</property>
3451- </packing>
3452- </child>
3453- <child>
3454- <widget class="GtkStatusbar" id="statusbar1">
3455- <property name="visible">True</property>
3456- <property name="spacing">2</property>
3457- </widget>
3458- <packing>
3459- <property name="expand">False</property>
3460- <property name="position">3</property>
3461- </packing>
3462- </child>
3463- </widget>
3464- </child>
3465- </widget>
3466- <widget class="GtkDialog" id="confirm_delete">
3467- <property name="border_width">5</property>
3468- <property name="title" translatable="yes">Confirm task deletion</property>
3469- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
3470- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
3471- <property name="has_separator">False</property>
3472- <signal name="close" handler="on_delete_cancel"/>
3473- <child internal-child="vbox">
3474- <widget class="GtkVBox" id="dialog-vbox1">
3475- <property name="visible">True</property>
3476- <property name="spacing">2</property>
3477- <child>
3478- <widget class="GtkHBox" id="hbox3">
3479- <property name="visible">True</property>
3480- <child>
3481- <widget class="GtkImage" id="image5">
3482- <property name="visible">True</property>
3483- <property name="stock">gtk-dialog-question</property>
3484- <property name="icon_size">6</property>
3485- </widget>
3486- <packing>
3487- <property name="fill">False</property>
3488- <property name="padding">16</property>
3489- </packing>
3490- </child>
3491- <child>
3492- <widget class="GtkLabel" id="label1">
3493- <property name="visible">True</property>
3494- <property name="label" translatable="yes">&lt;span weight="bold" size="large"&gt;Are you sure you want delete this task?&lt;/span&gt;
3495+
3496+<widget class="GtkWindow" id="MainWindow">
3497+ <property name="title" translatable="yes">Getting Things Gnome!</property>
3498+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
3499+ <property name="window_position">GTK_WIN_POS_NONE</property>
3500+ <property name="modal">False</property>
3501+ <property name="default_width">640</property>
3502+ <property name="default_height">480</property>
3503+ <property name="resizable">True</property>
3504+ <property name="destroy_with_parent">False</property>
3505+ <property name="decorated">True</property>
3506+ <property name="skip_taskbar_hint">False</property>
3507+ <property name="skip_pager_hint">False</property>
3508+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
3509+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
3510+ <property name="focus_on_map">True</property>
3511+ <property name="urgency_hint">False</property>
3512+ <signal name="configure_event" handler="on_move"/>
3513+ <signal name="size_allocate" handler="on_size_allocate"/>
3514+ <signal name="delete_event" handler="on_delete"/>
3515+
3516+ <child>
3517+ <widget class="GtkVBox" id="vbox1">
3518+ <property name="visible">True</property>
3519+ <property name="homogeneous">False</property>
3520+ <property name="spacing">0</property>
3521+
3522+ <child>
3523+ <widget class="GtkMenuBar" id="browser_menu">
3524+ <property name="visible">True</property>
3525+ <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
3526+ <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
3527+
3528+ <child>
3529+ <widget class="GtkMenuItem" id="menuitem1">
3530+ <property name="visible">True</property>
3531+ <property name="label" translatable="yes">_File</property>
3532+ <property name="use_underline">True</property>
3533+
3534+ <child>
3535+ <widget class="GtkMenu" id="menuitem1_menu">
3536+
3537+ <child>
3538+ <widget class="GtkImageMenuItem" id="file_quit">
3539+ <property name="visible">True</property>
3540+ <property name="label">gtk-quit</property>
3541+ <property name="use_stock">True</property>
3542+ <signal name="activate" handler="gtk_main_quit"/>
3543+ </widget>
3544+ </child>
3545+ </widget>
3546+ </child>
3547+ </widget>
3548+ </child>
3549+
3550+ <child>
3551+ <widget class="GtkMenuItem" id="menu_edit">
3552+ <property name="label" translatable="yes">_Edit</property>
3553+ <property name="use_underline">True</property>
3554+
3555+ <child>
3556+ <widget class="GtkMenu" id="menu_edit_menu">
3557+
3558+ <child>
3559+ <widget class="GtkImageMenuItem" id="edit_undo">
3560+ <property name="visible">True</property>
3561+ <property name="label">gtk-undo</property>
3562+ <property name="use_stock">True</property>
3563+ </widget>
3564+ </child>
3565+
3566+ <child>
3567+ <widget class="GtkImageMenuItem" id="edit_redo">
3568+ <property name="visible">True</property>
3569+ <property name="label">gtk-redo</property>
3570+ <property name="use_stock">True</property>
3571+ </widget>
3572+ </child>
3573+ </widget>
3574+ </child>
3575+ </widget>
3576+ </child>
3577+
3578+ <child>
3579+ <widget class="GtkMenuItem" id="menu_view">
3580+ <property name="visible">True</property>
3581+ <property name="label" translatable="yes">_View</property>
3582+ <property name="use_underline">True</property>
3583+
3584+ <child>
3585+ <widget class="GtkMenu" id="menu_view_menu">
3586+
3587+ <child>
3588+ <widget class="GtkCheckMenuItem" id="view_workview">
3589+ <property name="visible">True</property>
3590+ <property name="label" translatable="yes">_Work View</property>
3591+ <property name="use_underline">True</property>
3592+ <property name="active">False</property>
3593+ <signal name="toggled" handler="on_view_workview_toggled"/>
3594+ </widget>
3595+ </child>
3596+
3597+ <child>
3598+ <widget class="GtkSeparatorMenuItem" id="separator1">
3599+ <property name="visible">True</property>
3600+ </widget>
3601+ </child>
3602+
3603+ <child>
3604+ <widget class="GtkCheckMenuItem" id="bgcol_enable">
3605+ <property name="visible">True</property>
3606+ <property name="label" translatable="yes">_Background Colors</property>
3607+ <property name="use_underline">True</property>
3608+ <property name="active">True</property>
3609+ <signal name="toggled" handler="on_bg_color_toggled"/>
3610+ </widget>
3611+ </child>
3612+
3613+ <child>
3614+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
3615+ <property name="visible">True</property>
3616+ </widget>
3617+ </child>
3618+
3619+ <child>
3620+ <widget class="GtkCheckMenuItem" id="view_sidebar">
3621+ <property name="visible">True</property>
3622+ <property name="label" translatable="yes">_Tags Sidebar</property>
3623+ <property name="use_underline">True</property>
3624+ <property name="active">False</property>
3625+ <signal name="toggled" handler="on_view_sidebar_toggled"/>
3626+ </widget>
3627+ </child>
3628+
3629+ <child>
3630+ <widget class="GtkCheckMenuItem" id="view_closed">
3631+ <property name="visible">True</property>
3632+ <property name="label" translatable="yes">_Closed Tasks Pane</property>
3633+ <property name="use_underline">True</property>
3634+ <property name="active">False</property>
3635+ <signal name="toggled" handler="on_view_closed_toggled"/>
3636+ </widget>
3637+ </child>
3638+
3639+ <child>
3640+ <widget class="GtkCheckMenuItem" id="view_toolbar">
3641+ <property name="visible">True</property>
3642+ <property name="label" translatable="yes">T_oolbar</property>
3643+ <property name="use_underline">True</property>
3644+ <property name="active">False</property>
3645+ <signal name="toggled" handler="on_view_toolbar_toggled"/>
3646+ </widget>
3647+ </child>
3648+
3649+ <child>
3650+ <widget class="GtkCheckMenuItem" id="view_quickadd">
3651+ <property name="visible">True</property>
3652+ <property name="label" translatable="yes">_Quick Add Entry</property>
3653+ <property name="use_underline">True</property>
3654+ <property name="active">False</property>
3655+ <signal name="toggled" handler="on_view_quickadd_toggled"/>
3656+ </widget>
3657+ </child>
3658+ </widget>
3659+ </child>
3660+ </widget>
3661+ </child>
3662+
3663+ <child>
3664+ <widget class="GtkMenuItem" id="bm_task">
3665+ <property name="visible">True</property>
3666+ <property name="label" translatable="yes">_Tasks</property>
3667+ <property name="use_underline">True</property>
3668+
3669+ <child>
3670+ <widget class="GtkMenu" id="bm_task_menu">
3671+
3672+ <child>
3673+ <widget class="GtkMenuItem" id="new_task_mi">
3674+ <property name="visible">True</property>
3675+ <property name="tooltip" translatable="yes">Create a new task</property>
3676+ <property name="label" translatable="yes">New _Task</property>
3677+ <property name="use_underline">True</property>
3678+ <signal name="activate" handler="on_add_task"/>
3679+ </widget>
3680+ </child>
3681+
3682+ <child>
3683+ <widget class="GtkMenuItem" id="new_subtask_mi">
3684+ <property name="visible">True</property>
3685+ <property name="label" translatable="yes">New _Subtask</property>
3686+ <property name="use_underline">True</property>
3687+ <signal name="activate" handler="on_add_subtask"/>
3688+ </widget>
3689+ </child>
3690+
3691+ <child>
3692+ <widget class="GtkImageMenuItem" id="edit_mi">
3693+ <property name="visible">True</property>
3694+ <property name="label">gtk-edit</property>
3695+ <property name="use_stock">True</property>
3696+ <signal name="activate" handler="on_edit_active_task"/>
3697+ </widget>
3698+ </child>
3699+
3700+ <child>
3701+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem2">
3702+ <property name="visible">True</property>
3703+ </widget>
3704+ </child>
3705+
3706+ <child>
3707+ <widget class="GtkMenuItem" id="mark_done_mi">
3708+ <property name="visible">True</property>
3709+ <property name="label" translatable="yes">Mark as _Done</property>
3710+ <property name="use_underline">True</property>
3711+ <signal name="activate" handler="on_mark_as_done"/>
3712+ </widget>
3713+ </child>
3714+
3715+ <child>
3716+ <widget class="GtkMenuItem" id="task_dismiss">
3717+ <property name="visible">True</property>
3718+ <property name="label" translatable="yes">D_ismiss</property>
3719+ <property name="use_underline">True</property>
3720+ <signal name="activate" handler="on_dismiss_task"/>
3721+ </widget>
3722+ </child>
3723+
3724+ <child>
3725+ <widget class="GtkImageMenuItem" id="delete_mi">
3726+ <property name="visible">True</property>
3727+ <property name="label">gtk-delete</property>
3728+ <property name="use_stock">True</property>
3729+ <signal name="activate" handler="on_delete_task"/>
3730+ </widget>
3731+ </child>
3732+ </widget>
3733+ </child>
3734+ </widget>
3735+ </child>
3736+
3737+ <child>
3738+ <widget class="GtkMenuItem" id="menu_plugin">
3739+ <property name="visible">True</property>
3740+ <property name="label" translatable="yes">_Plugins</property>
3741+ <property name="use_underline">True</property>
3742+
3743+ <child>
3744+ <widget class="GtkMenu" id="menu_plugin_menu">
3745+
3746+ <child>
3747+ <widget class="GtkMenuItem" id="pluginmanager_menu">
3748+ <property name="visible">True</property>
3749+ <property name="label" translatable="yes">_Plugin Preferences</property>
3750+ <property name="use_underline">True</property>
3751+ <signal name="activate" handler="on_pluginmanager_activate" last_modification_time="Wed, 29 Jul 2009 14:36:59 GMT"/>
3752+ </widget>
3753+ </child>
3754+ </widget>
3755+ </child>
3756+ </widget>
3757+ </child>
3758+
3759+ <child>
3760+ <widget class="GtkMenuItem" id="menuitem4">
3761+ <property name="visible">True</property>
3762+ <property name="label" translatable="yes">_Help</property>
3763+ <property name="use_underline">True</property>
3764+
3765+ <child>
3766+ <widget class="GtkMenu" id="menuitem4_menu">
3767+
3768+ <child>
3769+ <widget class="GtkImageMenuItem" id="imagemenuitem10">
3770+ <property name="visible">True</property>
3771+ <property name="label">gtk-about</property>
3772+ <property name="use_stock">True</property>
3773+ <signal name="activate" handler="on_about_clicked"/>
3774+ </widget>
3775+ </child>
3776+ </widget>
3777+ </child>
3778+ </widget>
3779+ </child>
3780+ </widget>
3781+ <packing>
3782+ <property name="padding">0</property>
3783+ <property name="expand">False</property>
3784+ <property name="fill">True</property>
3785+ </packing>
3786+ </child>
3787+
3788+ <child>
3789+ <widget class="GtkToolbar" id="task_tb">
3790+ <property name="visible">True</property>
3791+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
3792+ <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
3793+ <property name="tooltips">True</property>
3794+ <property name="show_arrow">True</property>
3795+
3796+ <child>
3797+ <widget class="GtkToolButton" id="new_task_b">
3798+ <property name="visible">True</property>
3799+ <property name="label" translatable="yes">New Task</property>
3800+ <property name="use_underline">True</property>
3801+ <property name="visible_horizontal">True</property>
3802+ <property name="visible_vertical">True</property>
3803+ <property name="is_important">False</property>
3804+ <signal name="clicked" handler="on_add_task"/>
3805+ </widget>
3806+ <packing>
3807+ <property name="expand">False</property>
3808+ <property name="homogeneous">True</property>
3809+ </packing>
3810+ </child>
3811+
3812+ <child>
3813+ <widget class="GtkToolButton" id="new_subtask_b">
3814+ <property name="label" translatable="yes">New Subtask</property>
3815+ <property name="use_underline">True</property>
3816+ <property name="visible_horizontal">True</property>
3817+ <property name="visible_vertical">True</property>
3818+ <property name="is_important">False</property>
3819+ <signal name="clicked" handler="on_add_subtask"/>
3820+ </widget>
3821+ <packing>
3822+ <property name="expand">False</property>
3823+ <property name="homogeneous">True</property>
3824+ </packing>
3825+ </child>
3826+
3827+ <child>
3828+ <widget class="GtkToolButton" id="new_note_button">
3829+ <property name="visible">True</property>
3830+ <property name="label" translatable="yes">New Note</property>
3831+ <property name="use_underline">True</property>
3832+ <property name="visible_horizontal">True</property>
3833+ <property name="visible_vertical">True</property>
3834+ <property name="is_important">False</property>
3835+ <signal name="clicked" handler="on_add_note"/>
3836+ </widget>
3837+ <packing>
3838+ <property name="expand">False</property>
3839+ <property name="homogeneous">True</property>
3840+ </packing>
3841+ </child>
3842+
3843+ <child>
3844+ <widget class="GtkToolButton" id="edit_b">
3845+ <property name="visible">True</property>
3846+ <property name="label" translatable="yes">Edit</property>
3847+ <property name="use_underline">True</property>
3848+ <property name="stock_id">gtk-edit</property>
3849+ <property name="visible_horizontal">True</property>
3850+ <property name="visible_vertical">True</property>
3851+ <property name="is_important">False</property>
3852+ <signal name="clicked" handler="on_edit_active_task"/>
3853+ </widget>
3854+ <packing>
3855+ <property name="expand">False</property>
3856+ <property name="homogeneous">True</property>
3857+ </packing>
3858+ </child>
3859+
3860+ <child>
3861+ <widget class="GtkSeparatorToolItem" id="&lt;separateur&gt;">
3862+ <property name="draw">True</property>
3863+ <property name="visible_horizontal">True</property>
3864+ <property name="visible_vertical">True</property>
3865+ </widget>
3866+ <packing>
3867+ <property name="expand">False</property>
3868+ <property name="homogeneous">True</property>
3869+ </packing>
3870+ </child>
3871+
3872+ <child>
3873+ <widget class="GtkToolButton" id="Undo">
3874+ <property name="label" translatable="yes">Undo</property>
3875+ <property name="use_underline">True</property>
3876+ <property name="stock_id">gtk-undo</property>
3877+ <property name="visible_horizontal">True</property>
3878+ <property name="visible_vertical">True</property>
3879+ <property name="is_important">False</property>
3880+ </widget>
3881+ <packing>
3882+ <property name="expand">False</property>
3883+ <property name="homogeneous">True</property>
3884+ </packing>
3885+ </child>
3886+
3887+ <child>
3888+ <widget class="GtkToolButton" id="Redo">
3889+ <property name="label" translatable="yes">Redo</property>
3890+ <property name="use_underline">True</property>
3891+ <property name="stock_id">gtk-redo</property>
3892+ <property name="visible_horizontal">True</property>
3893+ <property name="visible_vertical">True</property>
3894+ <property name="is_important">False</property>
3895+ </widget>
3896+ <packing>
3897+ <property name="expand">False</property>
3898+ <property name="homogeneous">True</property>
3899+ </packing>
3900+ </child>
3901+
3902+ <child>
3903+ <widget class="GtkSeparatorToolItem" id="toolbutton2">
3904+ <property name="visible">True</property>
3905+ <property name="draw">True</property>
3906+ <property name="visible_horizontal">True</property>
3907+ <property name="visible_vertical">True</property>
3908+ </widget>
3909+ <packing>
3910+ <property name="expand">False</property>
3911+ <property name="homogeneous">True</property>
3912+ </packing>
3913+ </child>
3914+
3915+ <child>
3916+ <widget class="GtkToolButton" id="mark_as_done_b">
3917+ <property name="visible">True</property>
3918+ <property name="label" translatable="yes">Mark as Done</property>
3919+ <property name="use_underline">True</property>
3920+ <property name="visible_horizontal">True</property>
3921+ <property name="visible_vertical">True</property>
3922+ <property name="is_important">False</property>
3923+ <signal name="clicked" handler="on_mark_as_done"/>
3924+ </widget>
3925+ <packing>
3926+ <property name="expand">False</property>
3927+ <property name="homogeneous">True</property>
3928+ </packing>
3929+ </child>
3930+
3931+ <child>
3932+ <widget class="GtkToolButton" id="dismiss">
3933+ <property name="visible">True</property>
3934+ <property name="label" translatable="yes">Dismiss</property>
3935+ <property name="use_underline">True</property>
3936+ <property name="visible_horizontal">True</property>
3937+ <property name="visible_vertical">True</property>
3938+ <property name="is_important">False</property>
3939+ <signal name="clicked" handler="on_dismiss_task"/>
3940+ </widget>
3941+ <packing>
3942+ <property name="expand">False</property>
3943+ <property name="homogeneous">True</property>
3944+ </packing>
3945+ </child>
3946+
3947+ <child>
3948+ <widget class="GtkSeparatorToolItem" id="toolbutton1">
3949+ <property name="visible">True</property>
3950+ <property name="draw">True</property>
3951+ <property name="visible_horizontal">True</property>
3952+ <property name="visible_vertical">True</property>
3953+ </widget>
3954+ <packing>
3955+ <property name="expand">False</property>
3956+ <property name="homogeneous">True</property>
3957+ </packing>
3958+ </child>
3959+
3960+ <child>
3961+ <widget class="GtkToggleToolButton" id="note_toggle">
3962+ <property name="visible">True</property>
3963+ <property name="label" translatable="yes">View Notes</property>
3964+ <property name="use_underline">True</property>
3965+ <property name="stock_id">gtk-file</property>
3966+ <property name="visible_horizontal">True</property>
3967+ <property name="visible_vertical">True</property>
3968+ <property name="is_important">False</property>
3969+ <property name="active">False</property>
3970+ <signal name="toggled" handler="on_note_toggled"/>
3971+ </widget>
3972+ <packing>
3973+ <property name="expand">False</property>
3974+ <property name="homogeneous">True</property>
3975+ </packing>
3976+ </child>
3977+
3978+ <child>
3979+ <widget class="GtkToggleToolButton" id="workview_toggle">
3980+ <property name="visible">True</property>
3981+ <property name="label" translatable="yes">Work View</property>
3982+ <property name="use_underline">True</property>
3983+ <property name="stock_id">gtk-index</property>
3984+ <property name="visible_horizontal">True</property>
3985+ <property name="visible_vertical">True</property>
3986+ <property name="is_important">False</property>
3987+ <property name="active">False</property>
3988+ <signal name="toggled" handler="on_workview_toggled"/>
3989+ </widget>
3990+ <packing>
3991+ <property name="expand">False</property>
3992+ <property name="homogeneous">True</property>
3993+ </packing>
3994+ </child>
3995+ </widget>
3996+ <packing>
3997+ <property name="padding">0</property>
3998+ <property name="expand">False</property>
3999+ <property name="fill">True</property>
4000+ </packing>
4001+ </child>
4002+
4003+ <child>
4004+ <widget class="GtkHPaned" id="hpaned1">
4005+ <property name="visible">True</property>
4006+ <property name="can_focus">True</property>
4007+ <property name="position">200</property>
4008+
4009+ <child>
4010+ <widget class="GtkVBox" id="sidebar">
4011+ <property name="homogeneous">False</property>
4012+ <property name="spacing">0</property>
4013+
4014+ <child>
4015+ <widget class="GtkHBox" id="hbox4">
4016+ <property name="visible">True</property>
4017+ <property name="homogeneous">False</property>
4018+ <property name="spacing">0</property>
4019+
4020+ <child>
4021+ <widget class="GtkImage" id="image8">
4022+ <property name="visible">True</property>
4023+ <property name="icon_size">4</property>
4024+ <property name="icon_name">gtg-tag</property>
4025+ <property name="xalign">0.5</property>
4026+ <property name="yalign">0.5</property>
4027+ <property name="xpad">5</property>
4028+ <property name="ypad">0</property>
4029+ </widget>
4030+ <packing>
4031+ <property name="padding">0</property>
4032+ <property name="expand">False</property>
4033+ <property name="fill">True</property>
4034+ </packing>
4035+ </child>
4036+
4037+ <child>
4038+ <widget class="GtkLabel" id="label4">
4039+ <property name="visible">True</property>
4040+ <property name="label" translatable="yes">Tags</property>
4041+ <property name="use_underline">False</property>
4042+ <property name="use_markup">False</property>
4043+ <property name="justify">GTK_JUSTIFY_LEFT</property>
4044+ <property name="wrap">False</property>
4045+ <property name="selectable">False</property>
4046+ <property name="xalign">0</property>
4047+ <property name="yalign">0.5</property>
4048+ <property name="xpad">0</property>
4049+ <property name="ypad">0</property>
4050+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
4051+ <property name="width_chars">-1</property>
4052+ <property name="single_line_mode">False</property>
4053+ <property name="angle">0</property>
4054+ </widget>
4055+ <packing>
4056+ <property name="padding">0</property>
4057+ <property name="expand">True</property>
4058+ <property name="fill">True</property>
4059+ </packing>
4060+ </child>
4061+
4062+ <child>
4063+ <widget class="GtkButton" id="button-sidebar-close">
4064+ <property name="visible">True</property>
4065+ <property name="can_focus">True</property>
4066+ <property name="relief">GTK_RELIEF_NONE</property>
4067+ <property name="focus_on_click">True</property>
4068+ <signal name="clicked" handler="on_view_sidebar_toggled"/>
4069+
4070+ <child>
4071+ <widget class="GtkImage" id="image9">
4072+ <property name="visible">True</property>
4073+ <property name="stock">gtk-close</property>
4074+ <property name="icon_size">1</property>
4075+ <property name="xalign">0.5</property>
4076+ <property name="yalign">0.5</property>
4077+ <property name="xpad">0</property>
4078+ <property name="ypad">0</property>
4079+ </widget>
4080+ </child>
4081+ </widget>
4082+ <packing>
4083+ <property name="padding">0</property>
4084+ <property name="expand">False</property>
4085+ <property name="fill">True</property>
4086+ </packing>
4087+ </child>
4088+ </widget>
4089+ <packing>
4090+ <property name="padding">0</property>
4091+ <property name="expand">False</property>
4092+ <property name="fill">True</property>
4093+ </packing>
4094+ </child>
4095+
4096+ <child>
4097+ <widget class="GtkScrolledWindow" id="sidebar-scroll">
4098+ <property name="visible">True</property>
4099+ <property name="can_focus">True</property>
4100+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
4101+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
4102+ <property name="shadow_type">GTK_SHADOW_IN</property>
4103+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
4104+
4105+ <child>
4106+ <widget class="GtkTreeView" id="tag_tview">
4107+ <property name="visible">True</property>
4108+ <property name="can_focus">True</property>
4109+ <property name="headers_visible">True</property>
4110+ <property name="rules_hint">False</property>
4111+ <property name="reorderable">False</property>
4112+ <property name="enable_search">True</property>
4113+ <property name="fixed_height_mode">False</property>
4114+ <property name="hover_selection">False</property>
4115+ <property name="hover_expand">False</property>
4116+ <signal name="button_press_event" handler="on_tag_treeview_button_press_event"/>
4117+ <signal name="row_activated" handler="on_select_tag"/>
4118+ <signal name="cursor_changed" handler="on_select_tag"/>
4119+ </widget>
4120+ </child>
4121+ </widget>
4122+ <packing>
4123+ <property name="padding">0</property>
4124+ <property name="expand">True</property>
4125+ <property name="fill">True</property>
4126+ </packing>
4127+ </child>
4128+ </widget>
4129+ <packing>
4130+ <property name="shrink">True</property>
4131+ <property name="resize">True</property>
4132+ </packing>
4133+ </child>
4134+
4135+ <child>
4136+ <widget class="GtkVBox" id="vbox2">
4137+ <property name="visible">True</property>
4138+ <property name="homogeneous">False</property>
4139+ <property name="spacing">0</property>
4140+
4141+ <child>
4142+ <widget class="GtkHBox" id="quickadd_pane">
4143+ <property name="visible">True</property>
4144+ <property name="homogeneous">False</property>
4145+ <property name="spacing">0</property>
4146+
4147+ <child>
4148+ <widget class="GtkEntry" id="quickadd_field">
4149+ <property name="visible">True</property>
4150+ <property name="can_default">True</property>
4151+ <property name="can_focus">True</property>
4152+ <property name="has_focus">True</property>
4153+ <property name="editable">True</property>
4154+ <property name="visibility">True</property>
4155+ <property name="max_length">0</property>
4156+ <property name="text" translatable="yes"></property>
4157+ <property name="has_frame">True</property>
4158+ <property name="invisible_char">â—Ź</property>
4159+ <property name="activates_default">False</property>
4160+ <signal name="activate" handler="on_quickadd_field_activate"/>
4161+ </widget>
4162+ <packing>
4163+ <property name="padding">0</property>
4164+ <property name="expand">True</property>
4165+ <property name="fill">True</property>
4166+ </packing>
4167+ </child>
4168+
4169+ <child>
4170+ <widget class="GtkButton" id="button1">
4171+ <property name="visible">True</property>
4172+ <property name="can_focus">True</property>
4173+ <property name="label">gtk-add</property>
4174+ <property name="use_stock">True</property>
4175+ <property name="relief">GTK_RELIEF_NORMAL</property>
4176+ <property name="focus_on_click">True</property>
4177+ <signal name="clicked" handler="on_quickadd_button_activate"/>
4178+ </widget>
4179+ <packing>
4180+ <property name="padding">0</property>
4181+ <property name="expand">False</property>
4182+ <property name="fill">False</property>
4183+ </packing>
4184+ </child>
4185+ </widget>
4186+ <packing>
4187+ <property name="padding">2</property>
4188+ <property name="expand">False</property>
4189+ <property name="fill">False</property>
4190+ </packing>
4191+ </child>
4192+
4193+ <child>
4194+ <widget class="GtkVPaned" id="vpaned1">
4195+ <property name="visible">True</property>
4196+ <property name="can_focus">True</property>
4197+ <property name="position">330</property>
4198+
4199+ <child>
4200+ <widget class="GtkScrolledWindow" id="main_pane">
4201+ <property name="visible">True</property>
4202+ <property name="can_focus">True</property>
4203+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
4204+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
4205+ <property name="shadow_type">GTK_SHADOW_NONE</property>
4206+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
4207+
4208+ <child>
4209+ <widget class="GtkTreeView" id="task_tview">
4210+ <property name="visible">True</property>
4211+ <property name="can_focus">True</property>
4212+ <property name="headers_visible">True</property>
4213+ <property name="rules_hint">True</property>
4214+ <property name="reorderable">True</property>
4215+ <property name="enable_search">False</property>
4216+ <property name="fixed_height_mode">False</property>
4217+ <property name="hover_selection">False</property>
4218+ <property name="hover_expand">False</property>
4219+ <signal name="button_press_event" handler="on_task_treeview_button_press_event"/>
4220+ <signal name="key_press_event" handler="on_task_treeview_key_press_event"/>
4221+ <signal name="row_activated" handler="on_edit_active_task"/>
4222+ <signal name="cursor_changed" handler="on_task_tview_cursor_changed"/>
4223+ </widget>
4224+ </child>
4225+ </widget>
4226+ <packing>
4227+ <property name="shrink">True</property>
4228+ <property name="resize">True</property>
4229+ </packing>
4230+ </child>
4231+
4232+ <child>
4233+ <widget class="GtkScrolledWindow" id="closed_pane">
4234+ <property name="height_request">200</property>
4235+ <property name="can_focus">True</property>
4236+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
4237+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
4238+ <property name="shadow_type">GTK_SHADOW_NONE</property>
4239+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
4240+
4241+ <child>
4242+ <widget class="GtkTreeView" id="taskdone_tview">
4243+ <property name="visible">True</property>
4244+ <property name="can_focus">True</property>
4245+ <property name="headers_visible">True</property>
4246+ <property name="rules_hint">True</property>
4247+ <property name="reorderable">False</property>
4248+ <property name="enable_search">True</property>
4249+ <property name="fixed_height_mode">False</property>
4250+ <property name="hover_selection">False</property>
4251+ <property name="hover_expand">False</property>
4252+ <signal name="button_press_event" handler="on_closed_task_treeview_button_press_event"/>
4253+ <signal name="key_press_event" handler="on_closed_task_treeview_key_press_event"/>
4254+ <signal name="row_activated" handler="on_edit_done_task"/>
4255+ </widget>
4256+ </child>
4257+ </widget>
4258+ <packing>
4259+ <property name="shrink">True</property>
4260+ <property name="resize">True</property>
4261+ </packing>
4262+ </child>
4263+ </widget>
4264+ <packing>
4265+ <property name="padding">0</property>
4266+ <property name="expand">True</property>
4267+ <property name="fill">True</property>
4268+ </packing>
4269+ </child>
4270+ </widget>
4271+ <packing>
4272+ <property name="shrink">True</property>
4273+ <property name="resize">True</property>
4274+ </packing>
4275+ </child>
4276+ </widget>
4277+ <packing>
4278+ <property name="padding">0</property>
4279+ <property name="expand">True</property>
4280+ <property name="fill">True</property>
4281+ </packing>
4282+ </child>
4283+
4284+ <child>
4285+ <widget class="GtkStatusbar" id="statusbar1">
4286+ <property name="visible">True</property>
4287+ <property name="has_resize_grip">True</property>
4288+ </widget>
4289+ <packing>
4290+ <property name="padding">0</property>
4291+ <property name="expand">False</property>
4292+ <property name="fill">True</property>
4293+ </packing>
4294+ </child>
4295+ </widget>
4296+ </child>
4297+</widget>
4298+
4299+<widget class="GtkDialog" id="confirm_delete">
4300+ <property name="border_width">5</property>
4301+ <property name="title" translatable="yes">Confirm task deletion</property>
4302+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
4303+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
4304+ <property name="modal">False</property>
4305+ <property name="resizable">True</property>
4306+ <property name="destroy_with_parent">False</property>
4307+ <property name="decorated">True</property>
4308+ <property name="skip_taskbar_hint">False</property>
4309+ <property name="skip_pager_hint">False</property>
4310+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
4311+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
4312+ <property name="focus_on_map">True</property>
4313+ <property name="urgency_hint">False</property>
4314+ <property name="has_separator">False</property>
4315+ <signal name="close" handler="on_delete_cancel"/>
4316+
4317+ <child internal-child="vbox">
4318+ <widget class="GtkVBox" id="dialog-vbox1">
4319+ <property name="visible">True</property>
4320+ <property name="homogeneous">False</property>
4321+ <property name="spacing">2</property>
4322+
4323+ <child internal-child="action_area">
4324+ <widget class="GtkHButtonBox" id="dialog-action_area1">
4325+ <property name="visible">True</property>
4326+ <property name="layout_style">GTK_BUTTONBOX_END</property>
4327+
4328+ <child>
4329+ <widget class="GtkButton" id="cancel">
4330+ <property name="visible">True</property>
4331+ <property name="can_focus">True</property>
4332+ <property name="relief">GTK_RELIEF_NORMAL</property>
4333+ <property name="focus_on_click">True</property>
4334+ <property name="response_id">0</property>
4335+ <signal name="released" handler="on_delete_cancel"/>
4336+
4337+ <child>
4338+ <widget class="GtkHBox" id="hbox1">
4339+ <property name="visible">True</property>
4340+ <property name="homogeneous">False</property>
4341+ <property name="spacing">0</property>
4342+
4343+ <child>
4344+ <widget class="GtkImage" id="image6">
4345+ <property name="visible">True</property>
4346+ <property name="stock">gtk-cancel</property>
4347+ <property name="icon_size">4</property>
4348+ <property name="xalign">0.5</property>
4349+ <property name="yalign">0.5</property>
4350+ <property name="xpad">0</property>
4351+ <property name="ypad">0</property>
4352+ </widget>
4353+ <packing>
4354+ <property name="padding">0</property>
4355+ <property name="expand">True</property>
4356+ <property name="fill">True</property>
4357+ </packing>
4358+ </child>
4359+
4360+ <child>
4361+ <widget class="GtkLabel" id="label2">
4362+ <property name="visible">True</property>
4363+ <property name="label" translatable="yes">_Keep selected task</property>
4364+ <property name="use_underline">True</property>
4365+ <property name="use_markup">False</property>
4366+ <property name="justify">GTK_JUSTIFY_LEFT</property>
4367+ <property name="wrap">False</property>
4368+ <property name="selectable">False</property>
4369+ <property name="xalign">0</property>
4370+ <property name="yalign">0.5</property>
4371+ <property name="xpad">0</property>
4372+ <property name="ypad">0</property>
4373+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
4374+ <property name="width_chars">-1</property>
4375+ <property name="single_line_mode">False</property>
4376+ <property name="angle">0</property>
4377+ </widget>
4378+ <packing>
4379+ <property name="padding">0</property>
4380+ <property name="expand">True</property>
4381+ <property name="fill">True</property>
4382+ </packing>
4383+ </child>
4384+ </widget>
4385+ </child>
4386+ </widget>
4387+ </child>
4388+
4389+ <child>
4390+ <widget class="GtkButton" id="delete">
4391+ <property name="visible">True</property>
4392+ <property name="can_focus">True</property>
4393+ <property name="relief">GTK_RELIEF_NORMAL</property>
4394+ <property name="focus_on_click">True</property>
4395+ <property name="response_id">0</property>
4396+ <signal name="activate" handler="on_delete_confirm"/>
4397+ <signal name="released" handler="on_delete_confirm"/>
4398+
4399+ <child>
4400+ <widget class="GtkHBox" id="hbox2">
4401+ <property name="visible">True</property>
4402+ <property name="homogeneous">False</property>
4403+ <property name="spacing">0</property>
4404+
4405+ <child>
4406+ <widget class="GtkImage" id="image7">
4407+ <property name="visible">True</property>
4408+ <property name="stock">gtk-delete</property>
4409+ <property name="icon_size">4</property>
4410+ <property name="xalign">0.5</property>
4411+ <property name="yalign">0.5</property>
4412+ <property name="xpad">0</property>
4413+ <property name="ypad">0</property>
4414+ </widget>
4415+ <packing>
4416+ <property name="padding">0</property>
4417+ <property name="expand">True</property>
4418+ <property name="fill">True</property>
4419+ </packing>
4420+ </child>
4421+
4422+ <child>
4423+ <widget class="GtkLabel" id="label3">
4424+ <property name="visible">True</property>
4425+ <property name="label" translatable="yes">Permanently _remove task</property>
4426+ <property name="use_underline">True</property>
4427+ <property name="use_markup">False</property>
4428+ <property name="justify">GTK_JUSTIFY_LEFT</property>
4429+ <property name="wrap">False</property>
4430+ <property name="selectable">False</property>
4431+ <property name="xalign">0.5</property>
4432+ <property name="yalign">0.5</property>
4433+ <property name="xpad">0</property>
4434+ <property name="ypad">0</property>
4435+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
4436+ <property name="width_chars">-1</property>
4437+ <property name="single_line_mode">False</property>
4438+ <property name="angle">0</property>
4439+ </widget>
4440+ <packing>
4441+ <property name="padding">0</property>
4442+ <property name="expand">True</property>
4443+ <property name="fill">True</property>
4444+ </packing>
4445+ </child>
4446+ </widget>
4447+ </child>
4448+ </widget>
4449+ </child>
4450+ </widget>
4451+ <packing>
4452+ <property name="padding">0</property>
4453+ <property name="expand">False</property>
4454+ <property name="fill">True</property>
4455+ <property name="pack_type">GTK_PACK_END</property>
4456+ </packing>
4457+ </child>
4458+
4459+ <child>
4460+ <widget class="GtkHBox" id="hbox3">
4461+ <property name="visible">True</property>
4462+ <property name="homogeneous">False</property>
4463+ <property name="spacing">0</property>
4464+
4465+ <child>
4466+ <widget class="GtkImage" id="image5">
4467+ <property name="visible">True</property>
4468+ <property name="stock">gtk-dialog-question</property>
4469+ <property name="icon_size">6</property>
4470+ <property name="xalign">0.5</property>
4471+ <property name="yalign">0.5</property>
4472+ <property name="xpad">0</property>
4473+ <property name="ypad">0</property>
4474+ </widget>
4475+ <packing>
4476+ <property name="padding">16</property>
4477+ <property name="expand">True</property>
4478+ <property name="fill">False</property>
4479+ </packing>
4480+ </child>
4481+
4482+ <child>
4483+ <widget class="GtkLabel" id="label1">
4484+ <property name="visible">True</property>
4485+ <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot; size=&quot;large&quot;&gt;Are you sure you want delete this task?&lt;/span&gt;
4486
4487 Deleting a task cannot be undone.</property>
4488- <property name="use_markup">True</property>
4489- <property name="wrap">True</property>
4490- </widget>
4491- <packing>
4492- <property name="padding">16</property>
4493- <property name="position">1</property>
4494- </packing>
4495- </child>
4496- </widget>
4497- <packing>
4498- <property name="padding">16</property>
4499- <property name="position">1</property>
4500- </packing>
4501- </child>
4502- <child internal-child="action_area">
4503- <widget class="GtkHButtonBox" id="dialog-action_area1">
4504- <property name="visible">True</property>
4505- <property name="layout_style">GTK_BUTTONBOX_END</property>
4506- <child>
4507- <widget class="GtkButton" id="cancel">
4508- <property name="visible">True</property>
4509- <property name="can_focus">True</property>
4510- <property name="receives_default">True</property>
4511- <property name="response_id">0</property>
4512- <signal name="released" handler="on_delete_cancel"/>
4513- <child>
4514- <widget class="GtkHBox" id="hbox1">
4515- <property name="visible">True</property>
4516- <child>
4517- <widget class="GtkImage" id="image6">
4518- <property name="visible">True</property>
4519- <property name="stock">gtk-cancel</property>
4520- </widget>
4521- </child>
4522- <child>
4523- <widget class="GtkLabel" id="label2">
4524- <property name="visible">True</property>
4525- <property name="xalign">0</property>
4526- <property name="label" translatable="yes">_Keep selected task</property>
4527- <property name="use_underline">True</property>
4528- </widget>
4529- <packing>
4530- <property name="position">1</property>
4531- </packing>
4532- </child>
4533- </widget>
4534- </child>
4535- </widget>
4536- <packing>
4537- <property name="expand">False</property>
4538- <property name="fill">False</property>
4539- </packing>
4540- </child>
4541- <child>
4542- <widget class="GtkButton" id="delete">
4543- <property name="visible">True</property>
4544- <property name="can_focus">True</property>
4545- <property name="receives_default">True</property>
4546- <property name="response_id">0</property>
4547- <signal name="activate" handler="on_delete_confirm"/>
4548- <signal name="released" handler="on_delete_confirm"/>
4549- <child>
4550- <widget class="GtkHBox" id="hbox2">
4551- <property name="visible">True</property>
4552- <child>
4553- <widget class="GtkImage" id="image7">
4554- <property name="visible">True</property>
4555- <property name="stock">gtk-delete</property>
4556- </widget>
4557- </child>
4558- <child>
4559- <widget class="GtkLabel" id="label3">
4560- <property name="visible">True</property>
4561- <property name="label" translatable="yes">Permanently _remove task</property>
4562- <property name="use_underline">True</property>
4563- </widget>
4564- <packing>
4565- <property name="position">1</property>
4566- </packing>
4567- </child>
4568- </widget>
4569- </child>
4570- </widget>
4571- <packing>
4572- <property name="expand">False</property>
4573- <property name="fill">False</property>
4574- <property name="position">1</property>
4575- </packing>
4576- </child>
4577- </widget>
4578- <packing>
4579- <property name="expand">False</property>
4580- <property name="pack_type">GTK_PACK_END</property>
4581- </packing>
4582- </child>
4583- </widget>
4584- </child>
4585- </widget>
4586- <widget class="GtkMenu" id="ProjectContextMenu">
4587- <property name="visible">True</property>
4588- <child>
4589- <widget class="GtkImageMenuItem" id="edit_item">
4590- <property name="visible">True</property>
4591- <property name="label">gtk-edit</property>
4592- <property name="use_underline">True</property>
4593- <property name="use_stock">True</property>
4594- <signal name="activate" handler="on_edit_item_activate"/>
4595- </widget>
4596- </child>
4597- <child>
4598- <widget class="GtkImageMenuItem" id="delete_item">
4599- <property name="visible">True</property>
4600- <property name="label">gtk-delete</property>
4601- <property name="use_underline">True</property>
4602- <property name="use_stock">True</property>
4603- <signal name="activate" handler="on_delete_item_activate"/>
4604- </widget>
4605- </child>
4606- </widget>
4607- <widget class="GtkMenu" id="TagContextMenu">
4608- <property name="visible">True</property>
4609- <property name="no_show_all">True</property>
4610- <child>
4611- <widget class="GtkImageMenuItem" id="colorchooser">
4612- <property name="visible">True</property>
4613- <property name="label">gtk-select-color</property>
4614- <property name="use_underline">True</property>
4615- <property name="use_stock">True</property>
4616- <signal name="activate" handler="on_colorchooser_activate"/>
4617- </widget>
4618- </child>
4619- <child>
4620- <widget class="GtkCheckMenuItem" id="nonworkviewtag">
4621- <property name="visible">True</property>
4622- <property name="label" translatable="yes">Tag is displayed in the workview</property>
4623- <property name="use_underline">True</property>
4624- <property name="active">True</property>
4625- <signal name="toggled" handler="on_nonworkviewtag_toggled"/>
4626- </widget>
4627- </child>
4628- </widget>
4629- <widget class="GtkColorSelectionDialog" id="ColorChooser">
4630- <property name="border_width">5</property>
4631- <property name="title" translatable="yes">Choose a color</property>
4632- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
4633- <property name="type_hint">GDK_WINDOW_TYPE_HINT_MENU</property>
4634- <signal name="response" handler="on_color_response"/>
4635- <child internal-child="color_selection">
4636- <widget class="GtkColorSelection" id="colorsel-color_selection1">
4637- <property name="visible">True</property>
4638- <property name="border_width">5</property>
4639- <property name="current_color">#ffffffffffff</property>
4640- <child>
4641- <placeholder/>
4642- </child>
4643- <child>
4644- <placeholder/>
4645- </child>
4646- </widget>
4647- </child>
4648- <child internal-child="help_button">
4649- <widget class="GtkButton" id="colorsel-help_button1">
4650- <property name="visible">True</property>
4651- <property name="can_focus">True</property>
4652- <property name="can_default">True</property>
4653- <property name="receives_default">True</property>
4654- <property name="label">gtk-help</property>
4655- <property name="use_stock">True</property>
4656- <property name="response_id">0</property>
4657- </widget>
4658- </child>
4659- <child internal-child="cancel_button">
4660- <widget class="GtkButton" id="colorsel-cancel_button1">
4661- <property name="visible">True</property>
4662- <property name="can_focus">True</property>
4663- <property name="can_default">True</property>
4664- <property name="receives_default">True</property>
4665- <property name="label">gtk-cancel</property>
4666- <property name="use_stock">True</property>
4667- <property name="response_id">0</property>
4668- </widget>
4669- </child>
4670- <child internal-child="ok_button">
4671- <widget class="GtkButton" id="colorsel-ok_button1">
4672- <property name="visible">True</property>
4673- <property name="can_focus">True</property>
4674- <property name="can_default">True</property>
4675- <property name="has_default">True</property>
4676- <property name="receives_default">True</property>
4677- <property name="label">gtk-ok</property>
4678- <property name="use_stock">True</property>
4679- <property name="response_id">0</property>
4680- </widget>
4681- </child>
4682- </widget>
4683- <widget class="GtkAboutDialog" id="aboutdialog1">
4684- <property name="border_width">5</property>
4685- <property name="title" translatable="yes">About GTG!</property>
4686- <property name="resizable">False</property>
4687- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
4688- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
4689- <property name="program_name">Getting Things Gnome!</property>
4690- <property name="copyright" translatable="yes">Copyrights© 2008, 2009 Lionel Dricot, Bertrand Rousseau</property>
4691- <property name="comments" translatable="yes">
4692+ <property name="use_underline">False</property>
4693+ <property name="use_markup">True</property>
4694+ <property name="justify">GTK_JUSTIFY_LEFT</property>
4695+ <property name="wrap">True</property>
4696+ <property name="selectable">False</property>
4697+ <property name="xalign">0.5</property>
4698+ <property name="yalign">0.5</property>
4699+ <property name="xpad">0</property>
4700+ <property name="ypad">0</property>
4701+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
4702+ <property name="width_chars">-1</property>
4703+ <property name="single_line_mode">False</property>
4704+ <property name="angle">0</property>
4705+ </widget>
4706+ <packing>
4707+ <property name="padding">16</property>
4708+ <property name="expand">True</property>
4709+ <property name="fill">True</property>
4710+ </packing>
4711+ </child>
4712+ </widget>
4713+ <packing>
4714+ <property name="padding">16</property>
4715+ <property name="expand">True</property>
4716+ <property name="fill">True</property>
4717+ </packing>
4718+ </child>
4719+ </widget>
4720+ </child>
4721+</widget>
4722+
4723+<widget class="GtkMenu" id="ProjectContextMenu">
4724+ <property name="visible">True</property>
4725+
4726+ <child>
4727+ <widget class="GtkImageMenuItem" id="edit_item">
4728+ <property name="visible">True</property>
4729+ <property name="label">gtk-edit</property>
4730+ <property name="use_stock">True</property>
4731+ <signal name="activate" handler="on_edit_item_activate"/>
4732+ </widget>
4733+ </child>
4734+
4735+ <child>
4736+ <widget class="GtkImageMenuItem" id="delete_item">
4737+ <property name="visible">True</property>
4738+ <property name="label">gtk-delete</property>
4739+ <property name="use_stock">True</property>
4740+ <signal name="activate" handler="on_delete_item_activate"/>
4741+ </widget>
4742+ </child>
4743+</widget>
4744+
4745+<widget class="GtkMenu" id="TagContextMenu">
4746+ <property name="visible">True</property>
4747+
4748+ <child>
4749+ <widget class="GtkImageMenuItem" id="colorchooser">
4750+ <property name="visible">True</property>
4751+ <property name="label">gtk-select-color</property>
4752+ <property name="use_stock">True</property>
4753+ <signal name="activate" handler="on_colorchooser_activate"/>
4754+ </widget>
4755+ </child>
4756+
4757+ <child>
4758+ <widget class="GtkCheckMenuItem" id="nonworkviewtag">
4759+ <property name="visible">True</property>
4760+ <property name="label" translatable="yes">Tag is displayed in the workview</property>
4761+ <property name="use_underline">True</property>
4762+ <property name="active">True</property>
4763+ <signal name="toggled" handler="on_nonworkviewtag_toggled"/>
4764+ </widget>
4765+ </child>
4766+</widget>
4767+
4768+<widget class="GtkColorSelectionDialog" id="ColorChooser">
4769+ <property name="border_width">5</property>
4770+ <property name="title" translatable="yes">Choose a color</property>
4771+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
4772+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
4773+ <property name="modal">False</property>
4774+ <property name="resizable">False</property>
4775+ <property name="destroy_with_parent">False</property>
4776+ <property name="decorated">True</property>
4777+ <property name="skip_taskbar_hint">False</property>
4778+ <property name="skip_pager_hint">False</property>
4779+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_MENU</property>
4780+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
4781+ <property name="focus_on_map">True</property>
4782+ <property name="urgency_hint">False</property>
4783+ <signal name="response" handler="on_color_response"/>
4784+
4785+ <child internal-child="cancel_button">
4786+ <widget class="GtkButton" id="colorsel-cancel_button1">
4787+ <property name="visible">True</property>
4788+ <property name="can_default">True</property>
4789+ <property name="can_focus">True</property>
4790+ <property name="label">gtk-cancel</property>
4791+ <property name="use_stock">True</property>
4792+ <property name="relief">GTK_RELIEF_NORMAL</property>
4793+ <property name="focus_on_click">True</property>
4794+ </widget>
4795+ </child>
4796+
4797+ <child internal-child="ok_button">
4798+ <widget class="GtkButton" id="colorsel-ok_button1">
4799+ <property name="visible">True</property>
4800+ <property name="can_default">True</property>
4801+ <property name="has_default">True</property>
4802+ <property name="can_focus">True</property>
4803+ <property name="label">gtk-ok</property>
4804+ <property name="use_stock">True</property>
4805+ <property name="relief">GTK_RELIEF_NORMAL</property>
4806+ <property name="focus_on_click">True</property>
4807+ </widget>
4808+ </child>
4809+
4810+ <child internal-child="help_button">
4811+ <widget class="GtkButton" id="colorsel-help_button1">
4812+ <property name="visible">True</property>
4813+ <property name="can_default">True</property>
4814+ <property name="can_focus">True</property>
4815+ <property name="label">gtk-help</property>
4816+ <property name="use_stock">True</property>
4817+ <property name="relief">GTK_RELIEF_NORMAL</property>
4818+ <property name="focus_on_click">True</property>
4819+ </widget>
4820+ </child>
4821+
4822+ <child internal-child="color_selection">
4823+ <widget class="GtkColorSelection" id="colorsel-color_selection1">
4824+ <property name="border_width">5</property>
4825+ <property name="visible">True</property>
4826+ <property name="has_opacity_control">False</property>
4827+ <property name="has_palette">False</property>
4828+
4829+ <child>
4830+ <placeholder/>
4831+ </child>
4832+
4833+ <child>
4834+ <placeholder/>
4835+ </child>
4836+ </widget>
4837+ <packing>
4838+ <property name="padding">0</property>
4839+ <property name="expand">True</property>
4840+ <property name="fill">True</property>
4841+ </packing>
4842+ </child>
4843+</widget>
4844+
4845+<widget class="GtkAboutDialog" id="aboutdialog1">
4846+ <property name="border_width">5</property>
4847+ <property name="destroy_with_parent">False</property>
4848+ <property name="name" translatable="yes">Application Name</property>
4849+ <property name="copyright" translatable="yes">Copyrights© 2008, 2009 Lionel Dricot, Bertrand Rousseau</property>
4850+ <property name="comments" translatable="yes">
4851 Getting Things Gnome! is an organizer for the GNOME desktop environment.</property>
4852- <property name="website_label" translatable="yes">GTG website</property>
4853- <property name="license" translatable="yes">Getting Things Gnome! is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
4854+ <property name="license" translatable="yes">Getting Things Gnome! is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
4855
4856 Getting Things Gnome! is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
4857
4858 You should have received a copy of the GNU General Public License along with Getting Things Gnome!; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</property>
4859- <property name="authors">Lionel Dricot (ploum@ploum.net),
4860+ <property name="wrap_license">True</property>
4861+ <property name="website_label" translatable="yes">GTG website</property>
4862+ <property name="authors">Lionel Dricot (ploum@ploum.net),
4863 Bertrand Rousseau (bertrand.rousseau@gmail.com)</property>
4864- <property name="logo_icon_name">gtg</property>
4865- <property name="wrap_license">True</property>
4866- <signal name="response" handler="on_about_close"/>
4867- <child internal-child="vbox">
4868- <widget class="GtkVBox" id="dialog-vbox2">
4869- <property name="visible">True</property>
4870- <property name="spacing">2</property>
4871- <child internal-child="action_area">
4872- <widget class="GtkHButtonBox" id="dialog-action_area2">
4873- <property name="visible">True</property>
4874- <property name="layout_style">GTK_BUTTONBOX_END</property>
4875- </widget>
4876- <packing>
4877- <property name="expand">False</property>
4878- <property name="pack_type">GTK_PACK_END</property>
4879- </packing>
4880- </child>
4881- </widget>
4882- </child>
4883- </widget>
4884- <widget class="GtkMenu" id="TaskContextMenu">
4885- <property name="visible">True</property>
4886- <child>
4887- <widget class="GtkImageMenuItem" id="tcm_add_subtask">
4888- <property name="visible">True</property>
4889- <property name="label">Add a subtask</property>
4890- <signal name="activate" handler="on_add_subtask"/>
4891- <child internal-child="image">
4892- <widget class="GtkImage" id="menu-item-image5">
4893- <property name="visible">True</property>
4894- <property name="pixel_size">16</property>
4895- <property name="icon_name">gtg-task-new</property>
4896- </widget>
4897- </child>
4898- </widget>
4899- </child>
4900- <child>
4901- <widget class="GtkImageMenuItem" id="tcm_edit">
4902- <property name="visible">True</property>
4903- <property name="label">gtk-edit</property>
4904- <property name="use_underline">True</property>
4905- <property name="use_stock">True</property>
4906- <signal name="activate" handler="on_edit_active_task"/>
4907- </widget>
4908- </child>
4909- <child>
4910- <widget class="GtkSeparatorMenuItem" id="separatormenuitem3">
4911- <property name="visible">True</property>
4912- </widget>
4913- </child>
4914- <child>
4915- <widget class="GtkImageMenuItem" id="tcm_mark_as_done">
4916- <property name="visible">True</property>
4917- <property name="label">Mark as _Done</property>
4918- <property name="use_underline">True</property>
4919- <signal name="activate" handler="on_mark_as_done"/>
4920- <child internal-child="image">
4921- <widget class="GtkImage" id="menu-item-image6">
4922- <property name="visible">True</property>
4923- <property name="pixel_size">16</property>
4924- <property name="icon_name">gtg-task-done</property>
4925- </widget>
4926- </child>
4927- </widget>
4928- </child>
4929- <child>
4930- <widget class="GtkImageMenuItem" id="tcm_dismiss">
4931- <property name="visible">True</property>
4932- <property name="label">D_ismiss</property>
4933- <property name="use_underline">True</property>
4934- <signal name="activate" handler="on_dismiss_task"/>
4935- <child internal-child="image">
4936- <widget class="GtkImage" id="menu-item-image7">
4937- <property name="visible">True</property>
4938- <property name="pixel_size">16</property>
4939- <property name="icon_name">gtg-task-dismiss</property>
4940- </widget>
4941- </child>
4942- </widget>
4943- </child>
4944- <child>
4945- <widget class="GtkImageMenuItem" id="tcm_delete">
4946- <property name="visible">True</property>
4947- <property name="label">gtk-delete</property>
4948- <property name="use_underline">True</property>
4949- <property name="use_stock">True</property>
4950- <signal name="activate" handler="on_delete_task"/>
4951- </widget>
4952- </child>
4953- </widget>
4954- <widget class="GtkMenu" id="ClosedTaskContextMenu">
4955- <property name="visible">True</property>
4956- <child>
4957- <widget class="GtkImageMenuItem" id="ctcm_edit">
4958- <property name="visible">True</property>
4959- <property name="label">gtk-edit</property>
4960- <property name="use_underline">True</property>
4961- <property name="use_stock">True</property>
4962- <signal name="activate" handler="on_edit_done_task"/>
4963- </widget>
4964- </child>
4965- <child>
4966- <widget class="GtkSeparatorMenuItem" id="separatormenuitem4">
4967- <property name="visible">True</property>
4968- </widget>
4969- </child>
4970- <child>
4971- <widget class="GtkImageMenuItem" id="ctcm_mark_as_not_done">
4972- <property name="visible">True</property>
4973- <property name="label" translatable="yes">Mark as Not Done</property>
4974- <signal name="activate" handler="on_mark_as_done"/>
4975- <child internal-child="image">
4976- <widget class="GtkImage" id="menu-item-image8">
4977- <property name="visible">True</property>
4978- <property name="pixel_size">16</property>
4979- <property name="icon_name">gtg-task-undone</property>
4980- </widget>
4981- </child>
4982- </widget>
4983- </child>
4984- <child>
4985- <widget class="GtkImageMenuItem" id="ctcm_undismiss">
4986- <property name="visible">True</property>
4987- <property name="label" translatable="yes">Und_ismiss</property>
4988- <property name="use_underline">True</property>
4989- <signal name="activate" handler="on_dismiss_task"/>
4990- <child internal-child="image">
4991- <widget class="GtkImage" id="menu-item-image9">
4992- <property name="visible">True</property>
4993- <property name="pixel_size">16</property>
4994- <property name="icon_name">gtg-task-undismiss</property>
4995- </widget>
4996- </child>
4997- </widget>
4998- </child>
4999- <child>
5000- <widget class="GtkImageMenuItem" id="ctcm_delete">
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: