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
=== modified file 'AUTHORS'
--- AUTHORS 2009-07-24 06:16:28 +0000
+++ AUTHORS 2009-07-29 15:14:01 +0000
@@ -34,3 +34,4 @@
34* Ryan Paul <segphault@arstechnica.com>34* Ryan Paul <segphault@arstechnica.com>
35* Jonathan Lange <jml@mumak.net>35* Jonathan Lange <jml@mumak.net>
36* Kevin Mehall <km@kevinmehall.net>36* Kevin Mehall <km@kevinmehall.net>
37* Paulo Cabido <paulo.cabido@gmail.com>
3738
=== modified file 'GTG/__init__.py'
--- GTG/__init__.py 2009-07-23 20:14:01 +0000
+++ GTG/__init__.py 2009-07-29 15:14:01 +0000
@@ -68,3 +68,9 @@
68 DATA_DIR = DIST_ROOTDIR68 DATA_DIR = DIST_ROOTDIR
69else:69else:
70 DATA_DIR = os.path.join(LOCAL_ROOTDIR,'data')70 DATA_DIR = os.path.join(LOCAL_ROOTDIR,'data')
71
72#GTG plugin dir setup
73if not os.path.isdir( os.path.join(LOCAL_ROOTDIR,'GTG/plugins/') ) :
74 PLUGIN_DIR = [DIST_ROOTDIR]
75else:
76 PLUGIN_DIR = [os.path.join(LOCAL_ROOTDIR,'GTG/plugins/')]
7177
=== added directory 'GTG/core/plugins'
=== added file 'GTG/core/plugins/__init__.py'
--- GTG/core/plugins/__init__.py 1970-01-01 00:00:00 +0000
+++ GTG/core/plugins/__init__.py 2009-07-07 15:12:42 +0000
@@ -0,0 +1,28 @@
1# -*- coding: utf-8 -*-
2# -----------------------------------------------------------------------------
3# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
4# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
5#
6# This program is free software: you can redistribute it and/or modify it under
7# the terms of the GNU General Public License as published by the Free Software
8# Foundation, either version 3 of the License, or (at your option) any later
9# version.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14# details.
15#
16# You should have received a copy of the GNU General Public License along with
17# this program. If not, see <http://www.gnu.org/licenses/>.
18# -----------------------------------------------------------------------------
19
20
21#This is the tool package. It contains some useful function and tool
22#that could be useful for any part of GTG.
23
24import os
25
26class GnomeConfig :
27 current_rep = os.path.dirname(os.path.abspath(__file__))
28 GLADE_FILE = os.path.join(current_rep,"pluginmanager.glade")
029
=== added file 'GTG/core/plugins/api.py'
--- GTG/core/plugins/api.py 1970-01-01 00:00:00 +0000
+++ GTG/core/plugins/api.py 2009-07-28 00:41:33 +0000
@@ -0,0 +1,185 @@
1# -*- coding: utf-8 -*-
2# -----------------------------------------------------------------------------
3# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
4# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
5#
6# This program is free software: you can redistribute it and/or modify it under
7# the terms of the GNU General Public License as published by the Free Software
8# Foundation, either version 3 of the License, or (at your option) any later
9# version.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14# details.
15#
16# You should have received a copy of the GNU General Public License along with
17# this program. If not, see <http://www.gnu.org/licenses/>.
18# -----------------------------------------------------------------------------
19import gtk
20
21class PluginAPI:
22 def __init__(self, window, config, wTree, requester, taskview, workview_task_filter, \
23 tagpopup, tagview, task=None, textview=None):
24 # private vars
25 self.__window = window
26 self.config = config
27 self.__wTree = wTree
28 self.__requester = requester
29
30 self.taskview = taskview
31 self.__workview_task_filter = workview_task_filter
32
33 self.__tagpopup = tagpopup
34 self.tagview = tagview
35
36 if task:
37 self.task = task
38
39 if textview:
40 self.textview = textview
41
42 # adds items to the MenuBar of the Main Window (TaskBrowser)
43 def AddMenuItem(self, item):
44 self.__wTree.get_widget('menu_plugin').get_submenu().append(item)
45 item.show()
46
47 # removes the item from the MenuBar
48 def RemoveMenuItem(self, item):
49 try:
50 self.__wTree.get_widget('menu_plugin').get_submenu().remove(item)
51 except Exception, e:
52 print "Error removing menu item: %s" % e
53
54 def AddToolbarItem(self, item):
55 # calculates the number of items on the ToolBar and adds the item
56 # on the end
57 try:
58 i = 0
59 while self.__wTree.get_widget('task_tb').get_nth_item(i) is not None:
60 i = i + 1
61 self.__wTree.get_widget('task_tb').insert(item, i)
62 item.show()
63 return i
64 except Exception, e:
65 print "Error adding a toolbar item: %s" % e
66
67 def RemoveToolbarItem(self, item, n=None):
68 try:
69 if not n:
70 self.__wTree.get_widget('task_tb').remove(item)
71 else:
72 i = 0
73 while self.__wTree.get_widget('task_tb').get_nth_item(i) is not None:
74 if i == n:
75 self.__wTree.get_widget('task_tb').remove(self.__wTree.get_widget('task_tb').get_nth_item(i))
76 i = i + 1
77 except Exception, e:
78 print "Error removing a toolbar item: %s" % e
79
80 # adds items to the Task Menu
81 def AddTaskToolbarItem(self, item):
82 try:
83 i = 0
84 while self.__wTree.get_widget('task_tb1').get_nth_item(i) is not None:
85 i = i + 1
86 self.__wTree.get_widget('task_tb1').insert(item, i)
87 item.show()
88 except Exception, e:
89 print "Error adding a toolbar item in to the TaskEditor: %s" % e
90
91 # passes the requester to the plugin
92 def getRequester(self):
93 return self.__requester
94
95 # changes the tasks TreeStore
96 def changeTaskTreeStore(self, treestore):
97 task_tview = self.__wTree.get_widget("task_tview")
98 task_tview.set_model(treestore)
99
100 def get_all_tasks(self):
101 return self.__requester.get_tasks_list()
102
103 # this method returns the task by tid or the current task in case
104 # of the edit task window
105 # by default returns the current task, in other words, it's default action
106 # is to use with the onTaskOpened method
107 def get_task(self, tid=None):
108 if tid:
109 return self.__requester.get_task(tid)
110 else:
111 return self.task
112
113 # this method only works for the onTaskOpened method
114 def get_task_title(self):
115 return self.task.get_title()
116
117 # adds a tag, updated the text buffer, inserting the tag at the end of
118 # the task
119 # this method only works for the onTaskOpened method
120 def add_tag(self, tag):
121 self.task.add_tag("@" + tag)
122 #self.textview.insert_text("@" + tag)
123 self.textview.insert_tag("@" + tag)
124
125 # adds a attribute to a tag
126 # this method only works for the onTaskOpened method
127 def add_tag_attribute(self, tag, attrib_name, attrib_value):
128 try:
129 tags = self.task.get_tags()
130 for t in tags:
131 if t.get_name() == tag:
132 t.set_attribute(attrib_name, attrib_value)
133 return True
134 except:
135 return False
136
137 # pass all the tags to the plug-in
138 # this method only works for the onTaskOpened method
139 def get_tags(self):
140 return self.task.get_tags()
141
142 # this will allow plugins to use the textview properties
143 def get_textview(self):
144 return self.textview
145
146 # defines the child's parent window
147 def set_parent_window(self, child):
148 child.set_transient_for(self.__window)
149
150 # add's a menu to the tagpopup
151 def add_menu_tagpopup(self, item):
152 self.__tagpopup.append(item)
153 item.show()
154
155 def remove_menu_tagpopup(self, item):
156 self.__tagpopup.remove(item)
157
158 # get's the selected tag in the tag view
159 def get_tagpopup_tag(self):
160 selected = self.tagview.get_selection()
161 model, iter = selected.get_selected()
162 tag = model.get_value(iter, 0)
163 return tag
164
165 # returns the task view in the main window (task browser)
166 def get_taskview(self):
167 return self.taskview
168
169 # returns the selected task in the task view
170 def get_selected_task(self):
171 selected = self.taskview.get_selection()
172 model, iter = selected.get_selected()
173 if iter:
174 return self.__requester.get_task(model.get_value(iter, 0))
175 else:
176 return None
177
178 # returns the config object
179 def get_config(self):
180 return self.config
181
182 # add's a tid to the workview filter
183 def add_task_to_workview_filter(self, tid):
184 self.__workview_task_filter.append(tid)
185
0\ No newline at end of file186\ No newline at end of file
1187
=== added file 'GTG/core/plugins/engine.py'
--- GTG/core/plugins/engine.py 1970-01-01 00:00:00 +0000
+++ GTG/core/plugins/engine.py 2009-07-26 22:24:46 +0000
@@ -0,0 +1,152 @@
1# -*- coding: utf-8 -*-
2# -----------------------------------------------------------------------------
3# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
4# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
5#
6# This program is free software: you can redistribute it and/or modify it under
7# the terms of the GNU General Public License as published by the Free Software
8# Foundation, either version 3 of the License, or (at your option) any later
9# version.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14# details.
15#
16# You should have received a copy of the GNU General Public License along with
17# this program. If not, see <http://www.gnu.org/licenses/>.
18# -----------------------------------------------------------------------------
19
20import pkgutil
21import imp
22import os
23
24try:
25 import pygtk
26 pygtk.require("2.0")
27except:
28 sys.exit(1)
29try:
30 import gtk
31except:
32 sys.exit(1)
33
34
35
36# this class manages the plug-ins
37class PluginEngine:
38
39 # initializes the plug-in engine
40 # NOTE: the path has to be a list of paths
41 def __init__(self, plugin_path):
42 self.Plugins = []
43 self.plugin_path = plugin_path
44 self.initialized_plugins = []
45
46 # loads the plugins from the plugin dir
47 def LoadPlugins(self):
48 plugins = {}
49
50 # find all the folders in the plugin dir
51 plugin_dirs = []
52 plugin_dirs.append(self.plugin_path[0])
53 for f in os.listdir(self.plugin_path[0]):
54 if os.path.isdir(os.path.join(self.plugin_path[0], f)):
55 plugin_dirs.append(os.path.join(self.plugin_path[0], f))
56
57 try:
58 for loader, name, ispkg in pkgutil.iter_modules(plugin_dirs):
59 file, pathname, desc = imp.find_module(name, plugin_dirs)
60 plugins[name] = imp.load_module(name, file, pathname, desc)
61 except Exception, e:
62 print "Error: %s" % e
63
64 for name, plugin in plugins.items():
65 tmp_plgin = self.loadPlugin(plugin)
66 if tmp_plgin:
67 self.Plugins.append(tmp_plgin)
68
69 return self.Plugins
70
71 # checks if the module loaded is a plugin and gets the main class
72 def loadPlugin(self, plugin):
73 plugin_locals = plugin.__dict__
74 is_plugin = False
75 loaded_plugin = {}
76
77 # find the plugin class
78 for key in plugin_locals.keys():
79 try:
80 is_plugin = getattr(plugin_locals[key], 'PLUGIN_NAME', None)
81 except TypeError:
82 continue
83
84 # loads the plugin info
85 if is_plugin:
86 try:
87 loaded_plugin['plugin'] = plugin.__name__
88 loaded_plugin['class_name'] = key
89 loaded_plugin['class'] = plugin_locals[key]
90 loaded_plugin['name'] = plugin_locals[key].PLUGIN_NAME
91 loaded_plugin['version'] = plugin_locals[key].PLUGIN_VERSION
92 loaded_plugin['authors'] = plugin_locals[key].PLUGIN_AUTHORS
93 loaded_plugin['description'] = plugin_locals[key].PLUGIN_DESCRIPTION
94 loaded_plugin['state'] = plugin_locals[key].PLUGIN_ENABLED
95 loaded_plugin['instance'] = None
96 except:
97 continue
98
99 if not loaded_plugin:
100 return None
101 return loaded_plugin
102
103 def enabledPlugins(self, plugins):
104 pe = []
105 for p in plugins:
106 if p['state']:
107 pe.append(p['name'])
108 return pe
109
110 def disabledPlugins(self, plugins):
111 pd = []
112 for p in plugins:
113 if not p['state']:
114 pd.append(p['name'])
115 return pd
116
117 # activates the plugins
118 def activatePlugins(self, plugins, plugin_api):
119 for plgin in plugins:
120 if plgin['state']:
121 plgin['instance'] = plgin['class']()
122 plgin['instance'].activate(plugin_api)
123
124 # deactivate the enabled plugins
125 def deactivatePlugins(self, plugins, plugin_api):
126 for plgin in plugins:
127 if plgin['state']:
128 plgin['instance'].deactivate(plugin_api)
129
130 # loads the plug-in features for a task
131 def onTaskLoad(self, plugins, plugin_api):
132 for plgin in plugins:
133 if plgin['state']:
134 plgin['instance'].onTaskOpened(plugin_api)
135
136 # rechecks the plug-ins to see if any changes where done to the state
137 def recheckPlugins(self, plugins, plugin_api):
138 for plgin in plugins:
139 if plgin['instance'] != None and plgin['state'] == False:
140 try:
141 print "deactivating plugin: " + plgin['name']
142 plgin['instance'].deactivate(plugin_api)
143 plgin['instance'] = None
144 except Exception, e:
145 print "Error: %s" % e
146 elif plgin['instance'] == None and plgin['state'] == True:
147 try:
148 print "activating plugin: " + plgin['name']
149 plgin['instance'] = plgin['class']()
150 plgin['instance'].activate(plugin_api)
151 except Exception, e:
152 print "Error: %s" % e
0153
=== added file 'GTG/core/plugins/manager.py'
--- GTG/core/plugins/manager.py 1970-01-01 00:00:00 +0000
+++ GTG/core/plugins/manager.py 2009-07-17 02:01:48 +0000
@@ -0,0 +1,126 @@
1# -*- coding: utf-8 -*-
2# -----------------------------------------------------------------------------
3# Gettings Things Gnome! - a personnal organizer for the GNOME desktop
4# Copyright (c) 2008-2009 - Lionel Dricot & Bertrand Rousseau
5#
6# This program is free software: you can redistribute it and/or modify it under
7# the terms of the GNU General Public License as published by the Free Software
8# Foundation, either version 3 of the License, or (at your option) any later
9# version.
10#
11# This program is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14# details.
15#
16# You should have received a copy of the GNU General Public License along with
17# this program. If not, see <http://www.gnu.org/licenses/>.
18# -----------------------------------------------------------------------------
19
20from GTG.core.plugins import GnomeConfig
21# not being used
22#from GTG.core.plugins.engine import PluginEngine
23#from GTG.core.plugins.engine import PluginAPI
24
25import sys
26import gobject
27
28try:
29 import pygtk
30 pygtk.require("2.0")
31except:
32 sys.exit(1)
33try:
34 import gtk
35except:
36 sys.exit(1)
37
38class PluginManager:
39
40 def __init__(self, parent, plugins, pengine, plugin_api):
41 self.plugins = plugins
42 self.pengine = pengine
43 self.plugin_api = plugin_api
44 self.gladefile = GnomeConfig.GLADE_FILE
45 self.wTree = gtk.glade.XML(self.gladefile, "PluginManagerDialog")
46
47 self.dialog = self.wTree.get_widget("PluginManagerDialog")
48
49 # stuff to populate
50 self.lblPluginName = self.wTree.get_widget("lblPluginName")
51 self.lblPluginVersion = self.wTree.get_widget("lblPluginVersion")
52 self.lblPluginAuthors = self.wTree.get_widget("lblPluginAuthors")
53 self.txtPluginDescription = self.wTree.get_widget("txtPluginDescription")
54
55 #self.btnClose = self.wTree.get_widget("close_btn")
56 #self.btnClose.connect('clicked', self.close, None)
57
58 # liststore
59 self.PluginList = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING)
60 for plgin in self.plugins:
61 #print "file name :", name
62 self.PluginList.append([plgin['state'], plgin['name'], plgin['version']])
63 # end - liststore
64
65 # treeview
66 self.pluginTree = self.wTree.get_widget("pluginTree")
67
68 self.rendererToggle = gtk.CellRendererToggle()
69 self.rendererToggle.set_property('activatable', True)
70 self.rendererToggle.connect('toggled', self.colToggledClicked, self.PluginList)
71 self.colToggle = gtk.TreeViewColumn("Enabled", self.rendererToggle)
72 self.colToggle.add_attribute(self.rendererToggle, "active", 0)
73
74 self.rendererText = gtk.CellRendererText()
75 self.colName = gtk.TreeViewColumn("Name", self.rendererText, text=1)
76 self.colVersion = gtk.TreeViewColumn("Version", self.rendererText, text=2)
77
78 self.pluginTree.append_column(self.colToggle)
79 self.pluginTree.append_column(self.colName)
80 self.pluginTree.append_column(self.colVersion)
81
82 self.pluginTree.set_model(self.PluginList)
83 self.pluginTree.set_search_column(2)
84 # end - treeview
85
86 self.dialog.set_transient_for(parent)
87
88 # connect signals
89 self.dialog.connect("delete_event", self.close)
90 self.dialog.connect("response", self.close)
91 self.pluginTree.connect("cursor-changed", self.pluginExtraInfo, self.plugins)
92
93 self.dialog.show_all()
94
95
96 def close(self, widget, response=None):
97 # get the plugins that are going to be initialized and the ones
98 # that are going do be desabled
99 self.pengine.recheckPlugins(self.plugins, self.plugin_api)
100 self.dialog.destroy()
101 return True
102
103 #def delete(self, widget, response=None):
104 # self.dialog.destroy()
105 # return True
106
107 def colToggledClicked(self, cell, path, model):
108 model[path][0] = not model[path][0]
109 if path:
110 iter = model.get_iter(path)
111 for plgin in self.plugins:
112 if model[path][1] == plgin['name'] and model[path][2] == plgin['version']:
113 plgin['state'] = not plgin['state']
114
115 def pluginExtraInfo(self, treeview, plugins):
116 path = treeview.get_cursor()[0]
117 if path:
118 model = treeview.get_model()
119 iter = treeview.get_model().get_iter(path)
120
121 for plgin in plugins:
122 if (model.get_value(iter,1) == plgin['name']) and (model.get_value(iter,2) == plgin['version']):
123 self.lblPluginName.set_label("<b>" + plgin['name'] + "</b>")
124 self.lblPluginVersion.set_label(plgin['version'])
125 self.lblPluginAuthors.set_label(plgin['authors'])
126 self.txtPluginDescription.get_buffer().set_text(plgin['description'].replace("\n", " ").replace(r'\n', "\n"))
0127
=== added file 'GTG/core/plugins/pluginmanager.glade'
--- GTG/core/plugins/pluginmanager.glade 1970-01-01 00:00:00 +0000
+++ GTG/core/plugins/pluginmanager.glade 2009-07-07 15:12:42 +0000
@@ -0,0 +1,351 @@
1<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
3
4<glade-interface>
5<requires lib="gnome"/>
6
7<widget class="GtkDialog" id="PluginManagerDialog">
8 <property name="width_request">670</property>
9 <property name="height_request">410</property>
10 <property name="visible">True</property>
11 <property name="title" translatable="yes">Plugin Manager</property>
12 <property name="type">GTK_WINDOW_TOPLEVEL</property>
13 <property name="window_position">GTK_WIN_POS_NONE</property>
14 <property name="modal">False</property>
15 <property name="resizable">True</property>
16 <property name="destroy_with_parent">False</property>
17 <property name="decorated">True</property>
18 <property name="skip_taskbar_hint">False</property>
19 <property name="skip_pager_hint">False</property>
20 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
21 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
22 <property name="focus_on_map">True</property>
23 <property name="urgency_hint">False</property>
24 <property name="has_separator">True</property>
25
26 <child internal-child="vbox">
27 <widget class="GtkVBox" id="dialog-vbox2">
28 <property name="visible">True</property>
29 <property name="homogeneous">False</property>
30 <property name="spacing">0</property>
31
32 <child internal-child="action_area">
33 <widget class="GtkHButtonBox" id="dialog-action_area2">
34 <property name="visible">True</property>
35 <property name="layout_style">GTK_BUTTONBOX_END</property>
36
37 <child>
38 <widget class="GtkButton" id="close_btn">
39 <property name="visible">True</property>
40 <property name="can_default">True</property>
41 <property name="can_focus">True</property>
42 <property name="label">gtk-close</property>
43 <property name="use_stock">True</property>
44 <property name="relief">GTK_RELIEF_NORMAL</property>
45 <property name="focus_on_click">True</property>
46 <property name="response_id">-7</property>
47 </widget>
48 </child>
49 </widget>
50 <packing>
51 <property name="padding">0</property>
52 <property name="expand">False</property>
53 <property name="fill">True</property>
54 <property name="pack_type">GTK_PACK_END</property>
55 </packing>
56 </child>
57
58 <child>
59 <widget class="GtkHBox" id="hbox3">
60 <property name="visible">True</property>
61 <property name="homogeneous">False</property>
62 <property name="spacing">0</property>
63
64 <child>
65 <widget class="GtkScrolledWindow" id="scrolledwindow3">
66 <property name="width_request">240</property>
67 <property name="visible">True</property>
68 <property name="can_focus">True</property>
69 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
70 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
71 <property name="shadow_type">GTK_SHADOW_IN</property>
72 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
73
74 <child>
75 <widget class="GtkTreeView" id="pluginTree">
76 <property name="visible">True</property>
77 <property name="can_focus">True</property>
78 <property name="headers_visible">True</property>
79 <property name="rules_hint">False</property>
80 <property name="reorderable">False</property>
81 <property name="enable_search">True</property>
82 <property name="fixed_height_mode">False</property>
83 <property name="hover_selection">False</property>
84 <property name="hover_expand">False</property>
85 </widget>
86 </child>
87 </widget>
88 <packing>
89 <property name="padding">0</property>
90 <property name="expand">False</property>
91 <property name="fill">False</property>
92 </packing>
93 </child>
94
95 <child>
96 <widget class="GtkFrame" id="frame2">
97 <property name="visible">True</property>
98 <property name="label_xalign">0</property>
99 <property name="label_yalign">0.5</property>
100 <property name="shadow_type">GTK_SHADOW_NONE</property>
101
102 <child>
103 <widget class="GtkAlignment" id="alignment2">
104 <property name="visible">True</property>
105 <property name="xalign">0.5</property>
106 <property name="yalign">0.5</property>
107 <property name="xscale">1</property>
108 <property name="yscale">1</property>
109 <property name="top_padding">0</property>
110 <property name="bottom_padding">0</property>
111 <property name="left_padding">12</property>
112 <property name="right_padding">0</property>
113
114 <child>
115 <widget class="GtkVBox" id="vbox2">
116 <property name="visible">True</property>
117 <property name="homogeneous">False</property>
118 <property name="spacing">0</property>
119
120 <child>
121 <widget class="GtkHBox" id="hbox5">
122 <property name="visible">True</property>
123 <property name="homogeneous">False</property>
124 <property name="spacing">0</property>
125
126 <child>
127 <widget class="GtkLabel" id="label10">
128 <property name="visible">True</property>
129 <property name="label" translatable="yes">Version: </property>
130 <property name="use_underline">False</property>
131 <property name="use_markup">False</property>
132 <property name="justify">GTK_JUSTIFY_LEFT</property>
133 <property name="wrap">False</property>
134 <property name="selectable">False</property>
135 <property name="xalign">0</property>
136 <property name="yalign">0.5</property>
137 <property name="xpad">1</property>
138 <property name="ypad">4</property>
139 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
140 <property name="width_chars">-1</property>
141 <property name="single_line_mode">False</property>
142 <property name="angle">0</property>
143 </widget>
144 <packing>
145 <property name="padding">0</property>
146 <property name="expand">False</property>
147 <property name="fill">False</property>
148 </packing>
149 </child>
150
151 <child>
152 <widget class="GtkLabel" id="lblPluginVersion">
153 <property name="visible">True</property>
154 <property name="label" translatable="yes"></property>
155 <property name="use_underline">False</property>
156 <property name="use_markup">False</property>
157 <property name="justify">GTK_JUSTIFY_LEFT</property>
158 <property name="wrap">False</property>
159 <property name="selectable">False</property>
160 <property name="xalign">0</property>
161 <property name="yalign">0.5</property>
162 <property name="xpad">1</property>
163 <property name="ypad">4</property>
164 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
165 <property name="width_chars">-1</property>
166 <property name="single_line_mode">False</property>
167 <property name="angle">0</property>
168 </widget>
169 <packing>
170 <property name="padding">0</property>
171 <property name="expand">False</property>
172 <property name="fill">False</property>
173 </packing>
174 </child>
175 </widget>
176 <packing>
177 <property name="padding">0</property>
178 <property name="expand">False</property>
179 <property name="fill">False</property>
180 </packing>
181 </child>
182
183 <child>
184 <widget class="GtkHBox" id="hbox6">
185 <property name="visible">True</property>
186 <property name="homogeneous">False</property>
187 <property name="spacing">0</property>
188
189 <child>
190 <widget class="GtkLabel" id="label11">
191 <property name="visible">True</property>
192 <property name="label" translatable="yes">Authors: </property>
193 <property name="use_underline">False</property>
194 <property name="use_markup">False</property>
195 <property name="justify">GTK_JUSTIFY_LEFT</property>
196 <property name="wrap">False</property>
197 <property name="selectable">False</property>
198 <property name="xalign">0</property>
199 <property name="yalign">0.5</property>
200 <property name="xpad">1</property>
201 <property name="ypad">4</property>
202 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
203 <property name="width_chars">-1</property>
204 <property name="single_line_mode">False</property>
205 <property name="angle">0</property>
206 </widget>
207 <packing>
208 <property name="padding">0</property>
209 <property name="expand">False</property>
210 <property name="fill">False</property>
211 </packing>
212 </child>
213
214 <child>
215 <widget class="GtkLabel" id="lblPluginAuthors">
216 <property name="visible">True</property>
217 <property name="label" translatable="yes"></property>
218 <property name="use_underline">False</property>
219 <property name="use_markup">False</property>
220 <property name="justify">GTK_JUSTIFY_LEFT</property>
221 <property name="wrap">True</property>
222 <property name="selectable">False</property>
223 <property name="xalign">0.5</property>
224 <property name="yalign">0.5</property>
225 <property name="xpad">0</property>
226 <property name="ypad">0</property>
227 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
228 <property name="width_chars">-1</property>
229 <property name="single_line_mode">False</property>
230 <property name="angle">0</property>
231 </widget>
232 <packing>
233 <property name="padding">0</property>
234 <property name="expand">False</property>
235 <property name="fill">False</property>
236 </packing>
237 </child>
238 </widget>
239 <packing>
240 <property name="padding">0</property>
241 <property name="expand">False</property>
242 <property name="fill">False</property>
243 </packing>
244 </child>
245
246 <child>
247 <widget class="GtkLabel" id="label14">
248 <property name="visible">True</property>
249 <property name="label" translatable="yes">Description:</property>
250 <property name="use_underline">False</property>
251 <property name="use_markup">False</property>
252 <property name="justify">GTK_JUSTIFY_LEFT</property>
253 <property name="wrap">False</property>
254 <property name="selectable">False</property>
255 <property name="xalign">0</property>
256 <property name="yalign">0.5</property>
257 <property name="xpad">0</property>
258 <property name="ypad">4</property>
259 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
260 <property name="width_chars">-1</property>
261 <property name="single_line_mode">False</property>
262 <property name="angle">0</property>
263 </widget>
264 <packing>
265 <property name="padding">0</property>
266 <property name="expand">False</property>
267 <property name="fill">False</property>
268 </packing>
269 </child>
270
271 <child>
272 <widget class="GtkScrolledWindow" id="scrolledwindow4">
273 <property name="visible">True</property>
274 <property name="can_focus">True</property>
275 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
276 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
277 <property name="shadow_type">GTK_SHADOW_IN</property>
278 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
279
280 <child>
281 <widget class="GtkTextView" id="txtPluginDescription">
282 <property name="visible">True</property>
283 <property name="can_focus">True</property>
284 <property name="editable">False</property>
285 <property name="overwrite">False</property>
286 <property name="accepts_tab">True</property>
287 <property name="justification">GTK_JUSTIFY_LEFT</property>
288 <property name="wrap_mode">GTK_WRAP_WORD</property>
289 <property name="cursor_visible">False</property>
290 <property name="pixels_above_lines">0</property>
291 <property name="pixels_below_lines">0</property>
292 <property name="pixels_inside_wrap">0</property>
293 <property name="left_margin">0</property>
294 <property name="right_margin">0</property>
295 <property name="indent">0</property>
296 <property name="text" translatable="yes"></property>
297 </widget>
298 </child>
299 </widget>
300 <packing>
301 <property name="padding">0</property>
302 <property name="expand">True</property>
303 <property name="fill">True</property>
304 </packing>
305 </child>
306 </widget>
307 </child>
308 </widget>
309 </child>
310
311 <child>
312 <widget class="GtkLabel" id="lblPluginName">
313 <property name="visible">True</property>
314 <property name="label" translatable="yes">&lt;b&gt;No Plugin Selected&lt;/b&gt;</property>
315 <property name="use_underline">False</property>
316 <property name="use_markup">True</property>
317 <property name="justify">GTK_JUSTIFY_LEFT</property>
318 <property name="wrap">False</property>
319 <property name="selectable">False</property>
320 <property name="xalign">0.5</property>
321 <property name="yalign">0.5</property>
322 <property name="xpad">10</property>
323 <property name="ypad">4</property>
324 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
325 <property name="width_chars">-1</property>
326 <property name="single_line_mode">False</property>
327 <property name="angle">0</property>
328 </widget>
329 <packing>
330 <property name="type">label_item</property>
331 </packing>
332 </child>
333 </widget>
334 <packing>
335 <property name="padding">2</property>
336 <property name="expand">True</property>
337 <property name="fill">True</property>
338 </packing>
339 </child>
340 </widget>
341 <packing>
342 <property name="padding">0</property>
343 <property name="expand">True</property>
344 <property name="fill">True</property>
345 </packing>
346 </child>
347 </widget>
348 </child>
349</widget>
350
351</glade-interface>
0352
=== added directory 'GTG/plugins'
=== added directory 'GTG/plugins/geolocalized-tasks'
=== added file 'GTG/plugins/geolocalized-tasks/geolocalized-tasks.py'
--- GTG/plugins/geolocalized-tasks/geolocalized-tasks.py 1970-01-01 00:00:00 +0000
+++ GTG/plugins/geolocalized-tasks/geolocalized-tasks.py 2009-07-29 16:20:32 +0000
@@ -0,0 +1,572 @@
1# -*- coding: utf-8 -*-
2# Copyright (c) 2009 - Paulo Cabido <paulo.cabido@gmail.com>
3#
4# This program is free software: you can redistribute it and/or modify it under
5# the terms of the GNU General Public License as published by the Free Software
6# Foundation, either version 3 of the License, or (at your option) any later
7# version.
8#
9# This program is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12# details.
13#
14# You should have received a copy of the GNU General Public License along with
15# this program. If not, see <http://www.gnu.org/licenses/>.
16
17import gtk, pygtk
18import os, sys
19from time import sleep
20
21from xdg.BaseDirectory import *
22from configobj import ConfigObj
23
24import Geoclue
25
26import clutter, cluttergtk
27import champlain, champlaingtk
28
29# IMPORTANT This add's the plugin's path to python sys path
30sys.path.insert(0,os.path.dirname(os.path.abspath(__file__)))
31from marker import MarkerLayer
32
33
34from GTG.core.plugins.engine import PluginEngine
35
36class geolocalizedTasks:
37 PLUGIN_NAME = 'Geolocalized Tasks'
38 PLUGIN_AUTHORS = 'Paulo Cabido <paulo.cabido@gmail.com>'
39 PLUGIN_VERSION = '0.1'
40 PLUGIN_DESCRIPTION = 'This plugin adds geolocalized tasks to GTG!.\n \
41 WARNING: This plugin is still heavy development.'
42
43 PLUGIN_ENABLED = False
44
45 def __init__(self):
46 self.geoclue = Geoclue.DiscoverLocation()
47 self.geoclue.init()
48 self.location = self.geoclue.get_location_info()
49
50 self.plugin_path = os.path.dirname(os.path.abspath(__file__))
51 self.glade_file = os.path.join(self.plugin_path, "geolocalized.glade")
52
53 # the preference menu for the plugin
54 self.menu_item = gtk.MenuItem("Geolocalized-tasks Preferences")
55
56 # toolbar button for the new Location view
57 # create the pixbuf with the icon and it's size.
58 # 24,24 is the TaskEditor's toolbar icon size
59 image_geolocalization_path = os.path.join(self.plugin_path, "icons/hicolor/24x24/geolocalization.png")
60 pixbuf_geolocalization = gtk.gdk.pixbuf_new_from_file_at_size(image_geolocalization_path, 24, 24)
61
62 image_assign_location_path = os.path.join(self.plugin_path, "icons/hicolor/16x16/assign-location.png")
63 pixbug_assign_location = gtk.gdk.pixbuf_new_from_file_at_size(image_assign_location_path, 16, 16)
64
65 # create the image and associate the pixbuf
66 self.icon_geolocalization = gtk.Image()
67 self.icon_geolocalization.set_from_pixbuf(pixbuf_geolocalization)
68 self.icon_geolocalization.show()
69
70 image_assign_location = gtk.Image()
71 image_assign_location.set_from_pixbuf(pixbug_assign_location)
72 image_assign_location.show()
73
74 # the menu intem for the tag context
75 self.context_item = gtk.ImageMenuItem("Assign a location to this tag")
76 self.context_item.set_image(image_assign_location)
77 # TODO: add a short cut to the menu
78
79 # toolbar button for the location_view
80 self.btn_location_view = gtk.ToggleToolButton()
81 self.btn_location_view.set_icon_widget(self.icon_geolocalization)
82 self.btn_location_view.set_label("Location View")
83
84 self.PROXIMITY_FACTOR = 5 # 5 km
85 self.LOCATION_ACCURACY = 3 # Locality
86 self.LOCATION_DETERMINATION_METHOD = ["network", "gps", "cellphone"]
87 #for provider in self.geoclue.get_available_providers():
88 # if provider['position'] and (provider['provider'] != "Example Provider" and provider['provider'] != "Plazes"):
89 # self.LOCATION_DETERMINATION_METHOD.append(provider["provider"])
90
91
92
93 def activate(self, plugin_api):
94 self.menu_item.connect('activate', self.on_geolocalized_preferences, plugin_api)
95 plugin_api.AddMenuItem(self.menu_item)
96
97 self.context_item.connect('activate', self.on_contextmenu_tag_location, plugin_api)
98 plugin_api.add_menu_tagpopup(self.context_item)
99
100 # get the user settings from the config file
101 self.config = plugin_api.get_config()
102 if self.config.has_key("geolocalized-tasks"):
103 if self.config["geolocalized-tasks"].has_key("proximity_factor"):
104 self.PROXIMITY_FACTOR = self.config["geolocalized-tasks"]["proximity_factor"]
105
106 if self.config["geolocalized-tasks"].has_key("accuracy"):
107 self.LOCATION_ACCURACY = self.config["geolocalized-tasks"]["accuracy"]
108
109 if self.config["geolocalized-tasks"].has_key("location_determination_method"):
110 self.LOCATION_DETERMINATION_METHOD = self.config["geolocalized-tasks"]["location_determination_method"]
111
112 # filter the tasks location for the workview
113 self.filter_workview_by_location(plugin_api)
114
115 def deactivate(self, plugin_api):
116 plugin_api.RemoveMenuItem(self.menu_item)
117 plugin_api.remove_menu_tagpopup(self.context_item)
118 #plugin_api.RemoveToolbarItem(None, self.seperator_location_view)
119
120 self.config["geolocalized-tasks"] = {}
121 self.config["geolocalized-tasks"]["proximity_factor"] = self.PROXIMITY_FACTOR
122 self.config["geolocalized-tasks"]["accuracy"] = self.LOCATION_ACCURACY
123 self.config["geolocalized-tasks"]["location_determination_method"] = self.LOCATION_DETERMINATION_METHOD
124
125 def onTaskOpened(self, plugin_api):
126 plugin_api.AddTaskToolbarItem(gtk.SeparatorToolItem())
127
128 btn_set_location = gtk.ToolButton()
129 btn_set_location.set_icon_widget(self.icon_geolocalization)
130 btn_set_location.set_label("Set/View location")
131 btn_set_location.connect('clicked', self.set_task_location, plugin_api)
132 plugin_api.AddTaskToolbarItem(btn_set_location)
133
134 # the task location filter
135 def filter_workview_by_location(self, plugin_api):
136 # TODO: if the location has a delay in being calculated it may not exist at
137 # this point
138 if self.location.has_key("latitude") and self.location.has_key("longitude"):
139 tasks = plugin_api.get_all_tasks()
140
141 tasks_with_location = []
142 tasks_without_location = []
143
144 for tid in tasks:
145 task = plugin_api.get_task(tid)
146 tags = task.get_tags()
147 for tag in tags:
148 if "location" in tag.get_all_attributes():
149 tasks_with_location.append(task)
150 else:
151 tasks_without_location.append(task)
152
153 for task in tasks_with_location:
154 if task.is_workable():
155 tags = task.get_tags()
156 for tag in tags:
157 if tag.get_attribute("location"):
158 position = eval(tag.get_attribute("location"))
159 if not self.geoclue.compare_position(position[0], position[1], float(self.PROXIMITY_FACTOR)):
160 plugin_api.add_task_to_workview_filter(task.get_id())
161
162
163 #=== GEOLOCALIZED PREFERENCES===================================================
164 def on_geolocalized_preferences(self, widget, plugin_api):
165 wTree = gtk.glade.XML(self.glade_file, "Preferences")
166 dialog = wTree.get_widget("Preferences")
167 dialog.connect("response", self.preferences_close)
168 plugin_api.set_parent_window(dialog)
169
170 cmb_accuracy = wTree.get_widget("cmb_accuracy")
171 for i in range(len(cmb_accuracy.get_model())):
172 if str(self.accuracy_to_value(cmb_accuracy.get_model()[i][0])) == str(self.LOCATION_ACCURACY):
173 cmb_accuracy.set_active(i)
174 cmb_accuracy.connect("changed", self.cmb_accuracy_changed)
175 self.tmp_location_accuracy = self.LOCATION_ACCURACY
176
177 check_network = wTree.get_widget("check_network")
178 check_cellphone = wTree.get_widget("check_cellphone")
179 check_gps = wTree.get_widget("check_gps")
180
181 if "network" in self.LOCATION_DETERMINATION_METHOD:
182 check_network.set_active(True)
183
184 if "cellphone" in self.LOCATION_DETERMINATION_METHOD:
185 check_cellphone.set_active(True)
186
187 if "gps" in self.LOCATION_DETERMINATION_METHOD:
188 check_gps.set_active(True)
189
190
191 spin_proximityfactor = wTree.get_widget("spin_proximityfactor")
192 spin_proximityfactor.set_value(float(self.PROXIMITY_FACTOR))
193 spin_proximityfactor.connect("changed", self.spin_proximityfactor_changed)
194 self.tmp_proximityfactor = float(self.PROXIMITY_FACTOR)
195
196 dialog.show_all()
197
198 # converts the accuracy to a value
199 def accuracy_to_value(self, accuracy):
200 if not accuracy:
201 return 0
202 elif accuracy.lower() == "Country".lower():
203 return 1
204 elif accuracy.lower() == "Region".lower():
205 return 2
206 elif accuracy.lower() == "Locality".lower():
207 return 3
208 elif accuracy.lower() == "Postalcode".lower():
209 return 4
210 elif accuracy.lower() == "Street".lower():
211 return 5
212 elif accuracy.lower() == "Detailed".lower():
213 return 6
214 return 0
215
216 # converts the value of a accuracy to the accuracy
217 def value_to_accuracy(self, value):
218 if not value:
219 return None
220 elif value == 1:
221 return "Country"
222 elif value == 2:
223 return "Region"
224 elif value == 3:
225 return "Locality"
226 elif value == 4:
227 return "Postalcode"
228 elif value == 5:
229 return "Street"
230 elif value == 6:
231 return "Detailed"
232 return None
233
234 def cmb_accuracy_changed(self, comboboxentry):
235 index = comboboxentry.get_active()
236 model = comboboxentry.get_model()
237 self.tmp_location_accuracy = self.accuracy_to_value(model[index][0])
238
239 def spin_proximityfactor_changed(self, spinbutton):
240 self.tmp_proximityfactor = spinbutton.get_value()
241
242 def preferences_close(self, dialog, response=None):
243 if response == gtk.RESPONSE_OK:
244 self.LOCATION_ACCURACY = self.tmp_location_accuracy
245 self.PROXIMITY_FACTOR = float(self.tmp_proximityfactor)
246 dialog.destroy()
247 else:
248 dialog.destroy()
249
250 #=== GEOLOCALIZED PREFERENCES===================================================
251
252 #=== SET TASK LOCATION =========================================================
253 def set_task_location(self, widget, plugin_api, location=None):
254 location = self.geoclue.get_location_info()
255 self.plugin_api = plugin_api
256
257 wTree = gtk.glade.XML(self.glade_file, "SetTaskLocation")
258 dialog = wTree.get_widget("SetTaskLocation")
259 self.plugin_api.set_parent_window(dialog)
260
261 btn_zoom_in = wTree.get_widget("btn_zoom_in")
262 btn_zoom_out = wTree.get_widget("btn_zoom_out")
263
264 self.radiobutton1 = wTree.get_widget("radiobutton1")
265 self.radiobutton2 = wTree.get_widget("radiobutton2")
266 self.txt_new_tag = wTree.get_widget("txt_new_tag")
267 self.cmb_existing_tag = wTree.get_widget("cmb_existing_tag")
268
269 tabela = wTree.get_widget("tabela_set_task")
270 vbox_map = wTree.get_widget("vbox_map")
271 vbox_opt = wTree.get_widget("vbox_opt")
272
273 champlain_view = champlain.View()
274 champlain_view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
275 #champlain_view.set_property("zoom-on-double-click", False)
276
277 # create a list of the tags and their attributes
278 tag_list = []
279 for tag in plugin_api.get_tags():
280 tmp_tag = {}
281 for attr in tag.get_all_attributes():
282 if attr == "color":
283 tmp_tag[attr] = self.HTMLColorToRGB(tag.get_attribute(attr))
284 tmp_tag['has_color'] = "yes"
285 elif attr == "location":
286 tmp_tag[attr] = eval(tag.get_attribute(attr))
287 else:
288 tmp_tag[attr] = tag.get_attribute(attr)
289 tag_list.append(tmp_tag)
290
291 # checks if there is one tag with a location
292 task_has_location = False
293 for tag in tag_list:
294 for key, item in tag.items():
295 if key == "location":
296 task_has_location = True
297 break
298
299 # set the markers
300 layer = MarkerLayer()
301
302 self.marker_list = []
303 if task_has_location:
304 for tag in tag_list:
305 for key, item in tag.items():
306 if key == "location":
307 color = None
308 try:
309 if tag['has_color'] == "yes":
310 color = tag['color']
311 except:
312 # PROBLEM: the tag doesn't have color
313 # Possibility, use a color from another tag
314 pass
315
316 self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), tag['location'][0], tag['location'][1], color))
317 else:
318 try:
319 if location['longitude'] and location['latitude']:
320 self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), location['latitude'], location['longitude']))
321 except:
322 self.marker_list.append(layer.add_marker(plugin_api.get_task_title(), None, None))
323
324 champlain_view.add_layer(layer)
325
326 embed = cluttergtk.Embed()
327 embed.set_size_request(400, 300)
328
329 if not task_has_location:
330 # method that will change the marker's position
331 champlain_view.set_reactive(True)
332 champlain_view.connect("button-release-event", self.champlain_change_marker, champlain_view)
333
334 layer.show_all()
335
336 if task_has_location:
337 champlain_view.set_property("zoom-level", 9)
338 elif location:
339 champlain_view.set_property("zoom-level", 5)
340 else:
341 champlain_view.set_property("zoom-level", 1)
342
343 vbox_map.add(embed)
344
345 embed.realize()
346 stage = embed.get_stage()
347 champlain_view.set_size(400, 300)
348 stage.add(champlain_view)
349
350 # connect the toolbar buttons for zoom
351 btn_zoom_in.connect("clicked", self.zoom_in, champlain_view)
352 btn_zoom_out.connect("clicked", self.zoom_out, champlain_view)
353 dialog.connect("response", self.set_task_location_close)
354
355 #if there is no location set, we want to set it
356 if not task_has_location:
357 self.location_defined = False
358 if len(plugin_api.get_tags()) > 0:
359 liststore = gtk.ListStore(str)
360 self.cmb_existing_tag.set_model(liststore)
361 for tag in plugin_api.get_tags():
362 liststore.append([tag.get_attribute("name")])
363 self.cmb_existing_tag.set_text_column(0)
364 self.cmb_existing_tag.set_active(0)
365 else:
366 #remove radiobutton2 and the comboboxentry
367 tabela.remove(self.radiobutton1)
368 tabela.remove(self.radiobutton2)
369 tabela.remove(self.cmb_existing_tag)
370 label = gtk.Label()
371 label.set_text("Associate with new tag: ")
372 tabela.attach(label, 0, 1, 0, 1)
373 label.show()
374 else:
375 self.location_defined = True
376 vbox_opt.remove(tabela)
377 dialog.set_title("View the task's location")
378
379 dialog.show_all()
380
381 if task_has_location:
382 marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
383 champlain_view.center_on(marker_position[0], marker_position[1])
384 else:
385 try:
386 if location['longitude'] and location['latitude']:
387 champlain_view.center_on(location['latitude'], location['longitude'])
388 except:
389 pass
390
391 def set_task_location_close(self, dialog, response=None):
392 if response == gtk.RESPONSE_OK:
393 # ok
394 # tries to get the radiobuttons value, witch may not exist
395 if not self.location_defined:
396 if self.radiobutton1.get_active():
397 # radiobutton1
398 if self.txt_new_tag.get_text().strip() != "":
399 marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
400
401 # because users sometimes make mistakes, I'll check if the tag exists
402 tmp_tag = ""
403 for tag in self.plugin_api.get_tags():
404 t = "@" + self.txt_new_tag.get_text().replace("@", "")
405 if tag.get_attribute("name") == t:
406 tmp_tag = t
407 if tmp_tag:
408 self.plugin_api.add_tag_attribute(self.txt_new_tag.get_text().replace("@", ""),
409 "location",
410 marker_position)
411 else:
412 self.plugin_api.add_tag(self.txt_new_tag.get_text().replace("@", ""))
413 self.plugin_api.add_tag_attribute("@" + self.txt_new_tag.get_text().replace("@", ""),
414 "location",
415 marker_position)
416 dialog.destroy()
417 else:
418 self.errorDialog(dialog, "Error: No tag defined", "The tag has to be defined so that the location can be associated with it.")
419 else:
420 # radiobutton2
421 marker_position = (self.marker_list[0].get_property('latitude'), self.marker_list[0].get_property('longitude'))
422 index = self.cmb_existing_tag.get_active()
423 model = self.cmb_existing_tag.get_model()
424 self.plugin_api.add_tag_attribute(model[index][0], "location", marker_position)
425 dialog.destroy()
426 else:
427 # cancel
428 dialog.destroy()
429
430 def champlain_change_marker(self, widget, event, view):
431 if event.button != 1 or event.click_count > 1:
432 return False
433
434 (latitude, longitude) = view.get_coords_at(int(event.x), int(event.y))
435 self.marker_list[0].set_position(latitude, longitude)
436
437 #=== SET TASK LOCATION =========================================================
438
439 #=== TAG VIEW CONTEXT MENU =====================================================
440 def on_contextmenu_tag_location(self, widget, plugin_api):
441 location = self.geoclue.get_location_info()
442 self.plugin_api_context = plugin_api
443
444 wTree = gtk.glade.XML(self.glade_file, "TagLocation")
445 dialog = wTree.get_widget("TagLocation")
446 self.plugin_api_context.set_parent_window(dialog)
447
448 btn_zoom_in = wTree.get_widget("btn_zoom_in")
449 btn_zoom_out = wTree.get_widget("btn_zoom_out")
450 vbox_map = wTree.get_widget("vbox_map")
451
452 tag = self.plugin_api_context.get_tagpopup_tag()
453 dialog.set_title(tag.get_attribute("name") + "'s Location")
454
455 # get the tag's location
456 try:
457 tag_location = eval(tag.get_attribute("location"))
458 except:
459 tag_location = None
460
461 # get the tag's color
462 try:
463 tag_color = self.HTMLColorToRGB(tag.get_attribute("color"))
464 except:
465 tag_color = None
466
467 champlain_view = champlain.View()
468 champlain_view.set_property("scroll-mode", champlain.SCROLL_MODE_KINETIC)
469
470 layer = MarkerLayer()
471
472 marker_tag = None
473 if tag_location:
474 marker_tag = layer.add_marker(tag.get_attribute("name"), tag_location[0], tag_location[1], tag_color)
475 else:
476 try:
477 if location['longitude'] and location['latitude']:
478 marker_tag = layer.add_marker(tag.get_attribute("name"), location['latitude'], location['longitude'], tag_color)
479 except:
480 marker_tag = layer.add_marker(tag.get_attribute("name"), None, None)
481
482 champlain_view.add_layer(layer)
483
484 embed = cluttergtk.Embed()
485 embed.set_size_request(400, 300)
486
487 champlain_view.set_reactive(True)
488 champlain_view.connect("button-release-event", self.champlain__tag_change_marker, champlain_view, marker_tag)
489
490 layer.show_all()
491
492 if tag_location:
493 champlain_view.set_property("zoom-level", 9)
494 elif location:
495 champlain_view.set_property("zoom-level", 5)
496 else:
497 champlain_view.set_property("zoom-level", 1)
498
499 vbox_map.add(embed)
500
501 embed.realize()
502 stage = embed.get_stage()
503 champlain_view.set_size(400, 300)
504 stage.add(champlain_view)
505
506 # connect the toolbar buttons for zoom
507 btn_zoom_in.connect("clicked", self.zoom_in, champlain_view)
508 btn_zoom_out.connect("clicked", self.zoom_out, champlain_view)
509 dialog.connect("response", self.tag_location_close, tag, marker_tag)
510
511 dialog.show_all()
512
513 if tag_location:
514 marker_position = (marker_tag.get_property('latitude'), marker_tag.get_property('longitude'))
515 champlain_view.center_on(marker_position[0], marker_position[1])
516 else:
517 try:
518 if location['longitude'] and location['latitude']:
519 champlain_view.center_on(location['latitude'], location['longitude'])
520 except:
521 pass
522
523 def champlain__tag_change_marker(self, widget, event, view, marker):
524 if event.button != 1 or event.click_count > 1:
525 return False
526
527 (latitude, longitude) = view.get_coords_at(int(event.x), int(event.y))
528 marker.set_position(latitude, longitude)
529
530 def tag_location_close(self, dialog, response=None, tag=None, marker=None):
531 if response == gtk.RESPONSE_OK:
532 tag_location = str((marker.get_property('latitude'), marker.get_property('longitude')))
533 tag.set_attribute("location", tag_location)
534 dialog.destroy()
535 else:
536 dialog.destroy()
537
538 #=== TAG VIEW CONTEXT MENU =====================================================
539
540 def zoom_in(self, widget, view):
541 view.zoom_in()
542
543 def zoom_out(self, widget, view):
544 view.zoom_out()
545
546 # http://code.activestate.com/recipes/266466/
547 # original by Paul Winkler
548 def HTMLColorToRGB(self, colorstring):
549 """ convert #RRGGBB to a clutter color var """
550 colorstring = colorstring.strip()
551 if colorstring[0] == '#': colorstring = colorstring[1:]
552 if len(colorstring) != 6:
553 raise ValueError, "input #%s is not in #RRGGBB format" % colorstring
554 r, g, b = colorstring[:2], colorstring[2:4], colorstring[4:]
555 r, g, b = [int(n, 16) for n in (r, g, b)]
556 return clutter.Color(r, g, b)
557
558 # error dialog
559 def errorDialog(self, parent, header, msg):
560 """
561 Show an error message.
562 """
563
564 dialog = gtk.MessageDialog(parent,
565 flags=gtk.DIALOG_MODAL,
566 type=gtk.MESSAGE_ERROR,
567 buttons=gtk.BUTTONS_CLOSE)
568 dialog.set_title("")
569 dialog.set_markup("<big><b>%s</b></big>\n\n%s" % (header, msg))
570 dialog.realize()
571 dialog.run()
572 dialog.destroy()
0\ No newline at end of file573\ No newline at end of file
1574
=== added file 'GTG/plugins/geolocalized-tasks/geolocalized.glade'
--- GTG/plugins/geolocalized-tasks/geolocalized.glade 1970-01-01 00:00:00 +0000
+++ GTG/plugins/geolocalized-tasks/geolocalized.glade 2009-07-29 15:30:45 +0000
@@ -0,0 +1,790 @@
1<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
3
4<glade-interface>
5
6<widget class="GtkDialog" id="SetTaskLocation">
7 <property name="visible">True</property>
8 <property name="title" translatable="yes">Set the task's location</property>
9 <property name="type">GTK_WINDOW_TOPLEVEL</property>
10 <property name="window_position">GTK_WIN_POS_NONE</property>
11 <property name="modal">False</property>
12 <property name="resizable">True</property>
13 <property name="destroy_with_parent">False</property>
14 <property name="decorated">True</property>
15 <property name="skip_taskbar_hint">False</property>
16 <property name="skip_pager_hint">False</property>
17 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
18 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
19 <property name="focus_on_map">True</property>
20 <property name="urgency_hint">False</property>
21 <property name="has_separator">True</property>
22
23 <child internal-child="vbox">
24 <widget class="GtkVBox" id="dialog-vbox2">
25 <property name="visible">True</property>
26 <property name="homogeneous">False</property>
27 <property name="spacing">0</property>
28
29 <child internal-child="action_area">
30 <widget class="GtkHButtonBox" id="dialog-action_area2">
31 <property name="visible">True</property>
32 <property name="layout_style">GTK_BUTTONBOX_END</property>
33
34 <child>
35 <widget class="GtkButton" id="cancelbutton2">
36 <property name="visible">True</property>
37 <property name="can_default">True</property>
38 <property name="can_focus">True</property>
39 <property name="label">gtk-cancel</property>
40 <property name="use_stock">True</property>
41 <property name="relief">GTK_RELIEF_NORMAL</property>
42 <property name="focus_on_click">True</property>
43 <property name="response_id">-6</property>
44 </widget>
45 </child>
46
47 <child>
48 <widget class="GtkButton" id="okbutton2">
49 <property name="visible">True</property>
50 <property name="can_default">True</property>
51 <property name="can_focus">True</property>
52 <property name="label">gtk-ok</property>
53 <property name="use_stock">True</property>
54 <property name="relief">GTK_RELIEF_NORMAL</property>
55 <property name="focus_on_click">True</property>
56 <property name="response_id">-5</property>
57 </widget>
58 </child>
59 </widget>
60 <packing>
61 <property name="padding">0</property>
62 <property name="expand">False</property>
63 <property name="fill">True</property>
64 <property name="pack_type">GTK_PACK_END</property>
65 </packing>
66 </child>
67
68 <child>
69 <widget class="GtkVBox" id="vbox_map">
70 <property name="width_request">400</property>
71 <property name="visible">True</property>
72 <property name="homogeneous">False</property>
73 <property name="spacing">0</property>
74
75 <child>
76 <widget class="GtkToolbar" id="toolbar2">
77 <property name="visible">True</property>
78 <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
79 <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
80 <property name="tooltips">True</property>
81 <property name="show_arrow">True</property>
82
83 <child>
84 <widget class="GtkToolButton" id="btn_zoom_in">
85 <property name="visible">True</property>
86 <property name="stock_id">gtk-zoom-in</property>
87 <property name="visible_horizontal">True</property>
88 <property name="visible_vertical">True</property>
89 <property name="is_important">False</property>
90 </widget>
91 <packing>
92 <property name="expand">False</property>
93 <property name="homogeneous">True</property>
94 </packing>
95 </child>
96
97 <child>
98 <widget class="GtkToolButton" id="btn_zoom_out">
99 <property name="visible">True</property>
100 <property name="stock_id">gtk-zoom-out</property>
101 <property name="visible_horizontal">True</property>
102 <property name="visible_vertical">True</property>
103 <property name="is_important">False</property>
104 </widget>
105 <packing>
106 <property name="expand">False</property>
107 <property name="homogeneous">True</property>
108 </packing>
109 </child>
110 </widget>
111 <packing>
112 <property name="padding">0</property>
113 <property name="expand">False</property>
114 <property name="fill">False</property>
115 </packing>
116 </child>
117
118 <child>
119 <widget class="GtkVBox" id="vbox_map">
120 <property name="visible">True</property>
121 <property name="homogeneous">False</property>
122 <property name="spacing">0</property>
123
124 <child>
125 <placeholder/>
126 </child>
127 </widget>
128 <packing>
129 <property name="padding">0</property>
130 <property name="expand">True</property>
131 <property name="fill">True</property>
132 </packing>
133 </child>
134
135 <child>
136 <widget class="GtkVBox" id="vbox_opt">
137 <property name="visible">True</property>
138 <property name="homogeneous">False</property>
139 <property name="spacing">0</property>
140
141 <child>
142 <widget class="GtkTable" id="tabela_set_task">
143 <property name="visible">True</property>
144 <property name="n_rows">2</property>
145 <property name="n_columns">2</property>
146 <property name="homogeneous">False</property>
147 <property name="row_spacing">0</property>
148 <property name="column_spacing">0</property>
149
150 <child>
151 <widget class="GtkRadioButton" id="radiobutton1">
152 <property name="width_request">198</property>
153 <property name="visible">True</property>
154 <property name="can_focus">True</property>
155 <property name="label" translatable="yes">Associate with new tag</property>
156 <property name="use_underline">True</property>
157 <property name="relief">GTK_RELIEF_NORMAL</property>
158 <property name="focus_on_click">True</property>
159 <property name="active">False</property>
160 <property name="inconsistent">False</property>
161 <property name="draw_indicator">True</property>
162 </widget>
163 <packing>
164 <property name="left_attach">0</property>
165 <property name="right_attach">1</property>
166 <property name="top_attach">0</property>
167 <property name="bottom_attach">1</property>
168 <property name="x_options">fill</property>
169 <property name="y_options"></property>
170 </packing>
171 </child>
172
173 <child>
174 <widget class="GtkRadioButton" id="radiobutton2">
175 <property name="visible">True</property>
176 <property name="can_focus">True</property>
177 <property name="label" translatable="yes">Associate with existing tag</property>
178 <property name="use_underline">True</property>
179 <property name="relief">GTK_RELIEF_NORMAL</property>
180 <property name="focus_on_click">True</property>
181 <property name="active">False</property>
182 <property name="inconsistent">False</property>
183 <property name="draw_indicator">True</property>
184 <property name="group">radiobutton1</property>
185 </widget>
186 <packing>
187 <property name="left_attach">0</property>
188 <property name="right_attach">1</property>
189 <property name="top_attach">1</property>
190 <property name="bottom_attach">2</property>
191 <property name="x_options">fill</property>
192 <property name="y_options"></property>
193 </packing>
194 </child>
195
196 <child>
197 <widget class="GtkEntry" id="txt_new_tag">
198 <property name="visible">True</property>
199 <property name="can_focus">True</property>
200 <property name="editable">True</property>
201 <property name="visibility">True</property>
202 <property name="max_length">0</property>
203 <property name="text" translatable="yes"></property>
204 <property name="has_frame">True</property>
205 <property name="invisible_char">â—Ź</property>
206 <property name="activates_default">False</property>
207 </widget>
208 <packing>
209 <property name="left_attach">1</property>
210 <property name="right_attach">2</property>
211 <property name="top_attach">0</property>
212 <property name="bottom_attach">1</property>
213 <property name="y_options"></property>
214 </packing>
215 </child>
216
217 <child>
218 <widget class="GtkComboBoxEntry" id="cmb_existing_tag">
219 <property name="visible">True</property>
220 <property name="add_tearoffs">False</property>
221 <property name="has_frame">True</property>
222 <property name="focus_on_click">True</property>
223 </widget>
224 <packing>
225 <property name="left_attach">1</property>
226 <property name="right_attach">2</property>
227 <property name="top_attach">1</property>
228 <property name="bottom_attach">2</property>
229 <property name="x_options">fill</property>
230 <property name="y_options"></property>
231 </packing>
232 </child>
233 </widget>
234 <packing>
235 <property name="padding">0</property>
236 <property name="expand">True</property>
237 <property name="fill">True</property>
238 </packing>
239 </child>
240 </widget>
241 <packing>
242 <property name="padding">2</property>
243 <property name="expand">False</property>
244 <property name="fill">False</property>
245 </packing>
246 </child>
247 </widget>
248 <packing>
249 <property name="padding">0</property>
250 <property name="expand">False</property>
251 <property name="fill">False</property>
252 </packing>
253 </child>
254 </widget>
255 </child>
256</widget>
257
258<widget class="GtkDialog" id="TagLocation">
259 <property name="visible">True</property>
260 <property name="title" translatable="yes"></property>
261 <property name="type">GTK_WINDOW_TOPLEVEL</property>
262 <property name="window_position">GTK_WIN_POS_NONE</property>
263 <property name="modal">False</property>
264 <property name="resizable">True</property>
265 <property name="destroy_with_parent">False</property>
266 <property name="decorated">True</property>
267 <property name="skip_taskbar_hint">False</property>
268 <property name="skip_pager_hint">False</property>
269 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
270 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
271 <property name="focus_on_map">True</property>
272 <property name="urgency_hint">False</property>
273 <property name="has_separator">True</property>
274
275 <child internal-child="vbox">
276 <widget class="GtkVBox" id="dialog-vbox3">
277 <property name="visible">True</property>
278 <property name="homogeneous">False</property>
279 <property name="spacing">0</property>
280
281 <child internal-child="action_area">
282 <widget class="GtkHButtonBox" id="dialog-action_area3">
283 <property name="visible">True</property>
284 <property name="layout_style">GTK_BUTTONBOX_END</property>
285
286 <child>
287 <widget class="GtkButton" id="cancelbutton3">
288 <property name="visible">True</property>
289 <property name="can_default">True</property>
290 <property name="can_focus">True</property>
291 <property name="label">gtk-cancel</property>
292 <property name="use_stock">True</property>
293 <property name="relief">GTK_RELIEF_NORMAL</property>
294 <property name="focus_on_click">True</property>
295 <property name="response_id">-6</property>
296 </widget>
297 </child>
298
299 <child>
300 <widget class="GtkButton" id="okbutton3">
301 <property name="visible">True</property>
302 <property name="can_default">True</property>
303 <property name="can_focus">True</property>
304 <property name="label">gtk-ok</property>
305 <property name="use_stock">True</property>
306 <property name="relief">GTK_RELIEF_NORMAL</property>
307 <property name="focus_on_click">True</property>
308 <property name="response_id">-5</property>
309 </widget>
310 </child>
311 </widget>
312 <packing>
313 <property name="padding">0</property>
314 <property name="expand">False</property>
315 <property name="fill">True</property>
316 <property name="pack_type">GTK_PACK_END</property>
317 </packing>
318 </child>
319
320 <child>
321 <widget class="GtkVBox" id="vbox3">
322 <property name="visible">True</property>
323 <property name="homogeneous">False</property>
324 <property name="spacing">0</property>
325
326 <child>
327 <widget class="GtkToolbar" id="toolbar3">
328 <property name="visible">True</property>
329 <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
330 <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
331 <property name="tooltips">True</property>
332 <property name="show_arrow">True</property>
333
334 <child>
335 <widget class="GtkToolButton" id="btn_zoom_in">
336 <property name="visible">True</property>
337 <property name="stock_id">gtk-zoom-in</property>
338 <property name="visible_horizontal">True</property>
339 <property name="visible_vertical">True</property>
340 <property name="is_important">False</property>
341 </widget>
342 <packing>
343 <property name="expand">False</property>
344 <property name="homogeneous">True</property>
345 </packing>
346 </child>
347
348 <child>
349 <widget class="GtkToolButton" id="btn_zoom_out">
350 <property name="visible">True</property>
351 <property name="stock_id">gtk-zoom-out</property>
352 <property name="visible_horizontal">True</property>
353 <property name="visible_vertical">True</property>
354 <property name="is_important">False</property>
355 </widget>
356 <packing>
357 <property name="expand">False</property>
358 <property name="homogeneous">True</property>
359 </packing>
360 </child>
361 </widget>
362 <packing>
363 <property name="padding">0</property>
364 <property name="expand">False</property>
365 <property name="fill">False</property>
366 </packing>
367 </child>
368
369 <child>
370 <widget class="GtkVBox" id="vbox_map">
371 <property name="width_request">400</property>
372 <property name="visible">True</property>
373 <property name="homogeneous">False</property>
374 <property name="spacing">0</property>
375
376 <child>
377 <placeholder/>
378 </child>
379 </widget>
380 <packing>
381 <property name="padding">0</property>
382 <property name="expand">True</property>
383 <property name="fill">True</property>
384 </packing>
385 </child>
386 </widget>
387 <packing>
388 <property name="padding">0</property>
389 <property name="expand">False</property>
390 <property name="fill">False</property>
391 </packing>
392 </child>
393 </widget>
394 </child>
395</widget>
396
397<widget class="GtkDialog" id="Preferences">
398 <property name="width_request">350</property>
399 <property name="visible">True</property>
400 <property name="title" translatable="yes">Geolocalized-tasks Preferences</property>
401 <property name="type">GTK_WINDOW_TOPLEVEL</property>
402 <property name="window_position">GTK_WIN_POS_NONE</property>
403 <property name="modal">False</property>
404 <property name="resizable">True</property>
405 <property name="destroy_with_parent">False</property>
406 <property name="decorated">True</property>
407 <property name="skip_taskbar_hint">False</property>
408 <property name="skip_pager_hint">False</property>
409 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
410 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
411 <property name="focus_on_map">True</property>
412 <property name="urgency_hint">False</property>
413 <property name="has_separator">True</property>
414
415 <child internal-child="vbox">
416 <widget class="GtkVBox" id="dialog-vbox4">
417 <property name="visible">True</property>
418 <property name="homogeneous">False</property>
419 <property name="spacing">0</property>
420
421 <child internal-child="action_area">
422 <widget class="GtkHButtonBox" id="dialog-action_area4">
423 <property name="visible">True</property>
424 <property name="layout_style">GTK_BUTTONBOX_END</property>
425
426 <child>
427 <widget class="GtkButton" id="cancelbutton4">
428 <property name="visible">True</property>
429 <property name="can_default">True</property>
430 <property name="can_focus">True</property>
431 <property name="label">gtk-cancel</property>
432 <property name="use_stock">True</property>
433 <property name="relief">GTK_RELIEF_NORMAL</property>
434 <property name="focus_on_click">True</property>
435 <property name="response_id">-6</property>
436 </widget>
437 </child>
438
439 <child>
440 <widget class="GtkButton" id="okbutton4">
441 <property name="visible">True</property>
442 <property name="can_default">True</property>
443 <property name="can_focus">True</property>
444 <property name="label">gtk-ok</property>
445 <property name="use_stock">True</property>
446 <property name="relief">GTK_RELIEF_NORMAL</property>
447 <property name="focus_on_click">True</property>
448 <property name="response_id">-5</property>
449 </widget>
450 </child>
451 </widget>
452 <packing>
453 <property name="padding">0</property>
454 <property name="expand">False</property>
455 <property name="fill">True</property>
456 <property name="pack_type">GTK_PACK_END</property>
457 </packing>
458 </child>
459
460 <child>
461 <widget class="GtkVBox" id="vbox4">
462 <property name="visible">True</property>
463 <property name="homogeneous">False</property>
464 <property name="spacing">0</property>
465
466 <child>
467 <widget class="GtkFrame" id="frame3">
468 <property name="border_width">3</property>
469 <property name="visible">True</property>
470 <property name="label_xalign">0</property>
471 <property name="label_yalign">0.5</property>
472 <property name="shadow_type">GTK_SHADOW_NONE</property>
473
474 <child>
475 <widget class="GtkAlignment" id="alignment3">
476 <property name="visible">True</property>
477 <property name="xalign">0.5</property>
478 <property name="yalign">0.5</property>
479 <property name="xscale">1</property>
480 <property name="yscale">1</property>
481 <property name="top_padding">0</property>
482 <property name="bottom_padding">0</property>
483 <property name="left_padding">12</property>
484 <property name="right_padding">0</property>
485
486 <child>
487 <widget class="GtkHBox" id="hbox4">
488 <property name="visible">True</property>
489 <property name="homogeneous">False</property>
490 <property name="spacing">0</property>
491
492 <child>
493 <widget class="GtkComboBoxEntry" id="cmb_accuracy">
494 <property name="visible">True</property>
495 <property name="items" translatable="yes">Country
496Region
497Locality
498Postalcode
499Street
500Detailed</property>
501 <property name="add_tearoffs">False</property>
502 <property name="has_frame">True</property>
503 <property name="focus_on_click">True</property>
504 </widget>
505 <packing>
506 <property name="padding">0</property>
507 <property name="expand">False</property>
508 <property name="fill">False</property>
509 </packing>
510 </child>
511 </widget>
512 </child>
513 </widget>
514 </child>
515
516 <child>
517 <widget class="GtkLabel" id="label5">
518 <property name="visible">True</property>
519 <property name="label" translatable="yes">&lt;b&gt;Accuracy&lt;/b&gt;</property>
520 <property name="use_underline">False</property>
521 <property name="use_markup">True</property>
522 <property name="justify">GTK_JUSTIFY_LEFT</property>
523 <property name="wrap">False</property>
524 <property name="selectable">False</property>
525 <property name="xalign">0.5</property>
526 <property name="yalign">0.5</property>
527 <property name="xpad">0</property>
528 <property name="ypad">0</property>
529 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
530 <property name="width_chars">-1</property>
531 <property name="single_line_mode">False</property>
532 <property name="angle">0</property>
533 </widget>
534 <packing>
535 <property name="type">label_item</property>
536 </packing>
537 </child>
538 </widget>
539 <packing>
540 <property name="padding">0</property>
541 <property name="expand">False</property>
542 <property name="fill">False</property>
543 </packing>
544 </child>
545
546 <child>
547 <widget class="GtkFrame" id="frame4">
548 <property name="border_width">3</property>
549 <property name="visible">True</property>
550 <property name="label_xalign">0</property>
551 <property name="label_yalign">0.5</property>
552 <property name="shadow_type">GTK_SHADOW_NONE</property>
553
554 <child>
555 <widget class="GtkAlignment" id="alignment4">
556 <property name="visible">True</property>
557 <property name="xalign">0.5</property>
558 <property name="yalign">0.5</property>
559 <property name="xscale">1</property>
560 <property name="yscale">1</property>
561 <property name="top_padding">0</property>
562 <property name="bottom_padding">0</property>
563 <property name="left_padding">12</property>
564 <property name="right_padding">0</property>
565
566 <child>
567 <widget class="GtkHBox" id="hbox5">
568 <property name="visible">True</property>
569 <property name="homogeneous">False</property>
570 <property name="spacing">0</property>
571
572 <child>
573 <widget class="GtkVBox" id="vbox5">
574 <property name="visible">True</property>
575 <property name="homogeneous">False</property>
576 <property name="spacing">0</property>
577
578 <child>
579 <widget class="GtkCheckButton" id="check_network">
580 <property name="visible">True</property>
581 <property name="can_focus">True</property>
582 <property name="label" translatable="yes">Use network</property>
583 <property name="use_underline">True</property>
584 <property name="relief">GTK_RELIEF_NORMAL</property>
585 <property name="focus_on_click">True</property>
586 <property name="active">False</property>
587 <property name="inconsistent">False</property>
588 <property name="draw_indicator">True</property>
589 </widget>
590 <packing>
591 <property name="padding">0</property>
592 <property name="expand">False</property>
593 <property name="fill">False</property>
594 </packing>
595 </child>
596
597 <child>
598 <widget class="GtkCheckButton" id="check_cellphone">
599 <property name="visible">True</property>
600 <property name="can_focus">True</property>
601 <property name="label" translatable="yes">Use cellphone (if available)</property>
602 <property name="use_underline">True</property>
603 <property name="relief">GTK_RELIEF_NORMAL</property>
604 <property name="focus_on_click">True</property>
605 <property name="active">False</property>
606 <property name="inconsistent">False</property>
607 <property name="draw_indicator">True</property>
608 </widget>
609 <packing>
610 <property name="padding">0</property>
611 <property name="expand">False</property>
612 <property name="fill">False</property>
613 </packing>
614 </child>
615
616 <child>
617 <widget class="GtkCheckButton" id="check_gps">
618 <property name="visible">True</property>
619 <property name="can_focus">True</property>
620 <property name="label" translatable="yes">Use gps (if available)</property>
621 <property name="use_underline">True</property>
622 <property name="relief">GTK_RELIEF_NORMAL</property>
623 <property name="focus_on_click">True</property>
624 <property name="active">False</property>
625 <property name="inconsistent">False</property>
626 <property name="draw_indicator">True</property>
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 </widget>
635 <packing>
636 <property name="padding">0</property>
637 <property name="expand">True</property>
638 <property name="fill">True</property>
639 </packing>
640 </child>
641 </widget>
642 </child>
643 </widget>
644 </child>
645
646 <child>
647 <widget class="GtkLabel" id="label6">
648 <property name="visible">True</property>
649 <property name="label" translatable="yes">&lt;b&gt;Location Determination Method&lt;/b&gt;</property>
650 <property name="use_underline">False</property>
651 <property name="use_markup">True</property>
652 <property name="justify">GTK_JUSTIFY_LEFT</property>
653 <property name="wrap">False</property>
654 <property name="selectable">False</property>
655 <property name="xalign">0.5</property>
656 <property name="yalign">0.5</property>
657 <property name="xpad">0</property>
658 <property name="ypad">0</property>
659 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
660 <property name="width_chars">-1</property>
661 <property name="single_line_mode">False</property>
662 <property name="angle">0</property>
663 </widget>
664 <packing>
665 <property name="type">label_item</property>
666 </packing>
667 </child>
668 </widget>
669 <packing>
670 <property name="padding">0</property>
671 <property name="expand">True</property>
672 <property name="fill">True</property>
673 </packing>
674 </child>
675
676 <child>
677 <widget class="GtkFrame" id="frame5">
678 <property name="border_width">3</property>
679 <property name="visible">True</property>
680 <property name="label_xalign">0</property>
681 <property name="label_yalign">0.5</property>
682 <property name="shadow_type">GTK_SHADOW_NONE</property>
683
684 <child>
685 <widget class="GtkAlignment" id="alignment5">
686 <property name="visible">True</property>
687 <property name="xalign">0.5</property>
688 <property name="yalign">0.5</property>
689 <property name="xscale">1</property>
690 <property name="yscale">1</property>
691 <property name="top_padding">0</property>
692 <property name="bottom_padding">0</property>
693 <property name="left_padding">12</property>
694 <property name="right_padding">0</property>
695
696 <child>
697 <widget class="GtkHBox" id="hbox3">
698 <property name="visible">True</property>
699 <property name="homogeneous">False</property>
700 <property name="spacing">0</property>
701
702 <child>
703 <widget class="GtkSpinButton" id="spin_proximityfactor">
704 <property name="visible">True</property>
705 <property name="can_focus">True</property>
706 <property name="climb_rate">1</property>
707 <property name="digits">1</property>
708 <property name="numeric">False</property>
709 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
710 <property name="snap_to_ticks">False</property>
711 <property name="wrap">False</property>
712 <property name="adjustment">5 1 100 0.10000000149 10 10</property>
713 </widget>
714 <packing>
715 <property name="padding">0</property>
716 <property name="expand">False</property>
717 <property name="fill">False</property>
718 </packing>
719 </child>
720
721 <child>
722 <widget class="GtkLabel" id="label8">
723 <property name="visible">True</property>
724 <property name="label" translatable="yes">km</property>
725 <property name="use_underline">False</property>
726 <property name="use_markup">False</property>
727 <property name="justify">GTK_JUSTIFY_LEFT</property>
728 <property name="wrap">False</property>
729 <property name="selectable">False</property>
730 <property name="xalign">0.5</property>
731 <property name="yalign">0.5</property>
732 <property name="xpad">4</property>
733 <property name="ypad">0</property>
734 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
735 <property name="width_chars">-1</property>
736 <property name="single_line_mode">False</property>
737 <property name="angle">0</property>
738 </widget>
739 <packing>
740 <property name="padding">0</property>
741 <property name="expand">False</property>
742 <property name="fill">False</property>
743 </packing>
744 </child>
745 </widget>
746 </child>
747 </widget>
748 </child>
749
750 <child>
751 <widget class="GtkLabel" id="label7">
752 <property name="visible">True</property>
753 <property name="label" translatable="yes">&lt;b&gt;Proximity Factor&lt;/b&gt;</property>
754 <property name="use_underline">False</property>
755 <property name="use_markup">True</property>
756 <property name="justify">GTK_JUSTIFY_LEFT</property>
757 <property name="wrap">False</property>
758 <property name="selectable">False</property>
759 <property name="xalign">0.5</property>
760 <property name="yalign">0.5</property>
761 <property name="xpad">0</property>
762 <property name="ypad">0</property>
763 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
764 <property name="width_chars">-1</property>
765 <property name="single_line_mode">False</property>
766 <property name="angle">0</property>
767 </widget>
768 <packing>
769 <property name="type">label_item</property>
770 </packing>
771 </child>
772 </widget>
773 <packing>
774 <property name="padding">0</property>
775 <property name="expand">True</property>
776 <property name="fill">True</property>
777 </packing>
778 </child>
779 </widget>
780 <packing>
781 <property name="padding">0</property>
782 <property name="expand">True</property>
783 <property name="fill">True</property>
784 </packing>
785 </child>
786 </widget>
787 </child>
788</widget>
789
790</glade-interface>
0791
=== added directory 'GTG/plugins/geolocalized-tasks/icons'
=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor'
=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/16x16'
=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/16x16/assign-location.png'
1Binary 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 differ792Binary 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
=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/24x24'
=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/24x24/geolocalization.png'
2Binary 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 differ793Binary 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
=== added directory 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg'
=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg'
--- GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg 1970-01-01 00:00:00 +0000
+++ GTG/plugins/geolocalized-tasks/icons/hicolor/svg/assign-location.svg 2009-07-27 14:37:04 +0000
@@ -0,0 +1,57 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3<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">
4 <defs id="defs4">
5 <linearGradient inkscape:collect="always" id="linearGradient7943">
6 <stop style="stop-color: rgb(249, 166, 166); stop-opacity: 1;" offset="0" id="stop7945"/>
7 <stop style="stop-color: rgb(243, 156, 156); stop-opacity: 1;" offset="1" id="stop7947"/>
8 </linearGradient>
9 <linearGradient inkscape:collect="always" id="linearGradient7935">
10 <stop style="stop-color: rgb(132, 0, 0); stop-opacity: 1;" offset="0" id="stop7937"/>
11 <stop style="stop-color: rgb(203, 0, 0); stop-opacity: 1;" offset="1" id="stop7939"/>
12 </linearGradient>
13 <linearGradient inkscape:collect="always" id="linearGradient7874">
14 <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 0.941785;" offset="0" id="stop7876"/>
15 <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7878"/>
16 </linearGradient>
17 <linearGradient inkscape:collect="always" id="linearGradient7741">
18 <stop style="stop-color: rgb(254, 244, 164); stop-opacity: 1;" offset="0" id="stop7743"/>
19 <stop style="stop-color: rgb(255, 252, 225); stop-opacity: 1;" offset="1" id="stop7745"/>
20 </linearGradient>
21 <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"/>
22 <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"/>
23 <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"/>
24 <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"/>
25 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7935" id="linearGradient8117" gradientUnits="userSpaceOnUse" x1="57.438805" y1="14.430664" x2="54.385418" y2="9.703125"/>
26 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7943" id="linearGradient8119" gradientUnits="userSpaceOnUse" x1="55.795582" y1="10.903276" x2="55.84375" y2="14.84375"/>
27 </defs>
28 <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">
29 <inkscape:grid type="xygrid" id="grid8091" visible="true" enabled="true"/>
30 </sodipodi:namedview>
31 <metadata id="metadata7">
32 <rdf:RDF>
33 <cc:Work rdf:about="">
34 <dc:format>image/svg+xml</dc:format>
35 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
36 </cc:Work>
37 </rdf:RDF>
38 </metadata>
39 <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
40 <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"/>
41 <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"/>
42 <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;"/>
43 <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)"/>
44 <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"/>
45 <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;"/>
46 <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"/>
47 <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;"/>
48 <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"/>
49 <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;"/>
50 <g id="g8112" transform="translate(1, -2)">
51 <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"/>
52 <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)"/>
53 <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)"/>
54 </g>
55 <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"/>
56 </g>
57</svg>
0\ No newline at end of file58\ No newline at end of file
159
=== added file 'GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg'
--- GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg 1970-01-01 00:00:00 +0000
+++ GTG/plugins/geolocalized-tasks/icons/hicolor/svg/geolocalization.svg 2009-07-27 14:37:04 +0000
@@ -0,0 +1,101 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3<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">
4 <defs id="defs4">
5 <linearGradient inkscape:collect="always" id="linearGradient7943">
6 <stop style="stop-color: rgb(249, 166, 166); stop-opacity: 1;" offset="0" id="stop7945"/>
7 <stop style="stop-color: rgb(243, 156, 156); stop-opacity: 1;" offset="1" id="stop7947"/>
8 </linearGradient>
9 <linearGradient inkscape:collect="always" id="linearGradient7935">
10 <stop style="stop-color: rgb(132, 0, 0); stop-opacity: 1;" offset="0" id="stop7937"/>
11 <stop style="stop-color: rgb(203, 0, 0); stop-opacity: 1;" offset="1" id="stop7939"/>
12 </linearGradient>
13 <linearGradient inkscape:collect="always" id="linearGradient7874">
14 <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 0.941785;" offset="0" id="stop7876"/>
15 <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7878"/>
16 </linearGradient>
17 <linearGradient id="linearGradient7838" inkscape:collect="always">
18 <stop id="stop7840" offset="0" style="stop-color: rgb(250, 173, 173); stop-opacity: 1;"/>
19 <stop id="stop7842" offset="1" style="stop-color: rgb(204, 0, 0); stop-opacity: 1;"/>
20 </linearGradient>
21 <linearGradient id="linearGradient7765" inkscape:collect="always">
22 <stop id="stop7767" offset="0" style="stop-color: rgb(238, 238, 236); stop-opacity: 1;"/>
23 <stop id="stop7769" offset="1" style="stop-color: rgb(173, 173, 173); stop-opacity: 1;"/>
24 </linearGradient>
25 <linearGradient id="linearGradient7757" inkscape:collect="always">
26 <stop id="stop7759" offset="0" style="stop-color: rgb(85, 87, 83); stop-opacity: 1;"/>
27 <stop id="stop7761" offset="1" style="stop-color: rgb(146, 148, 144); stop-opacity: 1;"/>
28 </linearGradient>
29 <linearGradient inkscape:collect="always" id="linearGradient7741">
30 <stop style="stop-color: rgb(254, 244, 164); stop-opacity: 1;" offset="0" id="stop7743"/>
31 <stop style="stop-color: rgb(255, 252, 225); stop-opacity: 1;" offset="1" id="stop7745"/>
32 </linearGradient>
33 <linearGradient inkscape:collect="always" id="linearGradient7081">
34 <stop style="stop-color: rgb(182, 178, 140); stop-opacity: 1;" offset="0" id="stop7083"/>
35 <stop style="stop-color: rgb(145, 140, 92); stop-opacity: 1;" offset="1" id="stop7085"/>
36 </linearGradient>
37 <linearGradient inkscape:collect="always" id="linearGradient7013">
38 <stop style="stop-color: rgb(125, 0, 0); stop-opacity: 1;" offset="0" id="stop7015"/>
39 <stop style="stop-color: rgb(204, 0, 0); stop-opacity: 1;" offset="1" id="stop7017"/>
40 </linearGradient>
41 <linearGradient inkscape:collect="always" id="linearGradient7003">
42 <stop style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" offset="0" id="stop7005"/>
43 <stop style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" offset="1" id="stop7007"/>
44 </linearGradient>
45 <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"/>
46 <filter inkscape:collect="always" id="filter7386" x="-0.18793105" width="1.3758621" y="-0.26054078" height="1.5210816">
47 <feGaussianBlur inkscape:collect="always" stdDeviation="0.59707262" id="feGaussianBlur7388"/>
48 </filter>
49 <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"/>
50 <filter inkscape:collect="always" id="filter7589" x="-0.077992738" width="1.1559855" y="-0.38996369" height="1.7799274">
51 <feGaussianBlur inkscape:collect="always" stdDeviation="0.64993949" id="feGaussianBlur7591"/>
52 </filter>
53 <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"/>
54 <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"/>
55 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7741" id="linearGradient7747" x1="-25.013903" y1="4" x2="-18" y2="17.119036" gradientUnits="userSpaceOnUse" gradientTransform="translate(30)"/>
56 <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"/>
57 <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"/>
58 <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"/>
59 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7013" id="linearGradient7834" gradientUnits="userSpaceOnUse" x1="16.304688" y1="8.2946424" x2="14.868303" y2="4.9375"/>
60 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7003" id="linearGradient7836" gradientUnits="userSpaceOnUse" x1="14.844542" y1="9.349679" x2="18.449074" y2="0.33173633"/>
61 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient7880" x1="44.812893" y1="7.2946024" x2="52.456104" y2="21.549175" gradientUnits="userSpaceOnUse"/>
62 <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"/>
63 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7874" id="linearGradient7923" gradientUnits="userSpaceOnUse" x1="44.812893" y1="7.2946024" x2="54.206104" y2="20.549175"/>
64 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7935" id="linearGradient7941" x1="57.438805" y1="14.430664" x2="54.385418" y2="9.703125" gradientUnits="userSpaceOnUse"/>
65 <linearGradient inkscape:collect="always" xlink:href="#linearGradient7943" id="linearGradient7949" x1="55.795582" y1="10.903276" x2="55.84375" y2="14.84375" gradientUnits="userSpaceOnUse"/>
66 </defs>
67 <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">
68 <inkscape:grid type="xygrid" id="grid6922" visible="true" enabled="true"/>
69 </sodipodi:namedview>
70 <metadata id="metadata7">
71 <rdf:RDF>
72 <cc:Work rdf:about="">
73 <dc:format>image/svg+xml</dc:format>
74 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
75 </cc:Work>
76 </rdf:RDF>
77 </metadata>
78 <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1">
79 <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)"/>
80 <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"/>
81 <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"/>
82 <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)"/>
83 <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;"/>
84 <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"/>
85 <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"/>
86 <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;"/>
87 <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;"/>
88 <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;"/>
89 <g id="g7820" transform="translate(-19, -1)">
90 <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);"/>
91 <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;"/>
92 <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"/>
93 <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"/>
94 <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)"/>
95 </g>
96 <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"/>
97 <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)"/>
98 <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"/>
99 <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"/>
100 </g>
101</svg>
0\ No newline at end of file102\ No newline at end of file
1103
=== added file 'GTG/plugins/geolocalized-tasks/marker.py'
--- GTG/plugins/geolocalized-tasks/marker.py 1970-01-01 00:00:00 +0000
+++ GTG/plugins/geolocalized-tasks/marker.py 2009-07-25 18:58:39 +0000
@@ -0,0 +1,47 @@
1# -*- coding: utf-8 -*-
2# Copyright (c) 2009 - Paulo Cabido <paulo.cabido@gmail.com>
3#
4# This program is free software: you can redistribute it and/or modify it under
5# the terms of the GNU General Public License as published by the Free Software
6# Foundation, either version 3 of the License, or (at your option) any later
7# version.
8#
9# This program is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12# details.
13#
14# You should have received a copy of the GNU General Public License along with
15# this program. If not, see <http://www.gnu.org/licenses/>.
16
17import clutter
18import champlain
19import champlaingtk
20
21class MarkerLayer(champlain.Layer):
22
23 def __init__(self):
24 champlain.Layer.__init__(self)
25 # a marker can also be set in RGB with ints
26 self.gray = clutter.Color(51, 51, 51)
27
28 #RGBA
29 self.white = clutter.Color(0xff, 0xff, 0xff, 0xff)
30 self.black = clutter.Color(0x00, 0x00, 0x00, 0xff)
31
32 self.hide()
33
34 def add_marker(self, text, latitude, longitude, bg_color=None, text_color=None, font="Airmole 8"):
35 if not text_color:
36 text_color = self.white
37
38 if not bg_color:
39 bg_color = self.gray
40
41 marker = champlain.marker_new_with_text(text, font, text_color, bg_color)
42
43 #marker.set_position(38.575935, -7.921326)
44 if latitude and longitude:
45 marker.set_position(latitude, longitude)
46 self.add(marker)
47 return marker
0\ No newline at end of file48\ No newline at end of file
149
=== added directory 'GTG/plugins/helloworld'
=== added file 'GTG/plugins/helloworld/hello_world.glade'
--- GTG/plugins/helloworld/hello_world.glade 1970-01-01 00:00:00 +0000
+++ GTG/plugins/helloworld/hello_world.glade 2009-07-14 16:32:20 +0000
@@ -0,0 +1,122 @@
1<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
3
4<glade-interface>
5
6<widget class="GtkDialog" id="helloworld">
7 <property name="width_request">300</property>
8 <property name="height_request">150</property>
9 <property name="title" translatable="yes">Hello World</property>
10 <property name="type">GTK_WINDOW_TOPLEVEL</property>
11 <property name="window_position">GTK_WIN_POS_NONE</property>
12 <property name="modal">False</property>
13 <property name="resizable">True</property>
14 <property name="destroy_with_parent">False</property>
15 <property name="decorated">True</property>
16 <property name="skip_taskbar_hint">False</property>
17 <property name="skip_pager_hint">False</property>
18 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
19 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
20 <property name="focus_on_map">True</property>
21 <property name="urgency_hint">False</property>
22 <property name="has_separator">True</property>
23
24 <child internal-child="vbox">
25 <widget class="GtkVBox" id="dialog-vbox1">
26 <property name="visible">True</property>
27 <property name="homogeneous">False</property>
28 <property name="spacing">0</property>
29
30 <child internal-child="action_area">
31 <widget class="GtkHButtonBox" id="dialog-action_area1">
32 <property name="visible">True</property>
33 <property name="layout_style">GTK_BUTTONBOX_END</property>
34
35 <child>
36 <widget class="GtkButton" id="btn_close">
37 <property name="visible">True</property>
38 <property name="can_default">True</property>
39 <property name="can_focus">True</property>
40 <property name="label">gtk-close</property>
41 <property name="use_stock">True</property>
42 <property name="relief">GTK_RELIEF_NORMAL</property>
43 <property name="focus_on_click">True</property>
44 <property name="response_id">-7</property>
45 </widget>
46 </child>
47 </widget>
48 <packing>
49 <property name="padding">0</property>
50 <property name="expand">False</property>
51 <property name="fill">True</property>
52 <property name="pack_type">GTK_PACK_END</property>
53 </packing>
54 </child>
55
56 <child>
57 <widget class="GtkVBox" id="vbox1">
58 <property name="visible">True</property>
59 <property name="homogeneous">False</property>
60 <property name="spacing">0</property>
61
62 <child>
63 <widget class="GtkLabel" id="label1">
64 <property name="visible">True</property>
65 <property name="label" translatable="yes">Hello World Plugin</property>
66 <property name="use_underline">False</property>
67 <property name="use_markup">False</property>
68 <property name="justify">GTK_JUSTIFY_LEFT</property>
69 <property name="wrap">False</property>
70 <property name="selectable">False</property>
71 <property name="xalign">0.5</property>
72 <property name="yalign">0.5</property>
73 <property name="xpad">0</property>
74 <property name="ypad">6</property>
75 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
76 <property name="width_chars">-1</property>
77 <property name="single_line_mode">False</property>
78 <property name="angle">0</property>
79 </widget>
80 <packing>
81 <property name="padding">0</property>
82 <property name="expand">False</property>
83 <property name="fill">False</property>
84 </packing>
85 </child>
86
87 <child>
88 <widget class="GtkLabel" id="lbl_helloworld">
89 <property name="visible">True</property>
90 <property name="label" translatable="yes"></property>
91 <property name="use_underline">False</property>
92 <property name="use_markup">False</property>
93 <property name="justify">GTK_JUSTIFY_LEFT</property>
94 <property name="wrap">True</property>
95 <property name="selectable">False</property>
96 <property name="xalign">0.5</property>
97 <property name="yalign">0.5</property>
98 <property name="xpad">0</property>
99 <property name="ypad">24</property>
100 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
101 <property name="width_chars">-1</property>
102 <property name="single_line_mode">False</property>
103 <property name="angle">0</property>
104 </widget>
105 <packing>
106 <property name="padding">0</property>
107 <property name="expand">False</property>
108 <property name="fill">False</property>
109 </packing>
110 </child>
111 </widget>
112 <packing>
113 <property name="padding">0</property>
114 <property name="expand">True</property>
115 <property name="fill">True</property>
116 </packing>
117 </child>
118 </widget>
119 </child>
120</widget>
121
122</glade-interface>
0123
=== added file 'GTG/plugins/helloworld/helloworld.py'
--- GTG/plugins/helloworld/helloworld.py 1970-01-01 00:00:00 +0000
+++ GTG/plugins/helloworld/helloworld.py 2009-07-17 02:27:18 +0000
@@ -0,0 +1,77 @@
1# -*- coding: utf-8 -*-
2import gtk, pygtk
3import os
4
5class pluginTest:
6
7 PLUGIN_NAME = 'Hello World'
8 PLUGIN_AUTHORS = 'Paulo Cabido <paulo.cabido@gmail.com>'
9 PLUGIN_VERSION = '0.1.1'
10 PLUGIN_DESCRIPTION = 'Plugin Description goes here. Helo World!'
11 PLUGIN_ENABLED = False
12
13 def __init__(self):
14 self.menu_item = gtk.MenuItem("Hello World Plugin")
15 self.menu_item.connect('activate', self.onTesteMenu)
16
17 self.tb_button = gtk.ToolButton(gtk.STOCK_INFO)
18 self.tb_button.set_label("Hello World")
19 self.tb_button.connect('clicked', self.onTbButton)
20
21
22 # plugin engine methods
23 def activate(self, plugin_api):
24 # add a menu item to the menu bar
25 plugin_api.AddMenuItem(self.menu_item)
26
27 # saves the separator's index to later remove it
28 self.separator = plugin_api.AddToolbarItem(gtk.SeparatorToolItem())
29 # add a item (button) to the ToolBar
30 plugin_api.AddToolbarItem(self.tb_button)
31
32 def onTaskOpened(self, plugin_api):
33 # add a item (button) to the ToolBar
34 self.tb_Taskbutton = gtk.ToolButton(gtk.STOCK_EXECUTE)
35 self.tb_Taskbutton.set_label("Hello World")
36 self.tb_Taskbutton.connect('clicked', self.onTbTaskButton, plugin_api)
37 plugin_api.AddTaskToolbarItem(gtk.SeparatorToolItem())
38 plugin_api.AddTaskToolbarItem(self.tb_Taskbutton)
39
40 def deactivate(self, plugin_api):
41 plugin_api.RemoveMenuItem(self.menu_item)
42 plugin_api.RemoveToolbarItem(self.tb_button)
43 plugin_api.RemoveToolbarItem(None, self.separator)
44
45 #load a dialog with a String
46 def loadDialog(self, msg):
47 path = os.path.dirname(os.path.abspath(__file__))
48 glade_file = os.path.join(path, "hello_world.glade")
49 wTree = gtk.glade.XML(glade_file, "helloworld")
50 self.dialog = wTree.get_widget("helloworld")
51 lblHelloWorld = wTree.get_widget("lbl_helloworld")
52 lblHelloWorld.set_text(msg)
53
54 self.dialog.connect("delete_event", self.close_dialog)
55 self.dialog.connect("response", self.close_dialog)
56
57 self.dialog.show_all()
58
59 def close_dialog(self, widget, data=None):
60 self.dialog.destroy()
61 return True
62
63 # plugin features
64 def onTesteMenu(self, widget):
65 self.loadDialog("Hello World! From the MenuBar! :-)")
66
67 def onTbButton(self, widget):
68 self.loadDialog("Hello World! From the ToolBar! :-)")
69
70 def onTbTaskButton(self, widget, plugin_api):
71 self.loadDialog("Hello World! The tag @hello_world was just added to the end of the task!")
72 plugin_api.add_tag("hello_world")
73 #plugin_api.add_tag_attribute("@addingtag", "atrrib_teste", "teste")
74
75 def teste(self):
76 print "TESTE!"
77
078
=== modified file 'GTG/taskbrowser/browser.py'
--- GTG/taskbrowser/browser.py 2009-07-28 15:57:10 +0000
+++ GTG/taskbrowser/browser.py 2009-07-29 15:14:01 +0000
@@ -40,6 +40,9 @@
40from GTG.taskbrowser import GnomeConfig40from GTG.taskbrowser import GnomeConfig
41from GTG.taskbrowser import browser_tools41from GTG.taskbrowser import browser_tools
42from GTG.tools import colors, openurl42from GTG.tools import colors, openurl
43from GTG.core.plugins.manager import PluginManager
44from GTG.core.plugins.engine import PluginEngine
45from GTG.core.plugins.api import PluginAPI
4346
44#=== OBJECTS ==================================================================47#=== OBJECTS ==================================================================
4548
@@ -120,6 +123,9 @@
120123
121 # Define accelerator keys124 # Define accelerator keys
122 self.init_accelerators()125 self.init_accelerators()
126
127 # Initialize the plugin-engine
128 self.init_plugin_engine()
123129
124 # NOTES130 # NOTES
125 self.init_note_support()131 self.init_note_support()
@@ -138,6 +144,7 @@
138 self.priv['selected_rows'] = None144 self.priv['selected_rows'] = None
139 self.priv['workview'] = False145 self.priv['workview'] = False
140 self.priv['noteview'] = False146 self.priv['noteview'] = False
147 self.priv['workview_task_filter'] = []
141148
142 def init_icon_theme(self):149 def init_icon_theme(self):
143 icon_dirs = [GTG.DATA_DIR, os.path.join(GTG.DATA_DIR, "icons")]150 icon_dirs = [GTG.DATA_DIR, os.path.join(GTG.DATA_DIR, "icons")]
@@ -262,7 +269,10 @@
262 "on_about_close":269 "on_about_close":
263 self.on_about_close,270 self.on_about_close,
264 "on_nonworkviewtag_toggled":271 "on_nonworkviewtag_toggled":
265 self.on_nonworkviewtag_toggled}272 self.on_nonworkviewtag_toggled,
273 "on_pluginmanager_activate":
274 self.on_pluginmanager_activate
275 }
266276
267 self.wTree.signal_autoconnect(SIGNAL_CONNECTIONS_DIC)277 self.wTree.signal_autoconnect(SIGNAL_CONNECTIONS_DIC)
268 if (self.window):278 if (self.window):
@@ -329,6 +339,33 @@
329 key, mod = gtk.accelerator_parse('<Control>i')339 key, mod = gtk.accelerator_parse('<Control>i')
330 task_dismiss.add_accelerator(340 task_dismiss.add_accelerator(
331 'activate', agr, key, mod, gtk.ACCEL_VISIBLE)341 'activate', agr, key, mod, gtk.ACCEL_VISIBLE)
342
343 def init_plugin_engine(self):
344 # plugins - Init
345 self.pengine = PluginEngine(GTG.PLUGIN_DIR)
346 # loads the plugins in the plugin dir
347 self.plugins = self.pengine.LoadPlugins()
348
349 # checks the conf for user settings
350 if self.config.has_key("plugins"):
351 if self.config["plugins"].has_key("enabled"):
352 plugins_enabled = self.config["plugins"]["enabled"]
353 for p in self.plugins:
354 if p['name'] in plugins_enabled:
355 p['state'] = True
356
357 if self.config["plugins"].has_key("disabled"):
358 plugins_disabled = self.config["plugins"]["disabled"]
359 for p in self.plugins:
360 if p['name'] in plugins_disabled:
361 p['state'] = False
362
363 # initializes the plugin api class
364 self.plugin_api = PluginAPI(self.window, self.config, self.wTree, self.req, \
365 self.task_tview, self.priv['workview_task_filter'], \
366 self.tagpopup, self.tag_tview, None, None)
367 # initializes and activates each plugin (that is enabled)
368 self.pengine.activatePlugins(self.plugins, self.plugin_api)
332369
333 def init_note_support(self):370 def init_note_support(self):
334 self.notes = EXPERIMENTAL_NOTES371 self.notes = EXPERIMENTAL_NOTES
@@ -667,9 +704,9 @@
667 self.opened_task[uid].present()704 self.opened_task[uid].present()
668 else:705 else:
669 tv = TaskEditor(706 tv = TaskEditor(
670 self.req, t, self.do_refresh, self.on_delete_task,707 self.req, t, self.plugins, self.do_refresh,
671 self.close_task, self.open_task, self.get_tasktitle,708 self.on_delete_task, self.close_task, self.open_task,
672 notes=self.notes)709 self.get_tasktitle, notes=self.notes)
673 #registering as opened710 #registering as opened
674 self.opened_task[uid] = tv711 self.opened_task[uid] = tv
675712
@@ -861,6 +898,9 @@
861 view = "workview"898 view = "workview"
862 else:899 else:
863 view = "default"900 view = "default"
901
902 # plugins are deactivated
903 self.pengine.deactivatePlugins(self.plugins, self.plugin_api)
864904
865 # Populate configuration dictionary905 # Populate configuration dictionary
866 self.config["browser"] = {906 self.config["browser"] = {
@@ -899,6 +939,11 @@
899 self.config["browser"]["view"] = view939 self.config["browser"]["view"] = view
900 if self.notes:940 if self.notes:
901 self.config["browser"]["experimental_notes"] = True941 self.config["browser"]["experimental_notes"] = True
942
943 # adds the plugin settings to the conf
944 self.config["plugins"] = {}
945 self.config["plugins"]["disabled"] = self.pengine.disabledPlugins(self.plugins)
946 self.config["plugins"]["enabled"] = self.pengine.enabledPlugins(self.plugins)
902947
903 def on_about_clicked(self, widget):948 def on_about_clicked(self, widget):
904 self.about.show()949 self.about.show()
@@ -1275,6 +1320,9 @@
1275 if selection.count_selected_rows() > 0:1320 if selection.count_selected_rows() > 0:
1276 self.ctask_tview.get_selection().unselect_all()1321 self.ctask_tview.get_selection().unselect_all()
1277 self.task_tview.get_selection().unselect_all()1322 self.task_tview.get_selection().unselect_all()
1323
1324 def on_pluginmanager_activate(self, widget) :
1325 PluginManager(self.window, self.plugins, self.pengine, self.plugin_api)
12781326
1279 def on_close(self, widget=None):1327 def on_close(self, widget=None):
1280 """Closing the window."""1328 """Closing the window."""
@@ -1358,6 +1406,10 @@
1358 if self.priv['workview']:1406 if self.priv['workview']:
1359 count = len(\1407 count = len(\
1360 self.req.get_active_tasks_list(tags=[tag], workable=True))1408 self.req.get_active_tasks_list(tags=[tag], workable=True))
1409 for tid in self.priv['workview_task_filter']:
1410 for t in self.req.get_task(tid).get_tags():
1411 if tag == t:
1412 count = count -1
1361 else:1413 else:
1362 count = len(\1414 count = len(\
1363 self.req.get_tasks_list(started_only=False, tags=[tag]))1415 self.req.get_tasks_list(started_only=False, tags=[tag]))
@@ -1399,9 +1451,10 @@
1399 tags=tag_list, notag_only=notag_only, workable=True,1451 tags=tag_list, notag_only=notag_only, workable=True,
1400 started_only=False)1452 started_only=False)
1401 for tid in tasks:1453 for tid in tasks:
1402 self.add_task_tree_to_list(1454 if tid not in self.priv['workview_task_filter']: # this filters out tasks
1403 new_taskts, tid, None, selected_uid, treeview=False)1455 self.add_task_tree_to_list(new_taskts,tid, None,\
1404 nbr_of_tasks = len(tasks)1456 selected_uid, treeview=False)
1457 nbr_of_tasks = len(tasks) - len(self.priv['workview_task_filter'])
14051458
1406 else:1459 else:
1407 #building the classical treeview1460 #building the classical treeview
14081461
=== modified file 'GTG/taskbrowser/taskbrowser.glade'
--- GTG/taskbrowser/taskbrowser.glade 2009-07-14 13:02:15 +0000
+++ GTG/taskbrowser/taskbrowser.glade 2009-07-29 15:14:01 +0000
@@ -1,991 +1,1353 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>1<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
2<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">2<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
3<!--Generated with glade3 3.4.5 on Tue Mar 31 14:57:26 2009 -->3
4<glade-interface>4<glade-interface>
5 <widget class="GtkWindow" id="MainWindow">5
6 <property name="title" translatable="yes">Getting Things Gnome!</property>6<widget class="GtkWindow" id="MainWindow">
7 <property name="default_width">640</property>7 <property name="title" translatable="yes">Getting Things Gnome!</property>
8 <property name="default_height">480</property>8 <property name="type">GTK_WINDOW_TOPLEVEL</property>
9 <signal name="configure_event" handler="on_move"/>9 <property name="window_position">GTK_WIN_POS_NONE</property>
10 <signal name="size_allocate" handler="on_size_allocate"/>10 <property name="modal">False</property>
11 <signal name="delete_event" handler="on_delete"/>11 <property name="default_width">640</property>
12 <child>12 <property name="default_height">480</property>
13 <widget class="GtkVBox" id="vbox1">13 <property name="resizable">True</property>
14 <property name="visible">True</property>14 <property name="destroy_with_parent">False</property>
15 <child>15 <property name="decorated">True</property>
16 <widget class="GtkMenuBar" id="browser_menu">16 <property name="skip_taskbar_hint">False</property>
17 <property name="visible">True</property>17 <property name="skip_pager_hint">False</property>
18 <child>18 <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
19 <widget class="GtkMenuItem" id="menuitem1">19 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
20 <property name="visible">True</property>20 <property name="focus_on_map">True</property>
21 <property name="label" translatable="yes">_File</property>21 <property name="urgency_hint">False</property>
22 <property name="use_underline">True</property>22 <signal name="configure_event" handler="on_move"/>
23 <child>23 <signal name="size_allocate" handler="on_size_allocate"/>
24 <widget class="GtkMenu" id="menu1">24 <signal name="delete_event" handler="on_delete"/>
25 <property name="visible">True</property>25
26 <child>26 <child>
27 <widget class="GtkImageMenuItem" id="file_quit">27 <widget class="GtkVBox" id="vbox1">
28 <property name="visible">True</property>28 <property name="visible">True</property>
29 <property name="label">gtk-quit</property>29 <property name="homogeneous">False</property>
30 <property name="use_underline">True</property>30 <property name="spacing">0</property>
31 <property name="use_stock">True</property>31
32 <signal name="activate" handler="gtk_main_quit"/>32 <child>
33 </widget>33 <widget class="GtkMenuBar" id="browser_menu">
34 </child>34 <property name="visible">True</property>
35 </widget>35 <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
36 </child>36 <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
37 </widget>37
38 </child>38 <child>
39 <child>39 <widget class="GtkMenuItem" id="menuitem1">
40 <widget class="GtkMenuItem" id="menu_edit">40 <property name="visible">True</property>
41 <property name="label" translatable="yes">_Edit</property>41 <property name="label" translatable="yes">_File</property>
42 <property name="use_underline">True</property>42 <property name="use_underline">True</property>
43 <child>43
44 <widget class="GtkMenu" id="menu2">44 <child>
45 <property name="visible">True</property>45 <widget class="GtkMenu" id="menuitem1_menu">
46 <child>46
47 <widget class="GtkImageMenuItem" id="edit_undo">47 <child>
48 <property name="visible">True</property>48 <widget class="GtkImageMenuItem" id="file_quit">
49 <property name="label">gtk-undo</property>49 <property name="visible">True</property>
50 <property name="use_underline">True</property>50 <property name="label">gtk-quit</property>
51 <property name="use_stock">True</property>51 <property name="use_stock">True</property>
52 </widget>52 <signal name="activate" handler="gtk_main_quit"/>
53 </child>53 </widget>
54 <child>54 </child>
55 <widget class="GtkImageMenuItem" id="edit_redo">55 </widget>
56 <property name="visible">True</property>56 </child>
57 <property name="label">gtk-redo</property>57 </widget>
58 <property name="use_underline">True</property>58 </child>
59 <property name="use_stock">True</property>59
60 </widget>60 <child>
61 </child>61 <widget class="GtkMenuItem" id="menu_edit">
62 </widget>62 <property name="label" translatable="yes">_Edit</property>
63 </child>63 <property name="use_underline">True</property>
64 </widget>64
65 </child>65 <child>
66 <child>66 <widget class="GtkMenu" id="menu_edit_menu">
67 <widget class="GtkMenuItem" id="menu_view">67
68 <property name="visible">True</property>68 <child>
69 <property name="label" translatable="yes">_View</property>69 <widget class="GtkImageMenuItem" id="edit_undo">
70 <property name="use_underline">True</property>70 <property name="visible">True</property>
71 <child>71 <property name="label">gtk-undo</property>
72 <widget class="GtkMenu" id="menu5">72 <property name="use_stock">True</property>
73 <property name="visible">True</property>73 </widget>
74 <child>74 </child>
75 <widget class="GtkCheckMenuItem" id="view_workview">75
76 <property name="visible">True</property>76 <child>
77 <property name="label" translatable="yes">_Work View</property>77 <widget class="GtkImageMenuItem" id="edit_redo">
78 <property name="use_underline">True</property>78 <property name="visible">True</property>
79 <signal name="toggled" handler="on_view_workview_toggled"/>79 <property name="label">gtk-redo</property>
80 </widget>80 <property name="use_stock">True</property>
81 </child>81 </widget>
82 <child>82 </child>
83 <widget class="GtkSeparatorMenuItem" id="separator1">83 </widget>
84 <property name="visible">True</property>84 </child>
85 </widget>85 </widget>
86 </child>86 </child>
87 <child>87
88 <widget class="GtkCheckMenuItem" id="bgcol_enable">88 <child>
89 <property name="visible">True</property>89 <widget class="GtkMenuItem" id="menu_view">
90 <property name="label" translatable="yes">_Background Colors</property>90 <property name="visible">True</property>
91 <property name="use_underline">True</property>91 <property name="label" translatable="yes">_View</property>
92 <property name="active">True</property>92 <property name="use_underline">True</property>
93 <signal name="toggled" handler="on_bg_color_toggled"/>93
94 </widget>94 <child>
95 </child>95 <widget class="GtkMenu" id="menu_view_menu">
96 <child>96
97 <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">97 <child>
98 <property name="visible">True</property>98 <widget class="GtkCheckMenuItem" id="view_workview">
99 </widget>99 <property name="visible">True</property>
100 </child>100 <property name="label" translatable="yes">_Work View</property>
101 <child>101 <property name="use_underline">True</property>
102 <widget class="GtkCheckMenuItem" id="view_sidebar">102 <property name="active">False</property>
103 <property name="visible">True</property>103 <signal name="toggled" handler="on_view_workview_toggled"/>
104 <property name="label" translatable="yes">_Tags Sidebar</property>104 </widget>
105 <property name="use_underline">True</property>105 </child>
106 <signal name="toggled" handler="on_view_sidebar_toggled"/>106
107 </widget>107 <child>
108 </child>108 <widget class="GtkSeparatorMenuItem" id="separator1">
109 <child>109 <property name="visible">True</property>
110 <widget class="GtkCheckMenuItem" id="view_closed">110 </widget>
111 <property name="visible">True</property>111 </child>
112 <property name="label" translatable="yes">_Closed Tasks Pane</property>112
113 <property name="use_underline">True</property>113 <child>
114 <signal name="toggled" handler="on_view_closed_toggled"/>114 <widget class="GtkCheckMenuItem" id="bgcol_enable">
115 </widget>115 <property name="visible">True</property>
116 </child>116 <property name="label" translatable="yes">_Background Colors</property>
117 <child><widget class="GtkCheckMenuItem" id="view_toolbar">117 <property name="use_underline">True</property>
118 <property name="visible">True</property>118 <property name="active">True</property>
119 <property name="label" translatable="yes">T_oolbar</property>119 <signal name="toggled" handler="on_bg_color_toggled"/>
120 <property name="use_underline">True</property>120 </widget>
121 <signal name="toggled" handler="on_view_toolbar_toggled" />121 </child>
122 </widget></child>122
123 <child>123 <child>
124 <widget class="GtkCheckMenuItem" id="view_quickadd">124 <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
125 <property name="visible">True</property>125 <property name="visible">True</property>
126 <property name="label" translatable="yes">_Quick Add Entry</property>126 </widget>
127 <property name="use_underline">True</property>127 </child>
128 <signal name="toggled" handler="on_view_quickadd_toggled"/>128
129 </widget>129 <child>
130 </child></widget>130 <widget class="GtkCheckMenuItem" id="view_sidebar">
131 </child>131 <property name="visible">True</property>
132 </widget>132 <property name="label" translatable="yes">_Tags Sidebar</property>
133 </child>133 <property name="use_underline">True</property>
134 <child>134 <property name="active">False</property>
135 <widget class="GtkMenuItem" id="bm_task">135 <signal name="toggled" handler="on_view_sidebar_toggled"/>
136 <property name="visible">True</property>136 </widget>
137 <property name="label" translatable="yes">_Tasks</property>137 </child>
138 <property name="use_underline">True</property>138
139 <child>139 <child>
140 <widget class="GtkMenu" id="menu4">140 <widget class="GtkCheckMenuItem" id="view_closed">
141 <property name="visible">True</property>141 <property name="visible">True</property>
142 <child>142 <property name="label" translatable="yes">_Closed Tasks Pane</property>
143 <widget class="GtkImageMenuItem" id="new_task_mi">143 <property name="use_underline">True</property>
144 <property name="visible">True</property>144 <property name="active">False</property>
145 <property name="tooltip" translatable="yes">Create a new task</property>145 <signal name="toggled" handler="on_view_closed_toggled"/>
146 <property name="label" translatable="yes">New _Task</property>146 </widget>
147 <property name="use_underline">True</property>147 </child>
148 <signal name="activate" handler="on_add_task"/>148
149 <child internal-child="image">149 <child>
150 <widget class="GtkImage" id="image1">150 <widget class="GtkCheckMenuItem" id="view_toolbar">
151 <property name="visible">True</property>151 <property name="visible">True</property>
152 <property name="pixel_size">16</property>152 <property name="label" translatable="yes">T_oolbar</property>
153 <property name="icon_name">gtg-task-new</property>153 <property name="use_underline">True</property>
154 </widget>154 <property name="active">False</property>
155 </child>155 <signal name="toggled" handler="on_view_toolbar_toggled"/>
156 </widget>156 </widget>
157 </child>157 </child>
158 <child>158
159 <widget class="GtkImageMenuItem" id="new_subtask_mi">159 <child>
160 <property name="visible">True</property>160 <widget class="GtkCheckMenuItem" id="view_quickadd">
161 <property name="label" translatable="yes">New _Subtask</property>161 <property name="visible">True</property>
162 <property name="use_underline">True</property>162 <property name="label" translatable="yes">_Quick Add Entry</property>
163 <signal name="activate" handler="on_add_subtask"/>163 <property name="use_underline">True</property>
164 <child internal-child="image">164 <property name="active">False</property>
165 <widget class="GtkImage" id="image2">165 <signal name="toggled" handler="on_view_quickadd_toggled"/>
166 <property name="visible">True</property>166 </widget>
167 <property name="pixel_size">16</property>167 </child>
168 <property name="icon_name">gtg-task-new</property>168 </widget>
169 </widget>169 </child>
170 </child>170 </widget>
171 </widget>171 </child>
172 </child>172
173 <child>173 <child>
174 <widget class="GtkImageMenuItem" id="edit_mi">174 <widget class="GtkMenuItem" id="bm_task">
175 <property name="visible">True</property>175 <property name="visible">True</property>
176 <property name="label">gtk-edit</property>176 <property name="label" translatable="yes">_Tasks</property>
177 <property name="use_underline">True</property>177 <property name="use_underline">True</property>
178 <property name="use_stock">True</property>178
179 <signal name="activate" handler="on_edit_active_task"/>179 <child>
180 </widget>180 <widget class="GtkMenu" id="bm_task_menu">
181 </child>181
182 <child>182 <child>
183 <widget class="GtkSeparatorMenuItem" id="separatormenuitem2">183 <widget class="GtkMenuItem" id="new_task_mi">
184 <property name="visible">True</property>184 <property name="visible">True</property>
185 </widget>185 <property name="tooltip" translatable="yes">Create a new task</property>
186 </child>186 <property name="label" translatable="yes">New _Task</property>
187 <child>187 <property name="use_underline">True</property>
188 <widget class="GtkImageMenuItem" id="mark_done_mi">188 <signal name="activate" handler="on_add_task"/>
189 <property name="visible">True</property>189 </widget>
190 <property name="label" translatable="yes">Mark as _Done</property>190 </child>
191 <property name="use_underline">True</property>191
192 <signal name="activate" handler="on_mark_as_done"/>192 <child>
193 <child internal-child="image">193 <widget class="GtkMenuItem" id="new_subtask_mi">
194 <widget class="GtkImage" id="image3">194 <property name="visible">True</property>
195 <property name="visible">True</property>195 <property name="label" translatable="yes">New _Subtask</property>
196 <property name="pixel_size">16</property>196 <property name="use_underline">True</property>
197 <property name="icon_name">gtg-task-done</property>197 <signal name="activate" handler="on_add_subtask"/>
198 </widget>198 </widget>
199 </child>199 </child>
200 </widget>200
201 </child>201 <child>
202 <child>202 <widget class="GtkImageMenuItem" id="edit_mi">
203 <widget class="GtkImageMenuItem" id="task_dismiss">203 <property name="visible">True</property>
204 <property name="visible">True</property>204 <property name="label">gtk-edit</property>
205 <property name="label" translatable="yes">D_ismiss</property>205 <property name="use_stock">True</property>
206 <property name="use_underline">True</property>206 <signal name="activate" handler="on_edit_active_task"/>
207 <signal name="activate" handler="on_dismiss_task"/>207 </widget>
208 <child internal-child="image">208 </child>
209 <widget class="GtkImage" id="image4">209
210 <property name="visible">True</property>210 <child>
211 <property name="pixel_size">16</property>211 <widget class="GtkSeparatorMenuItem" id="separatormenuitem2">
212 <property name="icon_name">gtg-task-dismiss</property>212 <property name="visible">True</property>
213 </widget>213 </widget>
214 </child>214 </child>
215 </widget>215
216 </child>216 <child>
217 <child>217 <widget class="GtkMenuItem" id="mark_done_mi">
218 <widget class="GtkImageMenuItem" id="delete_mi">218 <property name="visible">True</property>
219 <property name="visible">True</property>219 <property name="label" translatable="yes">Mark as _Done</property>
220 <property name="label">gtk-delete</property>220 <property name="use_underline">True</property>
221 <property name="use_underline">True</property>221 <signal name="activate" handler="on_mark_as_done"/>
222 <property name="use_stock">True</property>222 </widget>
223 <signal name="activate" handler="on_delete_task"/>223 </child>
224 </widget>224
225 </child>225 <child>
226 </widget>226 <widget class="GtkMenuItem" id="task_dismiss">
227 </child>227 <property name="visible">True</property>
228 </widget>228 <property name="label" translatable="yes">D_ismiss</property>
229 </child>229 <property name="use_underline">True</property>
230 <child>230 <signal name="activate" handler="on_dismiss_task"/>
231 <widget class="GtkMenuItem" id="menuitem4">231 </widget>
232 <property name="visible">True</property>232 </child>
233 <property name="label" translatable="yes">_Help</property>233
234 <property name="use_underline">True</property>234 <child>
235 <child>235 <widget class="GtkImageMenuItem" id="delete_mi">
236 <widget class="GtkMenu" id="menu3">236 <property name="visible">True</property>
237 <property name="visible">True</property>237 <property name="label">gtk-delete</property>
238 <child>238 <property name="use_stock">True</property>
239 <widget class="GtkImageMenuItem" id="imagemenuitem10">239 <signal name="activate" handler="on_delete_task"/>
240 <property name="visible">True</property>240 </widget>
241 <property name="label">gtk-about</property>241 </child>
242 <property name="use_underline">True</property>242 </widget>
243 <property name="use_stock">True</property>243 </child>
244 <signal name="activate" handler="on_about_clicked"/>244 </widget>
245 </widget>245 </child>
246 </child>246
247 </widget>247 <child>
248 </child>248 <widget class="GtkMenuItem" id="menu_plugin">
249 </widget>249 <property name="visible">True</property>
250 </child>250 <property name="label" translatable="yes">_Plugins</property>
251 </widget>251 <property name="use_underline">True</property>
252 <packing>252
253 <property name="expand">False</property>253 <child>
254 </packing>254 <widget class="GtkMenu" id="menu_plugin_menu">
255 </child>255
256 <child>256 <child>
257 <widget class="GtkToolbar" id="task_tb">257 <widget class="GtkMenuItem" id="pluginmanager_menu">
258 <property name="visible">True</property>258 <property name="visible">True</property>
259 <child>259 <property name="label" translatable="yes">_Plugin Preferences</property>
260 <widget class="GtkToolButton" id="new_task_b">260 <property name="use_underline">True</property>
261 <property name="visible">True</property>261 <signal name="activate" handler="on_pluginmanager_activate" last_modification_time="Wed, 29 Jul 2009 14:36:59 GMT"/>
262 <property name="label" translatable="yes">New Task</property>262 </widget>
263 <property name="icon_name">gtg-task-new</property>263 </child>
264 <signal name="clicked" handler="on_add_task"/>264 </widget>
265 </widget>265 </child>
266 <packing>266 </widget>
267 <property name="homogeneous">True</property>267 </child>
268 </packing>268
269 </child>269 <child>
270 <child>270 <widget class="GtkMenuItem" id="menuitem4">
271 <widget class="GtkToolButton" id="new_subtask_b">271 <property name="visible">True</property>
272 <property name="label" translatable="yes">New Subtask</property>272 <property name="label" translatable="yes">_Help</property>
273 <property name="icon_name">gtg-task-new</property>273 <property name="use_underline">True</property>
274 <signal name="clicked" handler="on_add_subtask"/>274
275 </widget>275 <child>
276 <packing>276 <widget class="GtkMenu" id="menuitem4_menu">
277 <property name="homogeneous">True</property>277
278 </packing>278 <child>
279 </child>279 <widget class="GtkImageMenuItem" id="imagemenuitem10">
280 <child>280 <property name="visible">True</property>
281 <widget class="GtkToolButton" id="new_note_button">281 <property name="label">gtk-about</property>
282 <property name="visible">True</property>282 <property name="use_stock">True</property>
283 <property name="label" translatable="yes">New Note</property>283 <signal name="activate" handler="on_about_clicked"/>
284 <property name="icon_name">gtg-note-new</property>284 </widget>
285 <signal name="clicked" handler="on_add_note"/>285 </child>
286 </widget>286 </widget>
287 <packing>287 </child>
288 <property name="homogeneous">True</property>288 </widget>
289 </packing>289 </child>
290 </child>290 </widget>
291 <child>291 <packing>
292 <widget class="GtkToolButton" id="edit_b">292 <property name="padding">0</property>
293 <property name="visible">True</property>293 <property name="expand">False</property>
294 <property name="label" translatable="yes">Edit</property>294 <property name="fill">True</property>
295 <property name="stock_id">gtk-edit</property>295 </packing>
296 <signal name="clicked" handler="on_edit_active_task"/>296 </child>
297 </widget>297
298 <packing>298 <child>
299 <property name="homogeneous">True</property>299 <widget class="GtkToolbar" id="task_tb">
300 </packing>300 <property name="visible">True</property>
301 </child>301 <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
302 <child>302 <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
303 <widget class="GtkSeparatorToolItem" id="&lt;separateur&gt;">303 <property name="tooltips">True</property>
304 </widget>304 <property name="show_arrow">True</property>
305 <packing>305
306 <property name="homogeneous">True</property>306 <child>
307 </packing>307 <widget class="GtkToolButton" id="new_task_b">
308 </child>308 <property name="visible">True</property>
309 <child>309 <property name="label" translatable="yes">New Task</property>
310 <widget class="GtkToolButton" id="Undo">310 <property name="use_underline">True</property>
311 <property name="label" translatable="yes">Undo</property>311 <property name="visible_horizontal">True</property>
312 <property name="stock_id">gtk-undo</property>312 <property name="visible_vertical">True</property>
313 </widget>313 <property name="is_important">False</property>
314 <packing>314 <signal name="clicked" handler="on_add_task"/>
315 <property name="homogeneous">True</property>315 </widget>
316 </packing>316 <packing>
317 </child>317 <property name="expand">False</property>
318 <child>318 <property name="homogeneous">True</property>
319 <widget class="GtkToolButton" id="Redo">319 </packing>
320 <property name="label" translatable="yes">Redo</property>320 </child>
321 <property name="stock_id">gtk-redo</property>321
322 </widget>322 <child>
323 <packing>323 <widget class="GtkToolButton" id="new_subtask_b">
324 <property name="homogeneous">True</property>324 <property name="label" translatable="yes">New Subtask</property>
325 </packing>325 <property name="use_underline">True</property>
326 </child>326 <property name="visible_horizontal">True</property>
327 <child>327 <property name="visible_vertical">True</property>
328 <widget class="GtkSeparatorToolItem" id="toolbutton2">328 <property name="is_important">False</property>
329 <property name="visible">True</property>329 <signal name="clicked" handler="on_add_subtask"/>
330 </widget>330 </widget>
331 <packing>331 <packing>
332 <property name="homogeneous">True</property>332 <property name="expand">False</property>
333 </packing>333 <property name="homogeneous">True</property>
334 </child>334 </packing>
335 <child>335 </child>
336 <widget class="GtkToolButton" id="mark_as_done_b">336
337 <property name="visible">True</property>337 <child>
338 <property name="label" translatable="yes">Mark as Done</property>338 <widget class="GtkToolButton" id="new_note_button">
339 <property name="icon_name">gtg-task-done</property>339 <property name="visible">True</property>
340 <signal name="clicked" handler="on_mark_as_done"/>340 <property name="label" translatable="yes">New Note</property>
341 </widget>341 <property name="use_underline">True</property>
342 <packing>342 <property name="visible_horizontal">True</property>
343 <property name="homogeneous">True</property>343 <property name="visible_vertical">True</property>
344 </packing>344 <property name="is_important">False</property>
345 </child>345 <signal name="clicked" handler="on_add_note"/>
346 <child>346 </widget>
347 <widget class="GtkToolButton" id="dismiss">347 <packing>
348 <property name="visible">True</property>348 <property name="expand">False</property>
349 <property name="label" translatable="yes">Dismiss</property>349 <property name="homogeneous">True</property>
350 <property name="icon_name">gtg-task-dismiss</property>350 </packing>
351 <signal name="clicked" handler="on_dismiss_task"/>351 </child>
352 </widget>352
353 <packing>353 <child>
354 <property name="homogeneous">True</property>354 <widget class="GtkToolButton" id="edit_b">
355 </packing>355 <property name="visible">True</property>
356 </child>356 <property name="label" translatable="yes">Edit</property>
357 <child>357 <property name="use_underline">True</property>
358 <widget class="GtkSeparatorToolItem" id="toolbutton1">358 <property name="stock_id">gtk-edit</property>
359 <property name="visible">True</property>359 <property name="visible_horizontal">True</property>
360 </widget>360 <property name="visible_vertical">True</property>
361 <packing>361 <property name="is_important">False</property>
362 <property name="homogeneous">True</property>362 <signal name="clicked" handler="on_edit_active_task"/>
363 </packing>363 </widget>
364 </child>364 <packing>
365 <child>365 <property name="expand">False</property>
366 <widget class="GtkToggleToolButton" id="note_toggle">366 <property name="homogeneous">True</property>
367 <property name="visible">True</property>367 </packing>
368 <property name="label" translatable="yes">View Notes</property>368 </child>
369 <property name="stock_id">gtk-file</property>369
370 <signal name="toggled" handler="on_note_toggled"/>370 <child>
371 </widget>371 <widget class="GtkSeparatorToolItem" id="&lt;separateur&gt;">
372 <packing>372 <property name="draw">True</property>
373 <property name="homogeneous">True</property>373 <property name="visible_horizontal">True</property>
374 </packing>374 <property name="visible_vertical">True</property>
375 </child>375 </widget>
376 <child>376 <packing>
377 <widget class="GtkToggleToolButton" id="workview_toggle">377 <property name="expand">False</property>
378 <property name="visible">True</property>378 <property name="homogeneous">True</property>
379 <property name="label" translatable="yes">Work View</property>379 </packing>
380 <property name="stock_id">gtk-index</property>380 </child>
381 <signal name="toggled" handler="on_workview_toggled"/>381
382 </widget>382 <child>
383 <packing>383 <widget class="GtkToolButton" id="Undo">
384 <property name="homogeneous">True</property>384 <property name="label" translatable="yes">Undo</property>
385 </packing>385 <property name="use_underline">True</property>
386 </child>386 <property name="stock_id">gtk-undo</property>
387 </widget>387 <property name="visible_horizontal">True</property>
388 <packing>388 <property name="visible_vertical">True</property>
389 <property name="expand">False</property>389 <property name="is_important">False</property>
390 <property name="position">1</property>390 </widget>
391 </packing>391 <packing>
392 </child>392 <property name="expand">False</property>
393 <child>393 <property name="homogeneous">True</property>
394 <widget class="GtkHPaned" id="hpaned1">394 </packing>
395 <property name="visible">True</property>395 </child>
396 <property name="can_focus">True</property>396
397 <property name="position">200</property>397 <child>
398 <property name="position_set">True</property>398 <widget class="GtkToolButton" id="Redo">
399 <child>399 <property name="label" translatable="yes">Redo</property>
400 <widget class="GtkVBox" id="sidebar">400 <property name="use_underline">True</property>
401 <child>401 <property name="stock_id">gtk-redo</property>
402 <widget class="GtkHBox" id="hbox4">402 <property name="visible_horizontal">True</property>
403 <property name="visible">True</property>403 <property name="visible_vertical">True</property>
404 <child>404 <property name="is_important">False</property>
405 <widget class="GtkImage" id="image8">405 </widget>
406 <property name="visible">True</property>406 <packing>
407 <property name="xpad">5</property>407 <property name="expand">False</property>
408 <property name="icon_name">gtg-tag</property>408 <property name="homogeneous">True</property>
409 </widget>409 </packing>
410 <packing>410 </child>
411 <property name="expand">False</property>411
412 </packing>412 <child>
413 </child>413 <widget class="GtkSeparatorToolItem" id="toolbutton2">
414 <child>414 <property name="visible">True</property>
415 <widget class="GtkLabel" id="label4">415 <property name="draw">True</property>
416 <property name="visible">True</property>416 <property name="visible_horizontal">True</property>
417 <property name="xalign">0</property>417 <property name="visible_vertical">True</property>
418 <property name="label" translatable="yes">Tags</property>418 </widget>
419 </widget>419 <packing>
420 <packing>420 <property name="expand">False</property>
421 <property name="position">1</property>421 <property name="homogeneous">True</property>
422 </packing>422 </packing>
423 </child>423 </child>
424 <child>424
425 <widget class="GtkButton" id="button-sidebar-close">425 <child>
426 <property name="visible">True</property>426 <widget class="GtkToolButton" id="mark_as_done_b">
427 <property name="can_focus">True</property>427 <property name="visible">True</property>
428 <property name="receives_default">True</property>428 <property name="label" translatable="yes">Mark as Done</property>
429 <property name="relief">GTK_RELIEF_NONE</property>429 <property name="use_underline">True</property>
430 <property name="response_id">0</property>430 <property name="visible_horizontal">True</property>
431 <signal name="clicked" handler="on_view_sidebar_toggled"/>431 <property name="visible_vertical">True</property>
432 <child>432 <property name="is_important">False</property>
433 <widget class="GtkImage" id="image9">433 <signal name="clicked" handler="on_mark_as_done"/>
434 <property name="visible">True</property>434 </widget>
435 <property name="stock">gtk-close</property>435 <packing>
436 <property name="icon_size">1</property>436 <property name="expand">False</property>
437 </widget>437 <property name="homogeneous">True</property>
438 </child>438 </packing>
439 </widget>439 </child>
440 <packing>440
441 <property name="expand">False</property>441 <child>
442 <property name="position">2</property>442 <widget class="GtkToolButton" id="dismiss">
443 </packing>443 <property name="visible">True</property>
444 </child>444 <property name="label" translatable="yes">Dismiss</property>
445 </widget>445 <property name="use_underline">True</property>
446 <packing>446 <property name="visible_horizontal">True</property>
447 <property name="expand">False</property>447 <property name="visible_vertical">True</property>
448 </packing>448 <property name="is_important">False</property>
449 </child>449 <signal name="clicked" handler="on_dismiss_task"/>
450 <child>450 </widget>
451 <widget class="GtkScrolledWindow" id="sidebar-scroll">451 <packing>
452 <property name="visible">True</property>452 <property name="expand">False</property>
453 <property name="can_focus">True</property>453 <property name="homogeneous">True</property>
454 <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>454 </packing>
455 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>455 </child>
456 <property name="shadow_type">GTK_SHADOW_IN</property>456
457 <child>457 <child>
458 <widget class="GtkTreeView" id="tag_tview">458 <widget class="GtkSeparatorToolItem" id="toolbutton1">
459 <property name="visible">True</property>459 <property name="visible">True</property>
460 <property name="can_focus">True</property>460 <property name="draw">True</property>
461 <signal name="button_press_event" handler="on_tag_treeview_button_press_event"/>461 <property name="visible_horizontal">True</property>
462 <signal name="row_activated" handler="on_select_tag"/>462 <property name="visible_vertical">True</property>
463 <signal name="cursor_changed" handler="on_select_tag"/>463 </widget>
464 </widget>464 <packing>
465 </child>465 <property name="expand">False</property>
466 </widget>466 <property name="homogeneous">True</property>
467 <packing>467 </packing>
468 <property name="position">1</property>468 </child>
469 </packing>469
470 </child>470 <child>
471 </widget>471 <widget class="GtkToggleToolButton" id="note_toggle">
472 <packing>472 <property name="visible">True</property>
473 <property name="resize">True</property>473 <property name="label" translatable="yes">View Notes</property>
474 <property name="shrink">True</property>474 <property name="use_underline">True</property>
475 </packing>475 <property name="stock_id">gtk-file</property>
476 </child>476 <property name="visible_horizontal">True</property>
477 <child>477 <property name="visible_vertical">True</property>
478 <widget class="GtkVBox" id="vbox2">478 <property name="is_important">False</property>
479 <property name="visible">True</property>479 <property name="active">False</property>
480 <child>480 <signal name="toggled" handler="on_note_toggled"/>
481 <widget class="GtkHBox" id="quickadd_pane">481 </widget>
482 <property name="visible">True</property>482 <packing>
483 <child>483 <property name="expand">False</property>
484 <widget class="GtkEntry" id="quickadd_field">484 <property name="homogeneous">True</property>
485 <property name="visible">True</property>485 </packing>
486 <property name="can_focus">True</property>486 </child>
487 <property name="has_focus">True</property>487
488 <property name="is_focus">True</property>488 <child>
489 <property name="can_default">True</property>489 <widget class="GtkToggleToolButton" id="workview_toggle">
490 <signal name="activate" handler="on_quickadd_field_activate"/>490 <property name="visible">True</property>
491 </widget>491 <property name="label" translatable="yes">Work View</property>
492 </child>492 <property name="use_underline">True</property>
493 <child>493 <property name="stock_id">gtk-index</property>
494 <widget class="GtkButton" id="button1">494 <property name="visible_horizontal">True</property>
495 <property name="visible">True</property>495 <property name="visible_vertical">True</property>
496 <property name="can_focus">True</property>496 <property name="is_important">False</property>
497 <property name="receives_default">True</property>497 <property name="active">False</property>
498 <property name="label">gtk-add</property>498 <signal name="toggled" handler="on_workview_toggled"/>
499 <property name="use_stock">True</property>499 </widget>
500 <property name="response_id">0</property>500 <packing>
501 <signal name="clicked" handler="on_quickadd_button_activate"/>501 <property name="expand">False</property>
502 </widget>502 <property name="homogeneous">True</property>
503 <packing>503 </packing>
504 <property name="expand">False</property>504 </child>
505 <property name="fill">False</property>505 </widget>
506 <property name="position">1</property>506 <packing>
507 </packing>507 <property name="padding">0</property>
508 </child>508 <property name="expand">False</property>
509 </widget>509 <property name="fill">True</property>
510 <packing>510 </packing>
511 <property name="expand">False</property>511 </child>
512 <property name="fill">False</property>512
513 <property name="padding">2</property>513 <child>
514 </packing>514 <widget class="GtkHPaned" id="hpaned1">
515 </child>515 <property name="visible">True</property>
516 <child>516 <property name="can_focus">True</property>
517 <widget class="GtkVPaned" id="vpaned1">517 <property name="position">200</property>
518 <property name="visible">True</property>518
519 <property name="can_focus">True</property>519 <child>
520 <property name="position">330</property>520 <widget class="GtkVBox" id="sidebar">
521 <property name="position_set">True</property>521 <property name="homogeneous">False</property>
522 <child>522 <property name="spacing">0</property>
523 <widget class="GtkScrolledWindow" id="main_pane">523
524 <property name="visible">True</property>524 <child>
525 <property name="can_focus">True</property>525 <widget class="GtkHBox" id="hbox4">
526 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>526 <property name="visible">True</property>
527 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>527 <property name="homogeneous">False</property>
528 <child>528 <property name="spacing">0</property>
529 <widget class="GtkTreeView" id="task_tview">529
530 <property name="visible">True</property>530 <child>
531 <property name="can_focus">True</property>531 <widget class="GtkImage" id="image8">
532 <property name="reorderable">True</property>532 <property name="visible">True</property>
533 <property name="rules_hint">True</property>533 <property name="icon_size">4</property>
534 <property name="enable_search">False</property>534 <property name="icon_name">gtg-tag</property>
535 <property name="search_column">8</property>535 <property name="xalign">0.5</property>
536 <property name="rubber_banding">True</property>536 <property name="yalign">0.5</property>
537 <property name="enable_tree_lines">True</property>537 <property name="xpad">5</property>
538 <signal name="button_press_event" handler="on_task_treeview_button_press_event"/>538 <property name="ypad">0</property>
539 <signal name="key_press_event" handler="on_task_treeview_key_press_event"/>539 </widget>
540 <signal name="row_activated" handler="on_edit_active_task"/>540 <packing>
541 <signal name="cursor_changed" handler="on_task_tview_cursor_changed"/>541 <property name="padding">0</property>
542 </widget>542 <property name="expand">False</property>
543 </child>543 <property name="fill">True</property>
544 </widget>544 </packing>
545 <packing>545 </child>
546 <property name="resize">True</property>546
547 <property name="shrink">True</property>547 <child>
548 </packing>548 <widget class="GtkLabel" id="label4">
549 </child>549 <property name="visible">True</property>
550 <child>550 <property name="label" translatable="yes">Tags</property>
551 <widget class="GtkScrolledWindow" id="closed_pane">551 <property name="use_underline">False</property>
552 <property name="height_request">200</property>552 <property name="use_markup">False</property>
553 <property name="can_focus">True</property>553 <property name="justify">GTK_JUSTIFY_LEFT</property>
554 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>554 <property name="wrap">False</property>
555 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>555 <property name="selectable">False</property>
556 <child>556 <property name="xalign">0</property>
557 <widget class="GtkTreeView" id="taskdone_tview">557 <property name="yalign">0.5</property>
558 <property name="visible">True</property>558 <property name="xpad">0</property>
559 <property name="can_focus">True</property>559 <property name="ypad">0</property>
560 <property name="rules_hint">True</property>560 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
561 <property name="search_column">8</property>561 <property name="width_chars">-1</property>
562 <signal name="button_press_event" handler="on_closed_task_treeview_button_press_event"/>562 <property name="single_line_mode">False</property>
563 <signal name="key_press_event" handler="on_closed_task_treeview_key_press_event"/>563 <property name="angle">0</property>
564 <signal name="row_activated" handler="on_edit_done_task"/>564 </widget>
565 </widget>565 <packing>
566 </child>566 <property name="padding">0</property>
567 </widget>567 <property name="expand">True</property>
568 <packing>568 <property name="fill">True</property>
569 <property name="resize">True</property>569 </packing>
570 <property name="shrink">True</property>570 </child>
571 </packing>571
572 </child>572 <child>
573 </widget>573 <widget class="GtkButton" id="button-sidebar-close">
574 <packing>574 <property name="visible">True</property>
575 <property name="position">1</property>575 <property name="can_focus">True</property>
576 </packing>576 <property name="relief">GTK_RELIEF_NONE</property>
577 </child>577 <property name="focus_on_click">True</property>
578 </widget>578 <signal name="clicked" handler="on_view_sidebar_toggled"/>
579 <packing>579
580 <property name="resize">True</property>580 <child>
581 <property name="shrink">True</property>581 <widget class="GtkImage" id="image9">
582 </packing>582 <property name="visible">True</property>
583 </child>583 <property name="stock">gtk-close</property>
584 </widget>584 <property name="icon_size">1</property>
585 <packing>585 <property name="xalign">0.5</property>
586 <property name="position">2</property>586 <property name="yalign">0.5</property>
587 </packing>587 <property name="xpad">0</property>
588 </child>588 <property name="ypad">0</property>
589 <child>589 </widget>
590 <widget class="GtkStatusbar" id="statusbar1">590 </child>
591 <property name="visible">True</property>591 </widget>
592 <property name="spacing">2</property>592 <packing>
593 </widget>593 <property name="padding">0</property>
594 <packing>594 <property name="expand">False</property>
595 <property name="expand">False</property>595 <property name="fill">True</property>
596 <property name="position">3</property>596 </packing>
597 </packing>597 </child>
598 </child>598 </widget>
599 </widget>599 <packing>
600 </child>600 <property name="padding">0</property>
601 </widget>601 <property name="expand">False</property>
602 <widget class="GtkDialog" id="confirm_delete">602 <property name="fill">True</property>
603 <property name="border_width">5</property>603 </packing>
604 <property name="title" translatable="yes">Confirm task deletion</property>604 </child>
605 <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>605
606 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>606 <child>
607 <property name="has_separator">False</property>607 <widget class="GtkScrolledWindow" id="sidebar-scroll">
608 <signal name="close" handler="on_delete_cancel"/>608 <property name="visible">True</property>
609 <child internal-child="vbox">609 <property name="can_focus">True</property>
610 <widget class="GtkVBox" id="dialog-vbox1">610 <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
611 <property name="visible">True</property>611 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
612 <property name="spacing">2</property>612 <property name="shadow_type">GTK_SHADOW_IN</property>
613 <child>613 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
614 <widget class="GtkHBox" id="hbox3">614
615 <property name="visible">True</property>615 <child>
616 <child>616 <widget class="GtkTreeView" id="tag_tview">
617 <widget class="GtkImage" id="image5">617 <property name="visible">True</property>
618 <property name="visible">True</property>618 <property name="can_focus">True</property>
619 <property name="stock">gtk-dialog-question</property>619 <property name="headers_visible">True</property>
620 <property name="icon_size">6</property>620 <property name="rules_hint">False</property>
621 </widget>621 <property name="reorderable">False</property>
622 <packing>622 <property name="enable_search">True</property>
623 <property name="fill">False</property>623 <property name="fixed_height_mode">False</property>
624 <property name="padding">16</property>624 <property name="hover_selection">False</property>
625 </packing>625 <property name="hover_expand">False</property>
626 </child>626 <signal name="button_press_event" handler="on_tag_treeview_button_press_event"/>
627 <child>627 <signal name="row_activated" handler="on_select_tag"/>
628 <widget class="GtkLabel" id="label1">628 <signal name="cursor_changed" handler="on_select_tag"/>
629 <property name="visible">True</property>629 </widget>
630 <property name="label" translatable="yes">&lt;span weight="bold" size="large"&gt;Are you sure you want delete this task?&lt;/span&gt;630 </child>
631 </widget>
632 <packing>
633 <property name="padding">0</property>
634 <property name="expand">True</property>
635 <property name="fill">True</property>
636 </packing>
637 </child>
638 </widget>
639 <packing>
640 <property name="shrink">True</property>
641 <property name="resize">True</property>
642 </packing>
643 </child>
644
645 <child>
646 <widget class="GtkVBox" id="vbox2">
647 <property name="visible">True</property>
648 <property name="homogeneous">False</property>
649 <property name="spacing">0</property>
650
651 <child>
652 <widget class="GtkHBox" id="quickadd_pane">
653 <property name="visible">True</property>
654 <property name="homogeneous">False</property>
655 <property name="spacing">0</property>
656
657 <child>
658 <widget class="GtkEntry" id="quickadd_field">
659 <property name="visible">True</property>
660 <property name="can_default">True</property>
661 <property name="can_focus">True</property>
662 <property name="has_focus">True</property>
663 <property name="editable">True</property>
664 <property name="visibility">True</property>
665 <property name="max_length">0</property>
666 <property name="text" translatable="yes"></property>
667 <property name="has_frame">True</property>
668 <property name="invisible_char">â—Ź</property>
669 <property name="activates_default">False</property>
670 <signal name="activate" handler="on_quickadd_field_activate"/>
671 </widget>
672 <packing>
673 <property name="padding">0</property>
674 <property name="expand">True</property>
675 <property name="fill">True</property>
676 </packing>
677 </child>
678
679 <child>
680 <widget class="GtkButton" id="button1">
681 <property name="visible">True</property>
682 <property name="can_focus">True</property>
683 <property name="label">gtk-add</property>
684 <property name="use_stock">True</property>
685 <property name="relief">GTK_RELIEF_NORMAL</property>
686 <property name="focus_on_click">True</property>
687 <signal name="clicked" handler="on_quickadd_button_activate"/>
688 </widget>
689 <packing>
690 <property name="padding">0</property>
691 <property name="expand">False</property>
692 <property name="fill">False</property>
693 </packing>
694 </child>
695 </widget>
696 <packing>
697 <property name="padding">2</property>
698 <property name="expand">False</property>
699 <property name="fill">False</property>
700 </packing>
701 </child>
702
703 <child>
704 <widget class="GtkVPaned" id="vpaned1">
705 <property name="visible">True</property>
706 <property name="can_focus">True</property>
707 <property name="position">330</property>
708
709 <child>
710 <widget class="GtkScrolledWindow" id="main_pane">
711 <property name="visible">True</property>
712 <property name="can_focus">True</property>
713 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
714 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
715 <property name="shadow_type">GTK_SHADOW_NONE</property>
716 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
717
718 <child>
719 <widget class="GtkTreeView" id="task_tview">
720 <property name="visible">True</property>
721 <property name="can_focus">True</property>
722 <property name="headers_visible">True</property>
723 <property name="rules_hint">True</property>
724 <property name="reorderable">True</property>
725 <property name="enable_search">False</property>
726 <property name="fixed_height_mode">False</property>
727 <property name="hover_selection">False</property>
728 <property name="hover_expand">False</property>
729 <signal name="button_press_event" handler="on_task_treeview_button_press_event"/>
730 <signal name="key_press_event" handler="on_task_treeview_key_press_event"/>
731 <signal name="row_activated" handler="on_edit_active_task"/>
732 <signal name="cursor_changed" handler="on_task_tview_cursor_changed"/>
733 </widget>
734 </child>
735 </widget>
736 <packing>
737 <property name="shrink">True</property>
738 <property name="resize">True</property>
739 </packing>
740 </child>
741
742 <child>
743 <widget class="GtkScrolledWindow" id="closed_pane">
744 <property name="height_request">200</property>
745 <property name="can_focus">True</property>
746 <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
747 <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
748 <property name="shadow_type">GTK_SHADOW_NONE</property>
749 <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
750
751 <child>
752 <widget class="GtkTreeView" id="taskdone_tview">
753 <property name="visible">True</property>
754 <property name="can_focus">True</property>
755 <property name="headers_visible">True</property>
756 <property name="rules_hint">True</property>
757 <property name="reorderable">False</property>
758 <property name="enable_search">True</property>
759 <property name="fixed_height_mode">False</property>
760 <property name="hover_selection">False</property>
761 <property name="hover_expand">False</property>
762 <signal name="button_press_event" handler="on_closed_task_treeview_button_press_event"/>
763 <signal name="key_press_event" handler="on_closed_task_treeview_key_press_event"/>
764 <signal name="row_activated" handler="on_edit_done_task"/>
765 </widget>
766 </child>
767 </widget>
768 <packing>
769 <property name="shrink">True</property>
770 <property name="resize">True</property>
771 </packing>
772 </child>
773 </widget>
774 <packing>
775 <property name="padding">0</property>
776 <property name="expand">True</property>
777 <property name="fill">True</property>
778 </packing>
779 </child>
780 </widget>
781 <packing>
782 <property name="shrink">True</property>
783 <property name="resize">True</property>
784 </packing>
785 </child>
786 </widget>
787 <packing>
788 <property name="padding">0</property>
789 <property name="expand">True</property>
790 <property name="fill">True</property>
791 </packing>
792 </child>
793
794 <child>
795 <widget class="GtkStatusbar" id="statusbar1">
796 <property name="visible">True</property>
797 <property name="has_resize_grip">True</property>
798 </widget>
799 <packing>
800 <property name="padding">0</property>
801 <property name="expand">False</property>
802 <property name="fill">True</property>
803 </packing>
804 </child>
805 </widget>
806 </child>
807</widget>
808
809<widget class="GtkDialog" id="confirm_delete">
810 <property name="border_width">5</property>
811 <property name="title" translatable="yes">Confirm task deletion</property>
812 <property name="type">GTK_WINDOW_TOPLEVEL</property>
813 <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
814 <property name="modal">False</property>
815 <property name="resizable">True</property>
816 <property name="destroy_with_parent">False</property>
817 <property name="decorated">True</property>
818 <property name="skip_taskbar_hint">False</property>
819 <property name="skip_pager_hint">False</property>
820 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
821 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
822 <property name="focus_on_map">True</property>
823 <property name="urgency_hint">False</property>
824 <property name="has_separator">False</property>
825 <signal name="close" handler="on_delete_cancel"/>
826
827 <child internal-child="vbox">
828 <widget class="GtkVBox" id="dialog-vbox1">
829 <property name="visible">True</property>
830 <property name="homogeneous">False</property>
831 <property name="spacing">2</property>
832
833 <child internal-child="action_area">
834 <widget class="GtkHButtonBox" id="dialog-action_area1">
835 <property name="visible">True</property>
836 <property name="layout_style">GTK_BUTTONBOX_END</property>
837
838 <child>
839 <widget class="GtkButton" id="cancel">
840 <property name="visible">True</property>
841 <property name="can_focus">True</property>
842 <property name="relief">GTK_RELIEF_NORMAL</property>
843 <property name="focus_on_click">True</property>
844 <property name="response_id">0</property>
845 <signal name="released" handler="on_delete_cancel"/>
846
847 <child>
848 <widget class="GtkHBox" id="hbox1">
849 <property name="visible">True</property>
850 <property name="homogeneous">False</property>
851 <property name="spacing">0</property>
852
853 <child>
854 <widget class="GtkImage" id="image6">
855 <property name="visible">True</property>
856 <property name="stock">gtk-cancel</property>
857 <property name="icon_size">4</property>
858 <property name="xalign">0.5</property>
859 <property name="yalign">0.5</property>
860 <property name="xpad">0</property>
861 <property name="ypad">0</property>
862 </widget>
863 <packing>
864 <property name="padding">0</property>
865 <property name="expand">True</property>
866 <property name="fill">True</property>
867 </packing>
868 </child>
869
870 <child>
871 <widget class="GtkLabel" id="label2">
872 <property name="visible">True</property>
873 <property name="label" translatable="yes">_Keep selected task</property>
874 <property name="use_underline">True</property>
875 <property name="use_markup">False</property>
876 <property name="justify">GTK_JUSTIFY_LEFT</property>
877 <property name="wrap">False</property>
878 <property name="selectable">False</property>
879 <property name="xalign">0</property>
880 <property name="yalign">0.5</property>
881 <property name="xpad">0</property>
882 <property name="ypad">0</property>
883 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
884 <property name="width_chars">-1</property>
885 <property name="single_line_mode">False</property>
886 <property name="angle">0</property>
887 </widget>
888 <packing>
889 <property name="padding">0</property>
890 <property name="expand">True</property>
891 <property name="fill">True</property>
892 </packing>
893 </child>
894 </widget>
895 </child>
896 </widget>
897 </child>
898
899 <child>
900 <widget class="GtkButton" id="delete">
901 <property name="visible">True</property>
902 <property name="can_focus">True</property>
903 <property name="relief">GTK_RELIEF_NORMAL</property>
904 <property name="focus_on_click">True</property>
905 <property name="response_id">0</property>
906 <signal name="activate" handler="on_delete_confirm"/>
907 <signal name="released" handler="on_delete_confirm"/>
908
909 <child>
910 <widget class="GtkHBox" id="hbox2">
911 <property name="visible">True</property>
912 <property name="homogeneous">False</property>
913 <property name="spacing">0</property>
914
915 <child>
916 <widget class="GtkImage" id="image7">
917 <property name="visible">True</property>
918 <property name="stock">gtk-delete</property>
919 <property name="icon_size">4</property>
920 <property name="xalign">0.5</property>
921 <property name="yalign">0.5</property>
922 <property name="xpad">0</property>
923 <property name="ypad">0</property>
924 </widget>
925 <packing>
926 <property name="padding">0</property>
927 <property name="expand">True</property>
928 <property name="fill">True</property>
929 </packing>
930 </child>
931
932 <child>
933 <widget class="GtkLabel" id="label3">
934 <property name="visible">True</property>
935 <property name="label" translatable="yes">Permanently _remove task</property>
936 <property name="use_underline">True</property>
937 <property name="use_markup">False</property>
938 <property name="justify">GTK_JUSTIFY_LEFT</property>
939 <property name="wrap">False</property>
940 <property name="selectable">False</property>
941 <property name="xalign">0.5</property>
942 <property name="yalign">0.5</property>
943 <property name="xpad">0</property>
944 <property name="ypad">0</property>
945 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
946 <property name="width_chars">-1</property>
947 <property name="single_line_mode">False</property>
948 <property name="angle">0</property>
949 </widget>
950 <packing>
951 <property name="padding">0</property>
952 <property name="expand">True</property>
953 <property name="fill">True</property>
954 </packing>
955 </child>
956 </widget>
957 </child>
958 </widget>
959 </child>
960 </widget>
961 <packing>
962 <property name="padding">0</property>
963 <property name="expand">False</property>
964 <property name="fill">True</property>
965 <property name="pack_type">GTK_PACK_END</property>
966 </packing>
967 </child>
968
969 <child>
970 <widget class="GtkHBox" id="hbox3">
971 <property name="visible">True</property>
972 <property name="homogeneous">False</property>
973 <property name="spacing">0</property>
974
975 <child>
976 <widget class="GtkImage" id="image5">
977 <property name="visible">True</property>
978 <property name="stock">gtk-dialog-question</property>
979 <property name="icon_size">6</property>
980 <property name="xalign">0.5</property>
981 <property name="yalign">0.5</property>
982 <property name="xpad">0</property>
983 <property name="ypad">0</property>
984 </widget>
985 <packing>
986 <property name="padding">16</property>
987 <property name="expand">True</property>
988 <property name="fill">False</property>
989 </packing>
990 </child>
991
992 <child>
993 <widget class="GtkLabel" id="label1">
994 <property name="visible">True</property>
995 <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;
631996
632Deleting a task cannot be undone.</property>997Deleting a task cannot be undone.</property>
633 <property name="use_markup">True</property>998 <property name="use_underline">False</property>
634 <property name="wrap">True</property>999 <property name="use_markup">True</property>
635 </widget>1000 <property name="justify">GTK_JUSTIFY_LEFT</property>
636 <packing>1001 <property name="wrap">True</property>
637 <property name="padding">16</property>1002 <property name="selectable">False</property>
638 <property name="position">1</property>1003 <property name="xalign">0.5</property>
639 </packing>1004 <property name="yalign">0.5</property>
640 </child>1005 <property name="xpad">0</property>
641 </widget>1006 <property name="ypad">0</property>
642 <packing>1007 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
643 <property name="padding">16</property>1008 <property name="width_chars">-1</property>
644 <property name="position">1</property>1009 <property name="single_line_mode">False</property>
645 </packing>1010 <property name="angle">0</property>
646 </child>1011 </widget>
647 <child internal-child="action_area">1012 <packing>
648 <widget class="GtkHButtonBox" id="dialog-action_area1">1013 <property name="padding">16</property>
649 <property name="visible">True</property>1014 <property name="expand">True</property>
650 <property name="layout_style">GTK_BUTTONBOX_END</property>1015 <property name="fill">True</property>
651 <child>1016 </packing>
652 <widget class="GtkButton" id="cancel">1017 </child>
653 <property name="visible">True</property>1018 </widget>
654 <property name="can_focus">True</property>1019 <packing>
655 <property name="receives_default">True</property>1020 <property name="padding">16</property>
656 <property name="response_id">0</property>1021 <property name="expand">True</property>
657 <signal name="released" handler="on_delete_cancel"/>1022 <property name="fill">True</property>
658 <child>1023 </packing>
659 <widget class="GtkHBox" id="hbox1">1024 </child>
660 <property name="visible">True</property>1025 </widget>
661 <child>1026 </child>
662 <widget class="GtkImage" id="image6">1027</widget>
663 <property name="visible">True</property>1028
664 <property name="stock">gtk-cancel</property>1029<widget class="GtkMenu" id="ProjectContextMenu">
665 </widget>1030 <property name="visible">True</property>
666 </child>1031
667 <child>1032 <child>
668 <widget class="GtkLabel" id="label2">1033 <widget class="GtkImageMenuItem" id="edit_item">
669 <property name="visible">True</property>1034 <property name="visible">True</property>
670 <property name="xalign">0</property>1035 <property name="label">gtk-edit</property>
671 <property name="label" translatable="yes">_Keep selected task</property>1036 <property name="use_stock">True</property>
672 <property name="use_underline">True</property>1037 <signal name="activate" handler="on_edit_item_activate"/>
673 </widget>1038 </widget>
674 <packing>1039 </child>
675 <property name="position">1</property>1040
676 </packing>1041 <child>
677 </child>1042 <widget class="GtkImageMenuItem" id="delete_item">
678 </widget>1043 <property name="visible">True</property>
679 </child>1044 <property name="label">gtk-delete</property>
680 </widget>1045 <property name="use_stock">True</property>
681 <packing>1046 <signal name="activate" handler="on_delete_item_activate"/>
682 <property name="expand">False</property>1047 </widget>
683 <property name="fill">False</property>1048 </child>
684 </packing>1049</widget>
685 </child>1050
686 <child>1051<widget class="GtkMenu" id="TagContextMenu">
687 <widget class="GtkButton" id="delete">1052 <property name="visible">True</property>
688 <property name="visible">True</property>1053
689 <property name="can_focus">True</property>1054 <child>
690 <property name="receives_default">True</property>1055 <widget class="GtkImageMenuItem" id="colorchooser">
691 <property name="response_id">0</property>1056 <property name="visible">True</property>
692 <signal name="activate" handler="on_delete_confirm"/>1057 <property name="label">gtk-select-color</property>
693 <signal name="released" handler="on_delete_confirm"/>1058 <property name="use_stock">True</property>
694 <child>1059 <signal name="activate" handler="on_colorchooser_activate"/>
695 <widget class="GtkHBox" id="hbox2">1060 </widget>
696 <property name="visible">True</property>1061 </child>
697 <child>1062
698 <widget class="GtkImage" id="image7">1063 <child>
699 <property name="visible">True</property>1064 <widget class="GtkCheckMenuItem" id="nonworkviewtag">
700 <property name="stock">gtk-delete</property>1065 <property name="visible">True</property>
701 </widget>1066 <property name="label" translatable="yes">Tag is displayed in the workview</property>
702 </child>1067 <property name="use_underline">True</property>
703 <child>1068 <property name="active">True</property>
704 <widget class="GtkLabel" id="label3">1069 <signal name="toggled" handler="on_nonworkviewtag_toggled"/>
705 <property name="visible">True</property>1070 </widget>
706 <property name="label" translatable="yes">Permanently _remove task</property>1071 </child>
707 <property name="use_underline">True</property>1072</widget>
708 </widget>1073
709 <packing>1074<widget class="GtkColorSelectionDialog" id="ColorChooser">
710 <property name="position">1</property>1075 <property name="border_width">5</property>
711 </packing>1076 <property name="title" translatable="yes">Choose a color</property>
712 </child>1077 <property name="type">GTK_WINDOW_TOPLEVEL</property>
713 </widget>1078 <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
714 </child>1079 <property name="modal">False</property>
715 </widget>1080 <property name="resizable">False</property>
716 <packing>1081 <property name="destroy_with_parent">False</property>
717 <property name="expand">False</property>1082 <property name="decorated">True</property>
718 <property name="fill">False</property>1083 <property name="skip_taskbar_hint">False</property>
719 <property name="position">1</property>1084 <property name="skip_pager_hint">False</property>
720 </packing>1085 <property name="type_hint">GDK_WINDOW_TYPE_HINT_MENU</property>
721 </child>1086 <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
722 </widget>1087 <property name="focus_on_map">True</property>
723 <packing>1088 <property name="urgency_hint">False</property>
724 <property name="expand">False</property>1089 <signal name="response" handler="on_color_response"/>
725 <property name="pack_type">GTK_PACK_END</property>1090
726 </packing>1091 <child internal-child="cancel_button">
727 </child>1092 <widget class="GtkButton" id="colorsel-cancel_button1">
728 </widget>1093 <property name="visible">True</property>
729 </child>1094 <property name="can_default">True</property>
730 </widget>1095 <property name="can_focus">True</property>
731 <widget class="GtkMenu" id="ProjectContextMenu">1096 <property name="label">gtk-cancel</property>
732 <property name="visible">True</property>1097 <property name="use_stock">True</property>
733 <child>1098 <property name="relief">GTK_RELIEF_NORMAL</property>
734 <widget class="GtkImageMenuItem" id="edit_item">1099 <property name="focus_on_click">True</property>
735 <property name="visible">True</property>1100 </widget>
736 <property name="label">gtk-edit</property>1101 </child>
737 <property name="use_underline">True</property>1102
738 <property name="use_stock">True</property>1103 <child internal-child="ok_button">
739 <signal name="activate" handler="on_edit_item_activate"/>1104 <widget class="GtkButton" id="colorsel-ok_button1">
740 </widget>1105 <property name="visible">True</property>
741 </child>1106 <property name="can_default">True</property>
742 <child>1107 <property name="has_default">True</property>
743 <widget class="GtkImageMenuItem" id="delete_item">1108 <property name="can_focus">True</property>
744 <property name="visible">True</property>1109 <property name="label">gtk-ok</property>
745 <property name="label">gtk-delete</property>1110 <property name="use_stock">True</property>
746 <property name="use_underline">True</property>1111 <property name="relief">GTK_RELIEF_NORMAL</property>
747 <property name="use_stock">True</property>1112 <property name="focus_on_click">True</property>
748 <signal name="activate" handler="on_delete_item_activate"/>1113 </widget>
749 </widget>1114 </child>
750 </child>1115
751 </widget>1116 <child internal-child="help_button">
752 <widget class="GtkMenu" id="TagContextMenu">1117 <widget class="GtkButton" id="colorsel-help_button1">
753 <property name="visible">True</property>1118 <property name="visible">True</property>
754 <property name="no_show_all">True</property>1119 <property name="can_default">True</property>
755 <child>1120 <property name="can_focus">True</property>
756 <widget class="GtkImageMenuItem" id="colorchooser">1121 <property name="label">gtk-help</property>
757 <property name="visible">True</property>1122 <property name="use_stock">True</property>
758 <property name="label">gtk-select-color</property>1123 <property name="relief">GTK_RELIEF_NORMAL</property>
759 <property name="use_underline">True</property>1124 <property name="focus_on_click">True</property>
760 <property name="use_stock">True</property>1125 </widget>
761 <signal name="activate" handler="on_colorchooser_activate"/>1126 </child>
762 </widget>1127
763 </child>1128 <child internal-child="color_selection">
764 <child>1129 <widget class="GtkColorSelection" id="colorsel-color_selection1">
765 <widget class="GtkCheckMenuItem" id="nonworkviewtag">1130 <property name="border_width">5</property>
766 <property name="visible">True</property>1131 <property name="visible">True</property>
767 <property name="label" translatable="yes">Tag is displayed in the workview</property>1132 <property name="has_opacity_control">False</property>
768 <property name="use_underline">True</property>1133 <property name="has_palette">False</property>
769 <property name="active">True</property>1134
770 <signal name="toggled" handler="on_nonworkviewtag_toggled"/>1135 <child>
771 </widget>1136 <placeholder/>
772 </child>1137 </child>
773 </widget>1138
774 <widget class="GtkColorSelectionDialog" id="ColorChooser">1139 <child>
775 <property name="border_width">5</property>1140 <placeholder/>
776 <property name="title" translatable="yes">Choose a color</property>1141 </child>
777 <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>1142 </widget>
778 <property name="type_hint">GDK_WINDOW_TYPE_HINT_MENU</property>1143 <packing>
779 <signal name="response" handler="on_color_response"/>1144 <property name="padding">0</property>
780 <child internal-child="color_selection">1145 <property name="expand">True</property>
781 <widget class="GtkColorSelection" id="colorsel-color_selection1">1146 <property name="fill">True</property>
782 <property name="visible">True</property>1147 </packing>
783 <property name="border_width">5</property>1148 </child>
784 <property name="current_color">#ffffffffffff</property>1149</widget>
785 <child>1150
786 <placeholder/>1151<widget class="GtkAboutDialog" id="aboutdialog1">
787 </child>1152 <property name="border_width">5</property>
788 <child>1153 <property name="destroy_with_parent">False</property>
789 <placeholder/>1154 <property name="name" translatable="yes">Application Name</property>
790 </child>1155 <property name="copyright" translatable="yes">Copyrights© 2008, 2009 Lionel Dricot, Bertrand Rousseau</property>
791 </widget>1156 <property name="comments" translatable="yes">
792 </child>
793 <child internal-child="help_button">
794 <widget class="GtkButton" id="colorsel-help_button1">
795 <property name="visible">True</property>
796 <property name="can_focus">True</property>
797 <property name="can_default">True</property>
798 <property name="receives_default">True</property>
799 <property name="label">gtk-help</property>
800 <property name="use_stock">True</property>
801 <property name="response_id">0</property>
802 </widget>
803 </child>
804 <child internal-child="cancel_button">
805 <widget class="GtkButton" id="colorsel-cancel_button1">
806 <property name="visible">True</property>
807 <property name="can_focus">True</property>
808 <property name="can_default">True</property>
809 <property name="receives_default">True</property>
810 <property name="label">gtk-cancel</property>
811 <property name="use_stock">True</property>
812 <property name="response_id">0</property>
813 </widget>
814 </child>
815 <child internal-child="ok_button">
816 <widget class="GtkButton" id="colorsel-ok_button1">
817 <property name="visible">True</property>
818 <property name="can_focus">True</property>
819 <property name="can_default">True</property>
820 <property name="has_default">True</property>
821 <property name="receives_default">True</property>
822 <property name="label">gtk-ok</property>
823 <property name="use_stock">True</property>
824 <property name="response_id">0</property>
825 </widget>
826 </child>
827 </widget>
828 <widget class="GtkAboutDialog" id="aboutdialog1">
829 <property name="border_width">5</property>
830 <property name="title" translatable="yes">About GTG!</property>
831 <property name="resizable">False</property>
832 <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
833 <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
834 <property name="program_name">Getting Things Gnome!</property>
835 <property name="copyright" translatable="yes">Copyrights© 2008, 2009 Lionel Dricot, Bertrand Rousseau</property>
836 <property name="comments" translatable="yes">
837Getting Things Gnome! is an organizer for the GNOME desktop environment.</property>1157Getting Things Gnome! is an organizer for the GNOME desktop environment.</property>
838 <property name="website_label" translatable="yes">GTG website</property>1158 <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.
839 <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.
8401159
841Getting 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.1160Getting 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.
8421161
843You 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>1162You 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>
844 <property name="authors">Lionel Dricot (ploum@ploum.net),1163 <property name="wrap_license">True</property>
1164 <property name="website_label" translatable="yes">GTG website</property>
1165 <property name="authors">Lionel Dricot (ploum@ploum.net),
845Bertrand Rousseau (bertrand.rousseau@gmail.com)</property>1166Bertrand Rousseau (bertrand.rousseau@gmail.com)</property>
846 <property name="logo_icon_name">gtg</property>
847 <property name="wrap_license">True</property>
848 <signal name="response" handler="on_about_close"/>
849 <child internal-child="vbox">
850 <widget class="GtkVBox" id="dialog-vbox2">
851 <property name="visible">True</property>
852 <property name="spacing">2</property>
853 <child internal-child="action_area">
854 <widget class="GtkHButtonBox" id="dialog-action_area2">
855 <property name="visible">True</property>
856 <property name="layout_style">GTK_BUTTONBOX_END</property>
857 </widget>
858 <packing>
859 <property name="expand">False</property>
860 <property name="pack_type">GTK_PACK_END</property>
861 </packing>
862 </child>
863 </widget>
864 </child>
865 </widget>
866 <widget class="GtkMenu" id="TaskContextMenu">
867 <property name="visible">True</property>
868 <child>
869 <widget class="GtkImageMenuItem" id="tcm_add_subtask">
870 <property name="visible">True</property>
871 <property name="label">Add a subtask</property>
872 <signal name="activate" handler="on_add_subtask"/>
873 <child internal-child="image">
874 <widget class="GtkImage" id="menu-item-image5">
875 <property name="visible">True</property>
876 <property name="pixel_size">16</property>
877 <property name="icon_name">gtg-task-new</property>
878 </widget>
879 </child>
880 </widget>
881 </child>
882 <child>
883 <widget class="GtkImageMenuItem" id="tcm_edit">
884 <property name="visible">True</property>
885 <property name="label">gtk-edit</property>
886 <property name="use_underline">True</property>
887 <property name="use_stock">True</property>
888 <signal name="activate" handler="on_edit_active_task"/>
889 </widget>
890 </child>
891 <child>
892 <widget class="GtkSeparatorMenuItem" id="separatormenuitem3">
893 <property name="visible">True</property>
894 </widget>
895 </child>
896 <child>
897 <widget class="GtkImageMenuItem" id="tcm_mark_as_done">
898 <property name="visible">True</property>
899 <property name="label">Mark as _Done</property>
900 <property name="use_underline">True</property>
901 <signal name="activate" handler="on_mark_as_done"/>
902 <child internal-child="image">
903 <widget class="GtkImage" id="menu-item-image6">
904 <property name="visible">True</property>
905 <property name="pixel_size">16</property>
906 <property name="icon_name">gtg-task-done</property>
907 </widget>
908 </child>
909 </widget>
910 </child>
911 <child>
912 <widget class="GtkImageMenuItem" id="tcm_dismiss">
913 <property name="visible">True</property>
914 <property name="label">D_ismiss</property>
915 <property name="use_underline">True</property>
916 <signal name="activate" handler="on_dismiss_task"/>
917 <child internal-child="image">
918 <widget class="GtkImage" id="menu-item-image7">
919 <property name="visible">True</property>
920 <property name="pixel_size">16</property>
921 <property name="icon_name">gtg-task-dismiss</property>
922 </widget>
923 </child>
924 </widget>
925 </child>
926 <child>
927 <widget class="GtkImageMenuItem" id="tcm_delete">
928 <property name="visible">True</property>
929 <property name="label">gtk-delete</property>
930 <property name="use_underline">True</property>
931 <property name="use_stock">True</property>
932 <signal name="activate" handler="on_delete_task"/>
933 </widget>
934 </child>
935 </widget>
936 <widget class="GtkMenu" id="ClosedTaskContextMenu">
937 <property name="visible">True</property>
938 <child>
939 <widget class="GtkImageMenuItem" id="ctcm_edit">
940 <property name="visible">True</property>
941 <property name="label">gtk-edit</property>
942 <property name="use_underline">True</property>
943 <property name="use_stock">True</property>
944 <signal name="activate" handler="on_edit_done_task"/>
945 </widget>
946 </child>
947 <child>
948 <widget class="GtkSeparatorMenuItem" id="separatormenuitem4">
949 <property name="visible">True</property>
950 </widget>
951 </child>
952 <child>
953 <widget class="GtkImageMenuItem" id="ctcm_mark_as_not_done">
954 <property name="visible">True</property>
955 <property name="label" translatable="yes">Mark as Not Done</property>
956 <signal name="activate" handler="on_mark_as_done"/>
957 <child internal-child="image">
958 <widget class="GtkImage" id="menu-item-image8">
959 <property name="visible">True</property>
960 <property name="pixel_size">16</property>
961 <property name="icon_name">gtg-task-undone</property>
962 </widget>
963 </child>
964 </widget>
965 </child>
966 <child>
967 <widget class="GtkImageMenuItem" id="ctcm_undismiss">
968 <property name="visible">True</property>
969 <property name="label" translatable="yes">Und_ismiss</property>
970 <property name="use_underline">True</property>
971 <signal name="activate" handler="on_dismiss_task"/>
972 <child internal-child="image">
973 <widget class="GtkImage" id="menu-item-image9">
974 <property name="visible">True</property>
975 <property name="pixel_size">16</property>
976 <property name="icon_name">gtg-task-undismiss</property>
977 </widget>
978 </child>
979 </widget>
980 </child>
981 <child>
982 <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: