summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--divelist.c56
-rw-r--r--divelist.h2
-rw-r--r--planner.c4
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
diff --git a/planner.c b/planner.c
index c1b0fb4a3..dc5e53406 100644
--- a/planner.c
+++ b/planner.c
@@ -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);
}