2 * Copyright (C) 2012-2013 jeanfi@gmail.com
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
29 #include <ui_projecttree.h>
30 #include <ui_taskpanel.h>
31 #include <ui_tasktree.h>
33 static GtkTreeView *w_treeview;
34 static struct task **current_tasks;
48 static int priority_to_int(const char *str)
62 static gint priority_cmp(GtkTreeModel *model,
67 GValue v1 = {0,}, v2 = {0,};
68 const char *str1, *str2;
71 gtk_tree_model_get_value(model, a, COL_PRIORITY, &v1);
72 str1 = g_value_get_string(&v1);
73 i1 = priority_to_int(str1);
75 gtk_tree_model_get_value(model, b, COL_PRIORITY, &v2);
76 str2 = g_value_get_string(&v2);
77 i2 = priority_to_int(str2);
87 int tasktree_cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
91 ui_taskpanel_update(ui_tasktree_get_selected_task());
98 void ui_tasktree_init(GtkBuilder *builder)
102 w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tasktree"));
104 model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
105 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
112 void ui_tasktree_load_settings(GSettings *settings)
115 GtkSortType sort_order;
118 sort_col_id = g_settings_get_int(settings, "tasks-sort-col");
119 sort_order = g_settings_get_int(settings, "tasks-sort-order");
120 model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
121 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
122 sort_col_id, sort_order);
125 void ui_tasktree_save_settings(GSettings *settings)
129 GtkSortType sort_order;
131 model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
132 gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model),
135 log_debug("ui_tasktree_save_settings(): sort_col_id=%d", sort_col_id);
136 log_debug("ui_tasktree_save_settings(): sort_col_order=%d", sort_order);
138 g_settings_set_int(settings, "tasks-sort-col", sort_col_id);
139 g_settings_set_int(settings, "tasks-sort-order", sort_order);
142 const char *ui_tasktree_get_task_uuid()
146 t = ui_tasktree_get_selected_task();
154 struct task *ui_tasktree_get_selected_task()
157 GtkTreeViewColumn *cols;
158 struct task **tasks_cur, *result;
169 gtk_tree_view_get_cursor(w_treeview, &path, &cols);
172 model = gtk_tree_view_get_model(w_treeview);
173 gtk_tree_model_get_iter(model, &iter, path);
174 gtk_tree_model_get_value(model,
179 uuid = g_value_get_string(&value);
181 for (tasks_cur = current_tasks; *tasks_cur; tasks_cur++)
182 if (!strcmp((*tasks_cur)->uuid, uuid))
185 gtk_tree_path_free(path);
194 void ui_tasktree_set_selected_task(const char *uuid)
205 model = gtk_tree_view_get_model(w_treeview);
207 if (!gtk_tree_model_get_iter_first(model, &iter))
211 while (gtk_tree_model_iter_next(model, &iter)) {
212 gtk_tree_model_get_value(model,
216 c_uuid = g_value_get_string(&value);
218 if (!strcmp(uuid, c_uuid)) {
219 path = gtk_tree_model_get_path(model, &iter);
223 g_value_unset(&value);
227 path = gtk_tree_path_new_first();
228 gtk_tree_view_set_cursor(w_treeview, path, NULL, FALSE);
235 void ui_tasktree_update(struct task **tasks, const char *prj_filter)
238 struct task **tasks_cur;
244 current_tasks = tasks;
246 model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
247 gtk_list_store_clear(GTK_LIST_STORE(model));
250 for (tasks_cur = current_tasks; *tasks_cur; tasks_cur++) {
258 if (prj_filter && strcmp(prj, prj_filter))
261 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
263 gtk_list_store_set(GTK_LIST_STORE(model),
268 (*tasks_cur)->description,
274 (*tasks_cur)->priority,
276 (*tasks_cur)->urgency,
279 if ((*tasks_cur)->start) {
280 s = tm_to_str((*tasks_cur)->start);
282 (GTK_LIST_STORE(model),
290 if ((*tasks_cur)->due) {
291 s = tm_to_str((*tasks_cur)->due);
293 (GTK_LIST_STORE(model),
301 if ((*tasks_cur)->entry) {
302 s = tm_to_str((*tasks_cur)->entry);
304 (GTK_LIST_STORE(model),
316 void ui_tasktree_update_filter(const char *prj_filter)
318 ui_tasktree_update(current_tasks, prj_filter);