worked on the project table
authorJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 29 Nov 2013 23:51:01 +0000 (23:51 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 29 Nov 2013 23:51:01 +0000 (23:51 +0000)
14 files changed:
config.status
src/Makefile.am
src/Makefile.in
src/glade/ptask.glade
src/list.c
src/list.h
src/main.c
src/tw.c
src/tw.h
src/ui.c
src/ui_projecttree.c
src/ui_projecttree.h
src/ui_tasktree.c [new file with mode: 0644]
src/ui_tasktree.h [new file with mode: 0644]

index 84e833b..8bb3d59 100755 (executable)
@@ -428,7 +428,7 @@ $config_commands
 Report bugs to <jeanfi@gmail.com>.
 ptask home page: <http://wpitchoune.net/ptask>."
 
-ac_cs_config="'--prefix=/tmp'"
+ac_cs_config="'CFLAGS=-O1' '--prefix=/tmp'"
 ac_cs_version="\
 ptask config.status 0.0.x
 configured by ./configure, generated by GNU Autoconf 2.69,
@@ -520,7 +520,7 @@ if $ac_cs_silent; then
 fi
 
 if $ac_cs_recheck; then
-  set X /bin/bash './configure'  '--prefix=/tmp' $ac_configure_extra_args --no-create --no-recursion
+  set X /bin/bash './configure'  'CFLAGS=-O1' '--prefix=/tmp' $ac_configure_extra_args --no-create --no-recursion
   shift
   $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6
   CONFIG_SHELL='/bin/bash'
@@ -740,7 +740,7 @@ S["EXEEXT"]=""
 S["ac_ct_CC"]="gcc"
 S["CPPFLAGS"]=""
 S["LDFLAGS"]=""
-S["CFLAGS"]="-g -O2"
+S["CFLAGS"]="-O1"
 S["CC"]="gcc"
 S["am__untar"]="$${TAR-tar} xf -"
 S["am__tar"]="$${TAR-tar} chof - \"$$tardir\""
index 3b096b0..be07323 100644 (file)
@@ -20,7 +20,8 @@ ptask_SOURCES = list.c list.h \
        tw.c tw.h \
        ui.c ui.h \
        ui_newtask_diag.c ui_newtask_diag.h \
-       ui_projecttree.c ui_projecttree.h
+       ui_projecttree.c ui_projecttree.h \
+       ui_tasktree.c ui_tasktree.h
 
 dist_man_MANS = ptask.1
 
index 2b707ce..9b551e6 100644 (file)
@@ -68,7 +68,7 @@ PROGRAMS = $(bin_PROGRAMS)
 am_ptask_OBJECTS = list.$(OBJEXT) log.$(OBJEXT) main.$(OBJEXT) \
        note.$(OBJEXT) pstr.$(OBJEXT) ptime.$(OBJEXT) tw.$(OBJEXT) \
        ui.$(OBJEXT) ui_newtask_diag.$(OBJEXT) \
-       ui_projecttree.$(OBJEXT)
+       ui_projecttree.$(OBJEXT) ui_tasktree.$(OBJEXT)
 ptask_OBJECTS = $(am_ptask_OBJECTS)
 ptask_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
@@ -299,7 +299,8 @@ ptask_SOURCES = list.c list.h \
        tw.c tw.h \
        ui.c ui.h \
        ui_newtask_diag.c ui_newtask_diag.h \
-       ui_projecttree.c ui_projecttree.h
+       ui_projecttree.c ui_projecttree.h \
+       ui_tasktree.c ui_tasktree.h
 
 dist_man_MANS = ptask.1
 gsettings_SCHEMAS = ptask.gschema.xml
@@ -398,6 +399,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_newtask_diag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_projecttree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_tasktree.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
index 731c12f..569bdc1 100644 (file)
                     <property name="margin_bottom">4</property>
                     <property name="shadow_type">in</property>
                     <child>
-                      <object class="GtkTreeView" id="treeview">
+                      <object class="GtkTreeView" id="tasktree">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="margin_left">4</property>
index d4c4806..0b6eb5d 100644 (file)
@@ -55,8 +55,3 @@ void **list_add(void **list, void *item)
 
        return result;
 }
-
-void list_free(void **list)
-{
-       free(list);
-}
index 91aa116..39fcb29 100644 (file)
@@ -22,6 +22,5 @@
 
 int list_length(void **list);
 void **list_add(void **list, void *item);
-void list_free(void **list);
 
 #endif
index 1a2509e..35b1e4b 100644 (file)
@@ -33,6 +33,7 @@
 #include "tw.h"
 #include <ui.h>
 #include <ui_projecttree.h>
+#include <ui_tasktree.h>
 
 static const char *program_name;
 static struct task **tasks;
@@ -362,31 +363,6 @@ static int cursor_changed_cbk(GtkTreeView *treeview, gpointer data)
        return FALSE;
 }
 
-static gint priority_cmp(GtkTreeModel *model,
-                        GtkTreeIter *a,
-                        GtkTreeIter *b,
-                        gpointer user_data)
-{
-       GValue v1 = {0,}, v2 = {0,};
-       const char *str1, *str2;
-       int i1, i2;
-
-       gtk_tree_model_get_value(model, a, COL_PRIORITY, &v1);
-       str1 = g_value_get_string(&v1);
-       i1 = priority_to_int(str1);
-
-       gtk_tree_model_get_value(model, b, COL_PRIORITY, &v2);
-       str2 = g_value_get_string(&v2);
-       i2 = priority_to_int(str2);
-
-       if (i1 < i2)
-               return -1;
-       else if (i1 > i2)
-               return 1;
-       else
-               return 0;
-}
-
 static void log_init()
 {
        char *home, *path, *dir;
@@ -414,7 +390,6 @@ int main(int argc, char **argv)
        GtkWindow *window;
        GtkWidget *btn;
        GtkBuilder *builder;
-       GtkTreeModel *model;
        int optc, cmdok, opti;
 
        program_name = argv[0];
@@ -465,15 +440,10 @@ int main(int argc, char **argv)
                 NULL);
        window = create_window(builder, settings);
 
+       ui_tasktree_init(builder);
        ui_projecttree_init(builder);
 
-       w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
-       model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
-       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
-                                       COL_PRIORITY,
-                                       priority_cmp,
-                                       NULL,
-                                       NULL);
+       w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tasktree"));
 
        w_note = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "tasknote"));
 
index 6c25697..3e5e55b 100644 (file)
--- a/src/tw.c
+++ b/src/tw.c
@@ -375,13 +375,36 @@ void tw_task_list_free(struct task **tasks)
        free(tasks);
 }
 
-static struct project *project_list_get(struct project **prj, const char *name)
+static void project_free(struct project *p)
 {
-       while (*prj)
-               if (!strcmp((*prj)->name, name))
-                       return *prj;
-               else
-                       prj++;
+       if (!p)
+               return ;
+
+       free(p->name);
+       free(p);
+}
+
+void tw_project_list_free(struct project **prjs)
+{
+       struct project **cur;
+
+       if (!prjs)
+               return ;
+
+       for (cur = prjs; *cur; cur++)
+               project_free(*cur);
+
+       free(prjs);
+}
+
+static struct project *project_list_get(struct project **prjs, const char *name)
+{
+       struct project **cur;
+
+       for (cur = prjs; *cur; cur++)
+               if (!strcmp((*cur)->name, name))
+                       return *cur;
+
        return NULL;
 }
 
@@ -415,10 +438,10 @@ struct project **tw_get_projects(struct task **tasks)
                        prj->count++;
                } else {
                        prj = project_new(prj_name, 1);
-                       
+
                        tmp = (struct project **)list_add((void **)prjs, prj);
-                       
-                       list_free((void **)prjs);
+
+                       free(prjs);
                        prjs = tmp;
                }
        }
index a8c0791..91faed7 100644 (file)
--- a/src/tw.h
+++ b/src/tw.h
@@ -43,5 +43,6 @@ void tw_done(const char *uuid);
 void tw_add(const char *newdesc, const char *prj, const char *prio);
 void tw_task_list_free(struct task **tasks);
 struct project **tw_get_projects(struct task **tasks);
+void tw_project_list_free(struct project **);
 
 #endif
index e52aeac..74b13ec 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -20,8 +20,8 @@
 #include <log.h>
 #include <ui.h>
 #include <ui_newtask_diag.h>
-
-static GtkTreeView *w_treeview;
+#include <ui_projecttree.h>
+#include <ui_tasktree.h>
 
 int newtask_clicked_cbk(GtkButton *btn, gpointer data)
 {
@@ -32,19 +32,7 @@ int newtask_clicked_cbk(GtkButton *btn, gpointer data)
 
 static void save_settings(GtkWindow *window, GSettings *settings)
 {
-       int w, h, x, y, sort_col_id;
-       GtkTreeModel *model;
-       GtkSortType sort_order;
-
-       model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
-       gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model),
-                                            &sort_col_id,
-                                            &sort_order);
-       log_debug("save_settings(): sort_col_id=%d", sort_col_id);
-       log_debug("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);
+       int w, h, x, y;
 
        gtk_window_get_size(window, &w, &h);
        gtk_window_get_position(window, &x, &y);
@@ -56,6 +44,8 @@ static void save_settings(GtkWindow *window, GSettings *settings)
        g_settings_set_int(settings, "window-x", x);
        g_settings_set_int(settings, "window-y", y);
 
+       ui_tasktree_save_settings(settings);
+
        g_settings_sync();
 }
 
@@ -73,9 +63,7 @@ static gboolean delete_event_cbk(GtkWidget *w, GdkEvent *evt, gpointer data)
 GtkWindow *create_window(GtkBuilder *builder, GSettings *settings)
 {
        GtkWindow *window;
-       int x, y, h, w, sort_col_id;
-       GtkSortType sort_order;
-       GtkTreeModel *model;
+       int x, y, w, h;
 
        window = GTK_WINDOW(gtk_builder_get_object(builder, "window"));
 
@@ -90,14 +78,10 @@ GtkWindow *create_window(GtkBuilder *builder, GSettings *settings)
        g_signal_connect(window, "delete_event",
                         G_CALLBACK(delete_event_cbk), settings);
 
-       w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
+       ui_tasktree_init(builder);
+       ui_projecttree_init(builder);
 
-       sort_col_id = g_settings_get_int(settings, "tasks-sort-col");
-       sort_order = g_settings_get_int(settings, "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);
+       ui_tasktree_load_settings(settings);
 
        return window;
 }
-
index d993a17..a17df32 100644 (file)
  * 02110-1301 USA
  */
 #include <stdio.h>
+#include <string.h>
 
 #include <log.h>
 #include <ui_projecttree.h>
 
+enum {
+       COL_NAME,
+       COL_COUNT
+};
+
 static GtkTreeView *w_treeview;
 
 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"));
+}
+
+const char *ui_projecttree_get_project()
+{
+       GtkTreePath *path;
+       GtkTreeViewColumn *cols;
+       GtkTreeIter iter;
+       GtkTreeModel *model;
+       GValue value = {0,};
+
+       log_debug("get_selected_project()");
+
+       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);
+
+               return g_value_get_string(&value);
+       }
+
+       return NULL;
 }
 
+
 void ui_projecttree_update(struct task **ts)
 {
-       struct project **prjs;
+       struct project **prjs, **cur;
        GtkTreeModel *model;
        GtkTreeIter iter;
 
@@ -40,15 +71,16 @@ void ui_projecttree_update(struct task **ts)
        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++;
        }
+
+       tw_project_list_free(prjs);
 }
+
index d4848d9..9bb21e4 100644 (file)
@@ -25,5 +25,6 @@
 
 void ui_projecttree_init(GtkBuilder *builder);
 void ui_projecttree_update(struct task **);
+const char *ui_projecttree_get_project();
 
 #endif
diff --git a/src/ui_tasktree.c b/src/ui_tasktree.c
new file mode 100644 (file)
index 0000000..c1789f3
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2012-2013 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
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include <gtk/gtk.h>
+
+#include <log.h>
+
+static GtkTreeView *w_treeview;
+
+enum {
+       COL_ID,
+       COL_DESCRIPTION,
+       COL_PROJECT,
+       COL_UUID,
+       COL_PRIORITY
+};
+
+static int priority_to_int(const char *str)
+{
+       switch (*str) {
+       case 'H':
+               return 3;
+       case 'M':
+               return 2;
+       case 'L':
+               return 1;
+       default:
+               return 0;
+       }
+}
+
+static gint priority_cmp(GtkTreeModel *model,
+                        GtkTreeIter *a,
+                        GtkTreeIter *b,
+                        gpointer user_data)
+{
+       GValue v1 = {0,}, v2 = {0,};
+       const char *str1, *str2;
+       int i1, i2;
+
+       gtk_tree_model_get_value(model, a, COL_PRIORITY, &v1);
+       str1 = g_value_get_string(&v1);
+       i1 = priority_to_int(str1);
+
+       gtk_tree_model_get_value(model, b, COL_PRIORITY, &v2);
+       str2 = g_value_get_string(&v2);
+       i2 = priority_to_int(str2);
+
+       if (i1 < i2)
+               return -1;
+       else if (i1 > i2)
+               return 1;
+       else
+               return 0;
+}
+
+void ui_tasktree_init(GtkBuilder *builder)
+{
+       GtkTreeModel *model;
+
+       w_treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tasktree"));
+
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
+       gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(model),
+                                       COL_PRIORITY,
+                                       priority_cmp,
+                                       NULL,
+                                       NULL);
+}
+
+void ui_tasktree_load_settings(GSettings *settings)
+{
+       int sort_col_id;
+       GtkSortType sort_order;
+       GtkTreeModel *model;
+
+       sort_col_id = g_settings_get_int(settings, "tasks-sort-col");
+       sort_order = g_settings_get_int(settings, "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);
+}
+
+void ui_tasktree_save_settings(GSettings *settings)
+{
+       int sort_col_id;
+       GtkTreeModel *model;
+       GtkSortType sort_order;
+
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(w_treeview));
+       gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model),
+                                            &sort_col_id,
+                                            &sort_order);
+       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);
+}
diff --git a/src/ui_tasktree.h b/src/ui_tasktree.h
new file mode 100644 (file)
index 0000000..3db5e44
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2012-2013 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
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#ifndef _PTASK_UI_TASKTREE_H_
+#define _PTASK_UI_TASKTREE_H_
+
+#include <gtk/gtk.h>
+
+void ui_tasktree_init(GtkBuilder *);
+void ui_tasktree_load_settings(GSettings *);
+void ui_tasktree_save_settings(GSettings *);
+
+#endif