keep focus on task after refresh
[ptask.git] / src / ui_tasktree.c
index 16707db..4fc7c86 100644 (file)
@@ -21,6 +21,7 @@
 #include <gtk/gtk.h>
 
 #include <log.h>
+#include <ui_projecttree.h>
 #include <ui_tasktree.h>
 
 static GtkTreeView *w_treeview;
@@ -117,6 +118,17 @@ void ui_tasktree_save_settings(GSettings *settings)
        g_settings_set_int(settings, "tasks-sort-order", sort_order);
 }
 
+const char *ui_tasktree_get_task_uuid()
+{
+       struct task *t;
+
+       t = ui_tasktree_get_selected_task();
+
+       if (t)
+               return t->uuid;
+       else
+               return NULL;
+}
 
 struct task *ui_tasktree_get_selected_task()
 {
@@ -158,7 +170,59 @@ struct task *ui_tasktree_get_selected_task()
        return result;
 }
 
-void ui_tasktree_update(struct task **tasks)
+void ui_tasktree_update(struct task **tasks,
+                       const char *prj_filter,
+                       const char *task_uuid)
 {
+       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));
+       p = NULL;
+
+       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);
+
+                       if (task_uuid && !strcmp(task->uuid, task_uuid))
+                               p = gtk_tree_model_get_path(model, &iter);
+               }
+
+               if (!p)
+                       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, NULL);
 }