diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-01-13 20:41:48 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-01-13 21:01:52 -0800 |
commit | 1ea445102ed34b704345b4fd3b0ac00fa8380b06 (patch) | |
tree | ec692c631c9338bdf7bc7bd85a4470ce58bff239 | |
parent | c8a99864512eebeb705b495c7aba4da1ff8a5816 (diff) | |
download | subsurface-1ea445102ed34b704345b4fd3b0ac00fa8380b06.tar.gz |
Correctly show the planned dive in the divelist
Previously we would simply show the first dive in the divelist - which
worked fine in the default sort by trip setting and assuming that there
are no dives from the future in the divelist.
With this commit we actually find the correct dive in the divelist and
select it instead. If you sort by depth you will see the dive move around
in the divelist, but it will stay selected and visible in the profile.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | divelist.c | 56 | ||||
-rw-r--r-- | divelist.h | 2 | ||||
-rw-r--r-- | planner.c | 4 |
3 files changed, 33 insertions, 29 deletions
diff --git a/divelist.c b/divelist.c index 68274eafe..57d41a389 100644 --- a/divelist.c +++ b/divelist.c @@ -841,6 +841,14 @@ static void add_dive_to_deco(struct dive *dive) } } +static int get_divenr(struct dive *dive) +{ + int divenr = -1; + while (++divenr < dive_table.nr && get_dive(divenr) != dive) + ; + return divenr; +} + static struct gasmix air = { .o2.permille = 209 }; /* take into account previous dives until there is a 48h gap between dives */ @@ -854,8 +862,7 @@ double init_decompression(struct dive *dive) if (!dive) return 0.0; - while (++divenr < dive_table.nr && get_dive(divenr) != dive) - ; + divenr = get_divenr(dive); when = dive->when; i = divenr; while (i && --i) { @@ -1323,30 +1330,6 @@ static void clear_trip_indexes(void) trip->index = 0; } -void select_last_dive(void) -{ - GtkTreeSelection *selection; - GtkTreeIter iter; - struct dive *dive; - int i; - - /* select the last dive (and make sure it's an actual dive that is selected) */ - /* WARNING - this only works when sorted by date!!! - * - * - * - */ - gtk_tree_model_get_iter_first(MODEL(dive_list), &iter); - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view)); - gtk_tree_selection_unselect_all(selection); - for_each_dive(i, dive) - dive->selected = FALSE; - amount_selected = 0; - gtk_tree_model_get(MODEL(dive_list), &iter, DIVE_INDEX, &selected_dive, -1); - first_leaf(MODEL(dive_list), &iter, &selected_dive); - gtk_tree_selection_select_iter(selection, &iter); -} - static void fill_dive_list(void) { int i, trip_index = 0; @@ -2788,6 +2771,27 @@ static GtkTreeIter *get_iter_from_idx(int idx) return iteridx.iter; } +void show_and_select_dive(struct dive *dive) +{ + GtkTreeSelection *selection; + GtkTreeIter *iter; + struct dive *odive; + int i, divenr; + + divenr = get_divenr(dive); + if (divenr < 0) + /* we failed to find the dive */ + return; + iter = get_iter_from_idx(divenr); + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view)); + gtk_tree_selection_unselect_all(selection); + for_each_dive(i, odive) + odive->selected = FALSE; + amount_selected = 1; + dive->selected = TRUE; + gtk_tree_selection_select_iter(selection, iter); +} + void select_next_dive(void) { GtkTreeIter *nextiter, *parent; diff --git a/divelist.h b/divelist.h index 89762187b..0896af46c 100644 --- a/divelist.h +++ b/divelist.h @@ -15,6 +15,6 @@ extern void remember_tree_state(void); extern void restore_tree_state(void); extern void select_next_dive(void); extern void select_prev_dive(void); -extern void select_last_dive(void); +extern void show_and_select_dive(struct dive *dive); extern double init_decompression(struct dive * dive); #endif @@ -504,9 +504,9 @@ void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep) record_dive(dive); stopidx--; } - /* now make the dive visible as last dive of the dive list */ + /* now make the dive visible in the dive list */ report_dives(FALSE, FALSE); - select_last_dive(); + show_and_select_dive(dive); free(stoplevels); free(gaschanges); } |