diff options
-rw-r--r-- | divelist.c | 42 | ||||
-rw-r--r-- | divelist.h | 3 | ||||
-rw-r--r-- | main.c | 1 |
3 files changed, 33 insertions, 13 deletions
diff --git a/divelist.c b/divelist.c index d215fd236..9c1510664 100644 --- a/divelist.c +++ b/divelist.c @@ -232,23 +232,14 @@ static void get_sac(struct dive *dive, int *val, char **str) *str = strdup(buffer); } -static gboolean set_one_dive(GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer data) +static void fill_one_dive(struct dive *dive, + GtkTreeModel *model, + GtkTreeIter *iter) { - GValue value = {0, }; - struct dive *dive; int date, depth, duration, temp, nitrox, sac; char *datestr, *depthstr, *durationstr, *tempstr, *nitroxstr, *sacstr; char *location; - /* Get the dive number */ - gtk_tree_model_get_value(model, iter, DIVE_INDEX, &value); - dive = get_dive(g_value_get_int(&value)); - if (!dive) - return TRUE; - get_date(dive, &date, &datestr); get_depth(dive, &depth, &depthstr); get_duration(dive, &duration, &durationstr); @@ -273,8 +264,33 @@ static gboolean set_one_dive(GtkTreeModel *model, DIVE_SACSTR, sacstr, DIVE_SAC, sac, -1); +} + +static gboolean set_one_dive(GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data) +{ + GValue value = {0, }; + struct dive *dive; + + /* Get the dive number */ + gtk_tree_model_get_value(model, iter, DIVE_INDEX, &value); + dive = get_dive(g_value_get_int(&value)); + if (!dive) + return TRUE; + if (data && dive != data) + return FALSE; + + fill_one_dive(dive, model, iter); + return dive == data; +} + +void flush_divelist(struct DiveList *dive_list, struct dive *dive) +{ + GtkTreeModel *model = GTK_TREE_MODEL(dive_list->model); - return FALSE; + gtk_tree_model_foreach(model, set_one_dive, dive); } void update_dive_list_units(struct DiveList *dive_list) diff --git a/divelist.h b/divelist.h index e0ab1137c..46598b14f 100644 --- a/divelist.h +++ b/divelist.h @@ -11,9 +11,12 @@ struct DiveList { GtkTreeViewColumn *temperature, *nitrox, *sac; }; +struct dive; + extern struct DiveList dive_list; extern struct DiveList dive_list_create(void); extern void dive_list_update_dives(struct DiveList); extern void update_dive_list_units(struct DiveList *); +extern void flush_divelist(struct DiveList *, struct dive *); #endif @@ -98,6 +98,7 @@ void update_dive(struct dive *new_dive) if (old_dive) { flush_dive_info_changes(old_dive); flush_dive_equipment_changes(old_dive); + flush_divelist(&dive_list, old_dive); } if (new_dive) { show_dive_info(new_dive); |