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,
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'
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\""
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
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)
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
@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 $@ $<
<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>
return result;
}
-
-void list_free(void **list)
-{
- free(list);
-}
int list_length(void **list);
void **list_add(void **list, void *item);
-void list_free(void **list);
#endif
#include "tw.h"
#include <ui.h>
#include <ui_projecttree.h>
+#include <ui_tasktree.h>
static const char *program_name;
static struct task **tasks;
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;
GtkWindow *window;
GtkWidget *btn;
GtkBuilder *builder;
- GtkTreeModel *model;
int optc, cmdok, opti;
program_name = argv[0];
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"));
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;
}
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;
}
}
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
#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)
{
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);
g_settings_set_int(settings, "window-x", x);
g_settings_set_int(settings, "window-y", y);
+ ui_tasktree_save_settings(settings);
+
g_settings_sync();
}
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"));
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;
}
-
* 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;
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);
}
+
void ui_projecttree_init(GtkBuilder *builder);
void ui_projecttree_update(struct task **);
+const char *ui_projecttree_get_project();
#endif
--- /dev/null
+/*
+ * 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);
+}
--- /dev/null
+/*
+ * 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