X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fui_tasktree.c;h=e879b4d022d5a54c722433f059e946e7924bd7df;hb=71d1d4d6f67700c58fb51513ec0ae17924431073;hp=c1789f39aeb1049f5806e83e17cfe1b80d36067e;hpb=30a0f69b259de2ebc4b9a69121bda91a6be1e3b5;p=ptask.git diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c index c1789f3..e879b4d 100644 --- a/src/ui_tasktree.c +++ b/src/ui_tasktree.c @@ -16,11 +16,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ +#include + #include #include +#include +#include static GtkTreeView *w_treeview; +static struct task **current_tasks; enum { COL_ID, @@ -112,3 +117,94 @@ void ui_tasktree_save_settings(GSettings *settings) g_settings_set_int(settings, "tasks-sort-col", sort_col_id); g_settings_set_int(settings, "tasks-sort-order", sort_order); } + + +struct task *ui_tasktree_get_selected_task() +{ + GtkTreePath *path; + GtkTreeViewColumn *cols; + struct task **tasks_cur, *result; + GtkTreeIter iter; + GtkTreeModel *model; + GValue value = {0,}; + const char *uuid; + + log_fct_enter(); + + result = NULL; + + if (current_tasks) { + gtk_tree_view_get_cursor(w_treeview, &path, &cols); + + if (path) { + model = gtk_tree_view_get_model(w_treeview); + gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get_value(model, + &iter, + COL_UUID, + &value); + + uuid = g_value_get_string(&value); + + for (tasks_cur = current_tasks; *tasks_cur; tasks_cur++) + if (!strcmp((*tasks_cur)->uuid, uuid)) + result = *tasks_cur; + + gtk_tree_path_free(path); + } + } + + log_fct_exit(); + + return result; +} + +void ui_tasktree_update(struct task **tasks, const char *prj_filter) +{ + GtkTreeModel *model; + struct task **tasks_cur; + struct task *task; + GtkTreeIter iter; + const char *prj; + GtkTreePath *p; + + current_tasks = tasks; + + model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); + gtk_list_store_clear(GTK_LIST_STORE(model)); + + if (current_tasks) { + for (tasks_cur = current_tasks; *tasks_cur; tasks_cur++) { + task = (*tasks_cur); + + if (task->project) + prj = task->project; + else + prj = ""; + + if (prj_filter && strcmp(prj, prj_filter)) + continue; + + gtk_list_store_append(GTK_LIST_STORE(model), &iter); + + gtk_list_store_set(GTK_LIST_STORE(model), + &iter, + COL_ID, (*tasks_cur)->id, + COL_DESCRIPTION, + (*tasks_cur)->description, + COL_PROJECT, prj, + COL_UUID, (*tasks_cur)->uuid, + COL_PRIORITY, (*tasks_cur)->priority, + -1); + } + + p = gtk_tree_path_new_first(); + gtk_tree_view_set_cursor(w_treeview, p, NULL, FALSE); + } + +} + +void ui_tasktree_update_filter(const char *prj_filter) +{ + ui_tasktree_update(current_tasks, prj_filter); +}