aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-04 12:09:48 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-04 12:19:20 -0700
commitaab4d593bdbffef8442282318778a9833cbc7a43 (patch)
tree42d1deea38a5c9155c9138a0af85d14d04198e8a
parent230a13476d9af732cb60b2c0393feeadb5b39e67 (diff)
downloadsubsurface-aab4d593bdbffef8442282318778a9833cbc7a43.tar.gz
Generate date string for the dive list dynamically
.. and sort based on the 'time_t' value itself. This allows us to use a more compact date format that doesn't need to sort alphabetically, because sorting by date is always based on the date value. So we can use just a two-digit year, and skip the seconds, to keep the column narrow, while still sorting correctly. Also, "Depth" is a nice header string, but it is wider than the column itself, which makes the whole column wider than necessary. So put the units in the header instead of in the string, keeping things narrow. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--dive.c1
-rw-r--r--dive.h1
-rw-r--r--divelist.c49
-rw-r--r--parse-xml.c22
4 files changed, 30 insertions, 43 deletions
diff --git a/dive.c b/dive.c
index 757622fe7..5ddb6bc80 100644
--- a/dive.c
+++ b/dive.c
@@ -253,7 +253,6 @@ struct dive *try_to_merge(struct dive *a, struct dive *b)
memset(res, 0, dive_size(alloc_samples));
res->when = a->when;
- res->name = merge_text(a->name, b->name);
res->location = merge_text(a->location, b->location);
res->notes = merge_text(a->notes, b->notes);
MERGE_MAX(res, a, b, maxdepth.mm);
diff --git a/dive.h b/dive.h
index 2d03ee7cd..1386a3bf8 100644
--- a/dive.h
+++ b/dive.h
@@ -111,7 +111,6 @@ struct sample {
#define MAX_CYLINDERS (4)
struct dive {
- const char *name;
time_t when;
char *location;
char *notes;
diff --git a/divelist.c b/divelist.c
index 5baf589d3..1970b38ab 100644
--- a/divelist.c
+++ b/divelist.c
@@ -14,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, 5, &value);
+ gtk_tree_model_get_value(model, &iter, 6, &value);
selected_dive = g_value_get_int(&value);
repaint_dive();
}
@@ -28,26 +28,36 @@ static void fill_dive_list(GtkListStore *store)
struct dive *dive = dive_table.dives[i];
int len;
- char buffer[256], *depth, *duration;
+ char buffer[256], *datestr, *depth, *duration;
+ struct tm *tm;
+ tm = gmtime(&dive->when);
len = snprintf(buffer, sizeof(buffer),
- "%d ft", to_feet(dive->maxdepth));
+ "%02d.%02d.%02d %02d:%02d",
+ tm->tm_mday, tm->tm_mon+1, tm->tm_year % 100,
+ tm->tm_hour, tm->tm_min);
+ datestr = malloc(len+1);
+ memcpy(datestr, buffer, len+1);
+
+ len = snprintf(buffer, sizeof(buffer),
+ "%d", to_feet(dive->maxdepth));
depth = malloc(len + 1);
memcpy(depth, buffer, len+1);
len = snprintf(buffer, sizeof(buffer),
- "%d min", dive->duration.seconds / 60);
+ "%d", 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, depth,
- 2, dive->maxdepth,
- 3, duration,
- 4, dive->duration.seconds,
- 5, i,
+ 0, datestr,
+ 1, dive->when,
+ 2, depth,
+ 3, dive->maxdepth,
+ 4, duration,
+ 5, dive->duration.seconds,
+ 6, i,
-1);
}
}
@@ -61,7 +71,8 @@ GtkWidget *create_dive_list(void)
GtkTreeViewColumn *col;
GtkWidget *scroll_window;
- model = gtk_list_store_new(6, G_TYPE_STRING,
+ model = gtk_list_store_new(7,
+ G_TYPE_STRING, G_TYPE_INT,
G_TYPE_STRING, G_TYPE_INT,
G_TYPE_STRING, G_TYPE_INT,
G_TYPE_INT);
@@ -75,8 +86,8 @@ 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_title(col, "Date");
+ gtk_tree_view_column_set_sort_column_id(col, 1);
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);
@@ -84,18 +95,18 @@ GtkWidget *create_dive_list(void)
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_set_title(col, "ft");
+ gtk_tree_view_column_set_sort_column_id(col, 3);
gtk_tree_view_column_pack_start(col, renderer, TRUE);
- gtk_tree_view_column_add_attribute(col, renderer, "text", 1);
+ gtk_tree_view_column_add_attribute(col, renderer, "text", 2);
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_set_title(col, "min");
+ gtk_tree_view_column_set_sort_column_id(col, 5);
gtk_tree_view_column_pack_start(col, renderer, TRUE);
- gtk_tree_view_column_add_attribute(col, renderer, "text", 3);
+ gtk_tree_view_column_add_attribute(col, renderer, "text", 4);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), col);
g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
diff --git a/parse-xml.c b/parse-xml.c
index a2c685ed5..3221111c7 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -683,26 +683,6 @@ static void dive_start(void)
memset(&tm, 0, sizeof(tm));
}
-static char *generate_name(struct dive *dive)
-{
- int len;
- struct tm *tm;
- char buffer[256], *p;
-
- tm = gmtime(&dive->when);
-
- len = snprintf(buffer, sizeof(buffer),
- "%04d-%02d-%02d "
- "%02d:%02d:%02d",
- tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
- tm->tm_hour, tm->tm_min, tm->tm_sec);
- p = malloc(len+1);
- if (!p)
- exit(1);
- memcpy(p, buffer, len+1);
- return p;
-}
-
static void sanitize_gasmix(gasmix_t *mix)
{
unsigned int o2, he;
@@ -770,8 +750,6 @@ static void dive_end(void)
{
if (!dive)
return;
- if (!dive->name)
- dive->name = generate_name(dive);
sanitize_cylinder_info(dive);
record_dive(dive);
dive = NULL;