updated copyright
[ptask.git] / src / ui_projecttree.c
index a17df32..1bade0d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012-2013 jeanfi@gmail.com
+ * Copyright (C) 2012-2016 jeanfi@gmail.com
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
  * 02110-1301 USA
  */
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include <log.h>
 #include <ui_projecttree.h>
+#include <ui_tasktree.h>
 
 enum {
        COL_NAME,
@@ -29,10 +31,28 @@ enum {
 
 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"));
+       g_signal_connect(w_treeview,
+                        "cursor-changed", (GCallback)cursor_changed_cbk,
+                        NULL);
 }
 
 const char *ui_projecttree_get_project()
@@ -42,8 +62,9 @@ const char *ui_projecttree_get_project()
        GtkTreeIter iter;
        GtkTreeModel *model;
        GValue value = {0,};
+       const char *prj;
 
-       log_debug("get_selected_project()");
+       log_fct_enter();
 
        gtk_tree_view_get_cursor(w_treeview, &path, &cols);
 
@@ -52,10 +73,17 @@ const char *ui_projecttree_get_project()
                gtk_tree_model_get_iter(model, &iter, path);
                gtk_tree_model_get_value(model, &iter, COL_NAME, &value);
 
-               return g_value_get_string(&value);
+               prj = g_value_get_string(&value);
+
+               if (!strcmp(prj, "ALL"))
+                       prj = NULL;
+       } else {
+               prj = NULL;
        }
 
-       return NULL;
+       log_fct_exit();
+
+       return prj;
 }
 
 
@@ -64,10 +92,15 @@ void ui_projecttree_update(struct task **ts)
        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);
@@ -79,8 +112,22 @@ void ui_projecttree_update(struct task **ts)
                                   COL_NAME, (*cur)->name,
                                   COL_COUNT, (*cur)->count,
                                   -1);
+
+               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();
 }