summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-05-02 10:38:34 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-05-02 10:39:35 -0700
commit63c50805610c8d0dd0ec85dc62b3007df4e5dc0b (patch)
tree7ac298d79f30d4ca92fd70fd326fd9b7513812db
parente6ec626c9758d30c3f714ddbf6f79195e710e037 (diff)
downloadsubsurface-63c50805610c8d0dd0ec85dc62b3007df4e5dc0b.tar.gz
Move gas string computation into core logic code
This is now a helper called from the Gtk UI code (and will soon be used by the Qt UI code). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--divelist-gtk.c32
-rw-r--r--divelist.c28
-rw-r--r--divelist.h1
3 files changed, 37 insertions, 24 deletions
diff --git a/divelist-gtk.c b/divelist-gtk.c
index a5d70f348..18ef0d122 100644
--- a/divelist-gtk.c
+++ b/divelist-gtk.c
@@ -431,40 +431,24 @@ static gint nitrox_sort_func(GtkTreeModel *model,
return a_he - b_he;
}
-#define UTF8_ELLIPSIS "\xE2\x80\xA6"
-
static void nitrox_data_func(GtkTreeViewColumn *col,
GtkCellRenderer *renderer,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
- int idx, o2, he, o2low;
- char buffer[80];
+ int idx;
+ char *buffer;
struct dive *dive;
gtk_tree_model_get(model, iter, DIVE_INDEX, &idx, -1);
- if (idx < 0) {
- *buffer = '\0';
- goto exit;
+ if (idx >= 0 && (dive = get_dive(idx))) {
+ buffer = get_nitrox_string(dive);
+ g_object_set(renderer, "text", buffer, NULL);
+ free(buffer);
+ } else {
+ g_object_set(renderer, "text", "", NULL);
}
- dive = get_dive(idx);
- get_dive_gas(dive, &o2, &he, &o2low);
- o2 = (o2 + 5) / 10;
- he = (he + 5) / 10;
- o2low = (o2low + 5) / 10;
-
- if (he)
- snprintf(buffer, sizeof(buffer), "%d/%d", o2, he);
- else if (o2)
- if (o2 == o2low)
- snprintf(buffer, sizeof(buffer), "%d", o2);
- else
- snprintf(buffer, sizeof(buffer), "%d" UTF8_ELLIPSIS "%d", o2low, o2);
- else
- strcpy(buffer, _("air"));
-exit:
- g_object_set(renderer, "text", buffer, NULL);
}
/* Render the SAC data (integer value of "ml / min") */
diff --git a/divelist.c b/divelist.c
index e34f7afeb..58d89d5f6 100644
--- a/divelist.c
+++ b/divelist.c
@@ -595,6 +595,34 @@ char *get_trip_date_string(timestamp_t when, int nr) {
return buffer;
}
+#define MAX_NITROX_STRING 80
+#define UTF8_ELLIPSIS "\xE2\x80\xA6"
+
+/* callers needs to free the string */
+char *get_nitrox_string(struct dive *dive)
+{
+ int o2, he, o2low;
+ char *buffer = malloc(MAX_NITROX_STRING);
+
+ if (buffer) {
+ get_dive_gas(dive, &o2, &he, &o2low);
+ o2 = (o2 + 5) / 10;
+ he = (he + 5) / 10;
+ o2low = (o2low + 5) / 10;
+
+ if (he)
+ snprintf(buffer, sizeof(buffer), "%d/%d", o2, he);
+ else if (o2)
+ if (o2 == o2low)
+ snprintf(buffer, sizeof(buffer), "%d", o2);
+ else
+ snprintf(buffer, sizeof(buffer), "%d" UTF8_ELLIPSIS "%d", o2low, o2);
+ else
+ strcpy(buffer, _("air"));
+ }
+ return buffer;
+}
+
/*
* helper functions for dive_trip handling
*/
diff --git a/divelist.h b/divelist.h
index f3054d213..d17ea7c12 100644
--- a/divelist.h
+++ b/divelist.h
@@ -32,6 +32,7 @@ extern void export_all_dives_uddf_cb();
extern void process_dives(bool imported, bool prefer_imported);
extern char *get_dive_date_string(timestamp_t when);
extern char *get_trip_date_string(timestamp_t when, int nr);
+extern char *get_nitrox_string(struct dive *dive);
extern void clear_trip_indexes(void);
extern dive_trip_t *find_trip_by_idx(int idx);
extern int dive_nr_sort(int idx_a, int idx_b, timestamp_t when_a, timestamp_t when_b);