X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=divelist.c;h=a8afd3ac2e5aac5540bd0faef71d3863c33d8c4c;hb=b57748499879a1fe3a9af8250de8c5d29ba82b3c;hp=60ad16a7fe541ced018f03010e732957b6974024;hpb=160745c545c05f4b25a3c042aa770e8213b763a2;p=ext%2Fsubsurface.git diff --git a/divelist.c b/divelist.c index 60ad16a..a8afd3a 100644 --- a/divelist.c +++ b/divelist.c @@ -320,6 +320,7 @@ static double calculate_airuse(struct dive *dive) static int calculate_sac(struct dive *dive) { double airuse, pressure, sac; + int duration, i; airuse = calculate_airuse(dive); if (!airuse) @@ -327,9 +328,25 @@ static int calculate_sac(struct dive *dive) if (!dive->duration.seconds) return 0; + /* find and eliminate long surface intervals */ + duration = dive->duration.seconds; + for (i = 0; i < dive->samples; i++) { + if (dive->sample[i].depth.mm < 100) { /* less than 10cm */ + int end = i + 1; + while (end < dive->samples && dive->sample[end].depth.mm < 100) + end++; + /* we only want the actual surface time during a dive */ + if (end < dive->samples) { + end--; + duration -= dive->sample[end].time.seconds - + dive->sample[i].time.seconds; + i = end + 1; + } + } + } /* Mean pressure in atm: 1 atm per 10m */ pressure = 1 + (dive->meandepth.mm / 10000.0); - sac = airuse / pressure * 60 / dive->duration.seconds; + sac = airuse / pressure * 60 / duration; /* milliliters per minute.. */ return sac * 1000; @@ -506,6 +523,20 @@ static void realize_cb(GtkWidget *tree_view, gpointer userdata) gtk_widget_grab_focus(tree_view); } +static void row_activated_cb(GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + GtkTreeModel *model) +{ + int index; + GtkTreeIter iter; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + return; + gtk_tree_model_get(model, &iter, DIVE_INDEX, &index, -1); + edit_dive_info(get_dive(index)); +} + GtkWidget *dive_list_create(void) { GtkTreeSelection *selection; @@ -551,6 +582,7 @@ GtkWidget *dive_list_create(void) NULL); g_signal_connect_after(dive_list.tree_view, "realize", G_CALLBACK(realize_cb), NULL); + g_signal_connect(dive_list.tree_view, "row-activated", G_CALLBACK(row_activated_cb), dive_list.model); g_signal_connect(selection, "changed", G_CALLBACK(selection_cb), dive_list.model); dive_list.container_widget = gtk_scrolled_window_new(NULL, NULL);