From: Nathan Samson Date: Sun, 4 Sep 2011 18:14:33 +0000 (+0200) Subject: Split the dive list in columns. Columns are sortable now (name = date, depth, duration) X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=31123f63af0a2b6a9756b8496f56359d1c68a645;p=ext%2Fsubsurface.git Split the dive list in columns. Columns are sortable now (name = date, depth, duration) Signed-off-by: Nathan Samson --- diff --git a/divelist.c b/divelist.c index ba42658..5baf589 100644 --- a/divelist.c +++ b/divelist.c @@ -1,5 +1,6 @@ #include #include +#include #include #include "dive.h" @@ -13,7 +14,7 @@ static void selection_cb(GtkTreeSelection *selection, GtkTreeModel *model) if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) return; - gtk_tree_model_get_value(model, &iter, 1, &value); + gtk_tree_model_get_value(model, &iter, 5, &value); selected_dive = g_value_get_int(&value); repaint_dive(); } @@ -26,10 +27,27 @@ static void fill_dive_list(GtkListStore *store) for (i = 0; i < dive_table.nr; i++) { struct dive *dive = dive_table.dives[i]; + int len; + char buffer[256], *depth, *duration; + + len = snprintf(buffer, sizeof(buffer), + "%d ft", to_feet(dive->maxdepth)); + depth = malloc(len + 1); + memcpy(depth, buffer, len+1); + + len = snprintf(buffer, sizeof(buffer), + "%d min", dive->duration.seconds / 60); + duration = malloc(len + 1); + memcpy(duration, buffer, len+1); + gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, dive->name, - 1, i, + 1, depth, + 2, dive->maxdepth, + 3, duration, + 4, dive->duration.seconds, + 5, i, -1); } } @@ -43,7 +61,10 @@ GtkWidget *create_dive_list(void) GtkTreeViewColumn *col; GtkWidget *scroll_window; - model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); + model = gtk_list_store_new(6, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_INT, + G_TYPE_STRING, G_TYPE_INT, + G_TYPE_INT); tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); @@ -54,11 +75,30 @@ GtkWidget *create_dive_list(void) renderer = gtk_cell_renderer_text_new(); col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, "Name"); + gtk_tree_view_column_set_sort_column_id(col, 0); + gtk_tree_view_column_set_resizable (col, TRUE); gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", 0); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); + + renderer = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, "Depth"); + gtk_tree_view_column_set_sort_column_id(col, 2); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_add_attribute(col, renderer, "text", 1); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); + + renderer = gtk_cell_renderer_text_new(); + col = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(col, "Duration"); + gtk_tree_view_column_set_sort_column_id(col, 4); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_add_attribute(col, renderer, "text", 3); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col); - g_object_set(G_OBJECT(tree_view), "headers-visible", FALSE, + g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE, "search-column", 0, "rules-hint", FALSE, NULL); diff --git a/parse-xml.c b/parse-xml.c index 635bf56..a2c685e 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -693,11 +693,9 @@ static char *generate_name(struct dive *dive) len = snprintf(buffer, sizeof(buffer), "%04d-%02d-%02d " - "%02d:%02d:%02d " - "(%d ft, %d min)", + "%02d:%02d:%02d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec, - to_feet(dive->maxdepth), dive->duration.seconds / 60); + tm->tm_hour, tm->tm_min, tm->tm_sec); p = malloc(len+1); if (!p) exit(1);