summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-19 16:41:56 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-19 16:41:56 -0700
commit87e8ff9c3e16e2786a9ba9d551e52cd8b9dd9728 (patch)
treed1f03a840246adae27d1e48e42e008d3dc2dbd8f
parentdfacb5e124125e0e864509459d9ffef73495a3cd (diff)
downloadsubsurface-87e8ff9c3e16e2786a9ba9d551e52cd8b9dd9728.tar.gz
Update the divelist when dive info changes
This flushes the dive changes to the dive list, the way the old dive info frame would update as you update dive fields. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--divelist.c42
-rw-r--r--divelist.h3
-rw-r--r--main.c1
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
diff --git a/main.c b/main.c
index 7c7ec8c3e..f91663276 100644
--- a/main.c
+++ b/main.c
@@ -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);