]> git.tdb.fi Git - ext/subsurface.git/blobdiff - divelist.c
Use renderer function for divelist depth field too
[ext/subsurface.git] / divelist.c
index f390b49ea519f78404193e0ab0efd7b857afe72c..c537e81862d3cd571c2a36f73fdcece77576b877 100644 (file)
@@ -13,9 +13,7 @@
  */
 enum {
        DIVE_INDEX = 0,
-       DIVE_DATESTR,           /* "Thu Jun 17th, 2011" or whatever */
        DIVE_DATE,              /* time_t: dive->when */
-       DIVE_DEPTHSTR,          /* "67" in ft or whatever */
        DIVE_DEPTH,             /* int: dive->maxdepth in mm */
        DIVE_DURATIONSTR,       /* "47" in minutes */
        DIVE_DURATION,          /* int: in seconds */
@@ -60,34 +58,43 @@ static const char *monthname(int mon)
        return month_array[mon];
 }
 
-static void get_date(struct dive *dive, int *val, char **str)
+static void date_data_func(GtkTreeViewColumn *col,
+                          GtkCellRenderer *renderer,
+                          GtkTreeModel *model,
+                          GtkTreeIter *iter,
+                          gpointer data)
 {
+       int val;
        struct tm *tm;
-       time_t when = dive->when;
+       time_t when;
        char buffer[40];
 
+       gtk_tree_model_get(model, iter, DIVE_DATE, &val, -1);
+
        /* 2038 problem */
-       *val = when;
+       when = val;
 
-       tm = gmtime(&dive->when);
+       tm = gmtime(&when);
        snprintf(buffer, sizeof(buffer),
                "%s, %s %d, %d %02d:%02d",
                weekday(tm->tm_wday),
                monthname(tm->tm_mon),
                tm->tm_mday, tm->tm_year + 1900,
                tm->tm_hour, tm->tm_min);
-       *str = strdup(buffer);
+       g_object_set(renderer, "text", buffer, NULL);
 }
 
-static void get_depth(struct dive *dive, int *val, char **str)
+static void depth_data_func(GtkTreeViewColumn *col,
+                           GtkCellRenderer *renderer,
+                           GtkTreeModel *model,
+                           GtkTreeIter *iter,
+                           gpointer data)
 {
-       int len;
-       int depth = dive->maxdepth.mm;
-       int integer, frac = -1;
-       char buffer[10];
+       int depth, integer, frac, len;
+       char buffer[40];
+
+       gtk_tree_model_get(model, iter, DIVE_DEPTH, &depth, -1);
 
-       *val = depth;
-       *str = "";
        switch (output_units.length) {
        case METERS:
                /* To tenths of meters */
@@ -100,18 +107,17 @@ static void get_depth(struct dive *dive, int *val, char **str)
                /* Rounding? */
                break;
        case FEET:
-               integer = to_feet(dive->maxdepth);
+               integer = mm_to_feet(depth) + 0.5;
                frac = -1;
                break;
        default:
                return;
        }
-       len = snprintf(buffer, sizeof(buffer),
-                      "%d", integer);
+       len = snprintf(buffer, sizeof(buffer), "%d", integer);
        if (frac >= 0)
-               len += snprintf(buffer+len, sizeof(buffer)-len,
-                       ".%d", frac);
-       *str = strdup(buffer);
+               len += snprintf(buffer+len, sizeof(buffer)-len, ".%d", frac);
+
+       g_object_set(renderer, "text", buffer, NULL);
 }
 
 static void get_duration(struct dive *dive, int *val, char **str)
@@ -236,12 +242,10 @@ static void fill_one_dive(struct dive *dive,
                          GtkTreeModel *model,
                          GtkTreeIter *iter)
 {
-       int date, depth, duration, temp, nitrox, sac;
-       char *datestr, *depthstr, *durationstr, *tempstr, *nitroxstr, *sacstr;
+       int duration, temp, nitrox, sac;
+       char *durationstr, *tempstr, *nitroxstr, *sacstr;
        char *location;
 
-       get_date(dive, &date, &datestr);
-       get_depth(dive, &depth, &depthstr);
        get_duration(dive, &duration, &durationstr);
        get_location(dive, &location);
        get_temp(dive, &temp, &tempstr);
@@ -253,8 +257,6 @@ static void fill_one_dive(struct dive *dive,
         * The core data itself is unaffected by units
         */
        gtk_list_store_set(GTK_LIST_STORE(model), iter,
-               DIVE_DATESTR, datestr,
-               DIVE_DEPTHSTR, depthstr,
                DIVE_DURATIONSTR, durationstr,
                DIVE_LOCATION, location,
                DIVE_TEMPSTR, tempstr,
@@ -325,9 +327,7 @@ static void fill_dive_list(struct DiveList *dive_list)
                gtk_list_store_append(store, &iter);
                gtk_list_store_set(store, &iter,
                        DIVE_INDEX, i,
-                       DIVE_DATESTR, "date",
                        DIVE_DATE, dive->when,
-                       DIVE_DEPTHSTR, "depth",
                        DIVE_DEPTH, dive->maxdepth,
                        DIVE_DURATIONSTR, "duration",
                        DIVE_DURATION, dive->duration.seconds,
@@ -360,8 +360,8 @@ struct DiveList dive_list_create(void)
 
        dive_list.model = gtk_list_store_new(DIVELIST_COLUMNS,
                                G_TYPE_INT,                     /* index */
-                               G_TYPE_STRING, G_TYPE_INT,      /* Date */
-                               G_TYPE_STRING, G_TYPE_INT,      /* Depth */
+                               G_TYPE_INT,                     /* Date */
+                               G_TYPE_INT,                     /* Depth */
                                G_TYPE_STRING, G_TYPE_INT,      /* Duration */
                                G_TYPE_STRING,                  /* Location */
                                G_TYPE_STRING, G_TYPE_INT,      /* Temperature */
@@ -380,7 +380,7 @@ struct DiveList dive_list_create(void)
        gtk_tree_view_column_set_sort_column_id(col, DIVE_DATE);
        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", DIVE_DATESTR);
+       gtk_tree_view_column_set_cell_data_func(col, renderer, date_data_func, NULL, NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(dive_list.tree_view), col);
 
        renderer = gtk_cell_renderer_text_new();
@@ -388,7 +388,7 @@ struct DiveList dive_list_create(void)
        gtk_tree_view_column_set_title(col, "ft");
        gtk_tree_view_column_set_sort_column_id(col, DIVE_DEPTH);
        gtk_tree_view_column_pack_start(col, renderer, FALSE);
-       gtk_tree_view_column_add_attribute(col, renderer, "text", DIVE_DEPTHSTR);
+       gtk_tree_view_column_set_cell_data_func(col, renderer, depth_data_func, NULL, NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(dive_list.tree_view), col);
        gtk_object_set(GTK_OBJECT(renderer), "alignment", PANGO_ALIGN_RIGHT, NULL);
        gtk_cell_renderer_set_alignment(GTK_CELL_RENDERER(renderer), 1.0, 0.5);