From 30a0f69b259de2ebc4b9a69121bda91a6be1e3b5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Fri, 29 Nov 2013 23:51:01 +0000 Subject: [PATCH] worked on the project table --- config.status | 6 +-- src/Makefile.am | 3 +- src/Makefile.in | 6 ++- src/glade/ptask.glade | 2 +- src/list.c | 5 --- src/list.h | 1 - src/main.c | 36 ++-------------- src/tw.c | 41 ++++++++++++++---- src/tw.h | 1 + src/ui.c | 34 ++++----------- src/ui_projecttree.c | 46 ++++++++++++++++---- src/ui_projecttree.h | 1 + src/ui_tasktree.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/ui_tasktree.h | 28 +++++++++++++ 14 files changed, 237 insertions(+), 87 deletions(-) create mode 100644 src/ui_tasktree.c create mode 100644 src/ui_tasktree.h diff --git a/config.status b/config.status index 84e833b..8bb3d59 100755 --- a/config.status +++ b/config.status @@ -428,7 +428,7 @@ $config_commands Report bugs to . ptask home page: ." -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\"" diff --git a/src/Makefile.am b/src/Makefile.am index 3b096b0..be07323 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 diff --git a/src/Makefile.in b/src/Makefile.in index 2b707ce..9b551e6 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -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 $@ $< diff --git a/src/glade/ptask.glade b/src/glade/ptask.glade index 731c12f..569bdc1 100644 --- a/src/glade/ptask.glade +++ b/src/glade/ptask.glade @@ -408,7 +408,7 @@ 4 in - + True True 4 diff --git a/src/list.c b/src/list.c index d4c4806..0b6eb5d 100644 --- a/src/list.c +++ b/src/list.c @@ -55,8 +55,3 @@ void **list_add(void **list, void *item) return result; } - -void list_free(void **list) -{ - free(list); -} diff --git a/src/list.h b/src/list.h index 91aa116..39fcb29 100644 --- a/src/list.h +++ b/src/list.h @@ -22,6 +22,5 @@ int list_length(void **list); void **list_add(void **list, void *item); -void list_free(void **list); #endif diff --git a/src/main.c b/src/main.c index 1a2509e..35b1e4b 100644 --- a/src/main.c +++ b/src/main.c @@ -33,6 +33,7 @@ #include "tw.h" #include #include +#include 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")); diff --git a/src/tw.c b/src/tw.c index 6c25697..3e5e55b 100644 --- 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; } } diff --git a/src/tw.h b/src/tw.h index a8c0791..91faed7 100644 --- 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 diff --git a/src/ui.c b/src/ui.c index e52aeac..74b13ec 100644 --- a/src/ui.c +++ b/src/ui.c @@ -20,8 +20,8 @@ #include #include #include - -static GtkTreeView *w_treeview; +#include +#include 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; } - diff --git a/src/ui_projecttree.c b/src/ui_projecttree.c index d993a17..a17df32 100644 --- a/src/ui_projecttree.c +++ b/src/ui_projecttree.c @@ -17,20 +17,51 @@ * 02110-1301 USA */ #include +#include #include #include +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); } + diff --git a/src/ui_projecttree.h b/src/ui_projecttree.h index d4848d9..9bb21e4 100644 --- a/src/ui_projecttree.h +++ b/src/ui_projecttree.h @@ -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 index 0000000..c1789f3 --- /dev/null +++ b/src/ui_tasktree.c @@ -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 + +#include + +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 index 0000000..3db5e44 --- /dev/null +++ b/src/ui_tasktree.h @@ -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 + +void ui_tasktree_init(GtkBuilder *); +void ui_tasktree_load_settings(GSettings *); +void ui_tasktree_save_settings(GSettings *); + +#endif -- 2.7.4