ctrl-g to focus search
[ptask.git] / src / ui_tasktree.c
index 58f3d1c..00dd1d3 100644 (file)
 
 #include <log.h>
 #include <ptime.h>
+#include <settings.h>
+#include <ui.h>
 #include <ui_projecttree.h>
 #include <ui_taskpanel.h>
 #include <ui_tasktree.h>
 
-static const char * const SETTINGS_KEYS[] = {
-       "tasktree-id-visible",
-       "tasktree-description-visible",
-       "tasktree-project-visible",
-       "tasktree-uuid-visible",
-       "tasktree-priority-visible",
-       "tasktree-urgency-visible",
-       "tasktree-creation-date-visible",
-       "tasktree-due-visible",
-       "tasktree-start-visible",
-};
-
 static const char * const MENU_NAMES[] = {
        "menu_id_visible",
        "menu_description_visible",
@@ -54,10 +44,10 @@ static const char * const MENU_NAMES[] = {
        "menu_start_visible",
 };
 
-static GSettings *gsettings;
 static GtkTreeView *w_treeview;
 static GtkMenu *w_menu;
 static struct task **current_tasks;
+static gchar *search_keywords;
 
 enum {
        COL_ID,
@@ -165,7 +155,7 @@ void ui_tasktree_init(GtkBuilder *builder)
                        (gtk_builder_get_object(builder, MENU_NAMES[i]));
 }
 
-void ui_tasktree_load_settings(GSettings *settings)
+void ui_tasktree_load_settings()
 {
        int sort_col_id, i;
        GtkSortType sort_order;
@@ -173,30 +163,27 @@ void ui_tasktree_load_settings(GSettings *settings)
        const char *key;
        gboolean b;
 
-
-       gsettings = settings;
-
-       sort_col_id = g_settings_get_int(settings, "tasks-sort-col");
-       sort_order = g_settings_get_int(settings, "tasks-sort-order");
+       sort_col_id = settings_get_int(SETTINGS_KEY_TASKS_SORT_COL);
+       sort_order = settings_get_int(SETTINGS_KEY_TASKS_SORT_ORDER);
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
        gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
                                             sort_col_id, sort_order);
 
 
        for (i = 0; i < COL_COUNT; i++) {
-               key = SETTINGS_KEYS[i];
-               b = g_settings_get_boolean(gsettings, key);
+               key = SETTINGS_VISIBLE_COL_KEYS[i];
+               b = settings_get_boolean(key);
                gtk_tree_view_column_set_visible(w_cols[i], b);
        }
 
        for (i = 0; i < COL_COUNT; i++) {
-               key = SETTINGS_KEYS[i];
-               b = g_settings_get_boolean(gsettings, key);
+               key = SETTINGS_VISIBLE_COL_KEYS[i];
+               b = settings_get_boolean(key);
                gtk_check_menu_item_set_active(w_menus[i], b);
        }
 }
 
-void ui_tasktree_save_settings(GSettings *settings)
+void ui_tasktree_save_settings()
 {
        int sort_col_id;
        GtkTreeModel *model;
@@ -209,8 +196,8 @@ void ui_tasktree_save_settings(GSettings *settings)
        log_debug("ui_tasktree_save_settings(): sort_col_id=%d", sort_col_id);
        log_debug("ui_tasktree_save_settings(): sort_col_order=%d", sort_order);
 
-       g_settings_set_int(settings, "tasks-sort-col", sort_col_id);
-       g_settings_set_int(settings, "tasks-sort-order", sort_order);
+       settings_set_int(SETTINGS_KEY_TASKS_SORT_COL, sort_col_id);
+       settings_set_int(SETTINGS_KEY_TASKS_SORT_ORDER, sort_order);
 }
 
 const char *ui_tasktree_get_task_uuid()
@@ -306,14 +293,18 @@ void ui_tasktree_set_selected_task(const char *uuid)
 }
 
 
-void ui_tasktree_update(struct task **tasks, const char *prj_filter)
+void ui_tasktree_update(struct task **tasks)
 {
        GtkTreeModel *model;
        struct task **tasks_cur;
        struct task *task;
        GtkTreeIter iter;
-       const char *prj;
+       const char *prj, *prj_filter;
        char *s;
+       gchar *desc;
+       int ok;
+
+       prj_filter = ui_projecttree_get_project();
 
        current_tasks = tasks;
 
@@ -332,6 +323,22 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter)
                        if (prj_filter && strcmp(prj, prj_filter))
                                continue;
 
+                       if (search_keywords
+                           && strlen(search_keywords)
+                           && task->description) {
+                               desc = g_ascii_strup(task->description, -1);
+
+                               if (strstr(desc, search_keywords))
+                                       ok = 1;
+                               else
+                                       ok = 0;
+
+                               free(desc);
+
+                               if (!ok)
+                                       continue;
+                       }
+
                        gtk_list_store_append(GTK_LIST_STORE(model), &iter);
 
                        gtk_list_store_set(GTK_LIST_STORE(model),
@@ -387,11 +394,6 @@ void ui_tasktree_update(struct task **tasks, const char *prj_filter)
 
 }
 
-void ui_tasktree_update_filter(const char *prj_filter)
-{
-       ui_tasktree_update(current_tasks, prj_filter);
-}
-
 gboolean tasktree_button_press_event_cbk(GtkWidget *widget,
                                         GdkEventButton *evt,
                                         gpointer data)
@@ -437,9 +439,73 @@ void tasktree_visible_activate_cbk(GtkAction *action, gpointer data)
                id = -1;
 
        if (id != -1) {
-               key = SETTINGS_KEYS[id];
-               b = g_settings_get_boolean(gsettings, key);
-               g_settings_set_boolean(gsettings, key, !b);
+               key = SETTINGS_VISIBLE_COL_KEYS[id];
+               b = settings_get_boolean(key);
+               settings_set_boolean(key, !b);
                gtk_tree_view_column_set_visible(w_cols[id], !b);
        }
 }
+
+void tasktree_done_activate_cbk(GtkAction *action, gpointer data)
+{
+       struct task *t;
+
+       log_fct_enter();
+
+       t = ui_tasktree_get_selected_task();
+
+       if (t) {
+               tw_task_done(t->uuid);
+               refresh();
+       }
+
+       log_fct_exit();
+}
+
+void tasktree_start_activate_cbk(GtkAction *action, gpointer data)
+{
+       struct task *t;
+
+       log_fct_enter();
+
+       t = ui_tasktree_get_selected_task();
+
+       if (t) {
+               tw_task_start(t->uuid);
+               refresh();
+       }
+
+       log_fct_exit();
+}
+
+void tasktree_stop_activate_cbk(GtkAction *action, gpointer data)
+{
+       struct task *t;
+
+       log_fct_enter();
+
+       t = ui_tasktree_get_selected_task();
+
+       if (t) {
+               tw_task_stop(t->uuid);
+               refresh();
+       }
+
+       log_fct_exit();
+}
+
+void
+ui_tasktree_search_changed_cbk(GtkEntry *entry, gchar *preedit, gpointer data)
+{
+       if (search_keywords)
+               g_free(search_keywords);
+
+       search_keywords = g_ascii_strup(gtk_entry_get_text(entry), -1);
+
+       ui_tasktree_update(current_tasks);
+}
+
+void ui_tasktree_update_filter(const char *prj)
+{
+       ui_tasktree_update(current_tasks);
+}