X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fui_projecttree.c;h=d249b29e9f282ce54cb72d511f6d90a31dd4ae30;hb=71d1d4d6f67700c58fb51513ec0ae17924431073;hp=d993a17a21ae85ca224b4b659e7591afba403454;hpb=1ff664c141ac890095ba33d96d28aca87f8b2ff7;p=ptask.git diff --git a/src/ui_projecttree.c b/src/ui_projecttree.c index d993a17..d249b29 100644 --- a/src/ui_projecttree.c +++ b/src/ui_projecttree.c @@ -17,38 +17,117 @@ * 02110-1301 USA */ #include +#include +#include #include #include +#include + +enum { + COL_NAME, + COL_COUNT +}; static GtkTreeView *w_treeview; +static int cursor_changed_cbk(GtkTreeView *treeview, gpointer data) +{ + const char *prj; + + log_fct_enter(); + + prj = ui_projecttree_get_project(); + + ui_tasktree_update_filter(prj); + + log_fct_exit(); + + return FALSE; +} + void ui_projecttree_init(GtkBuilder *builder) { - w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "projecttree")); + w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, + "projecttree")); + g_signal_connect(w_treeview, + "cursor-changed", (GCallback)cursor_changed_cbk, + NULL); +} + +const char *ui_projecttree_get_project() +{ + GtkTreePath *path; + GtkTreeViewColumn *cols; + GtkTreeIter iter; + GtkTreeModel *model; + GValue value = {0,}; + const char *prj; + + log_fct_enter(); + + gtk_tree_view_get_cursor(w_treeview, &path, &cols); + + if (path) { + model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); + gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get_value(model, &iter, COL_NAME, &value); + + prj = g_value_get_string(&value); + + if (!strcmp(prj, "ALL")) + prj = NULL; + } else { + prj = NULL; + } + + log_fct_exit(); + + return prj; } + void ui_projecttree_update(struct task **ts) { - struct project **prjs; + struct project **prjs, **cur; GtkTreeModel *model; GtkTreeIter iter; + GtkTreePath *p; + const char *current_prj; - log_debug("ui_projecttree_update()"); + log_fct_enter(); model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview)); + + current_prj = ui_projecttree_get_project(); + gtk_list_store_clear(GTK_LIST_STORE(model)); prjs = tw_get_projects(ts); - while (*prjs) { + for (cur = prjs; *cur; cur++) { gtk_list_store_append(GTK_LIST_STORE(model), &iter); gtk_list_store_set(GTK_LIST_STORE(model), &iter, - 0, (*prjs)->name, - 1, (*prjs)->count, + COL_NAME, (*cur)->name, + COL_COUNT, (*cur)->count, -1); - prjs++; + if (current_prj) { + if (!strcmp((*cur)->name, current_prj)) { + p = gtk_tree_model_get_path(model, &iter); + if (p) { + gtk_tree_view_set_cursor(w_treeview, + p, + NULL, + FALSE); + } + } + } } + + tw_project_list_free(prjs); + + log_fct_exit(); } +