From f4f9ba9263c97a7c7612b68711a6c92c70d8721a Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Fri, 6 Dec 2019 09:47:59 +0100 Subject: [PATCH] Selection: provide convenience function for single-dive selection Currently, selecting a single dive or deselecting all dives was quite awkward: One had to pass in a single-dive vector and the dive itself (as current dive). Provide a convenience function that selects a single dive or deselects all dives if null is passed in. Signed-off-by: Berthold Stoeger --- commands/command_divelist.cpp | 5 +---- core/selection.cpp | 12 ++++++++++-- core/selection.h | 1 + 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/commands/command_divelist.cpp b/commands/command_divelist.cpp index 12e1c9309..1d1a90387 100644 --- a/commands/command_divelist.cpp +++ b/commands/command_divelist.cpp @@ -574,10 +574,7 @@ void DeleteDive::redoit() timestamp_t when = divesToAdd.dives[0].dive->when; newCurrent = find_next_visible_dive(when); } - if (newCurrent) - setSelection(std::vector{ newCurrent }, newCurrent); - else - setSelection(std::vector(), nullptr); + select_single_dive(newCurrent); } diff --git a/core/selection.cpp b/core/selection.cpp index 6b5dfe726..7bddd86ee 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -195,6 +195,14 @@ void setSelection(const std::vector &selection, dive *currentDive) emit diveListNotifier.divesSelected(divesToSelect, current_dive); } +extern "C" void select_single_dive(dive *d) +{ + if (d) + setSelection(std::vector{ d }, d); + else + setSelection(std::vector(), nullptr); +} + // Turn current selection into a vector. // TODO: This could be made much more efficient if we kept a sorted list of selected dives! std::vector getDiveSelection() @@ -217,9 +225,9 @@ extern "C" void select_newest_visible_dive() for (int i = dive_table.nr - 1; i >= 0; --i) { dive *d = dive_table.dives[i]; if (!d->hidden_by_filter) - return setSelection({ d }, d); + return select_single_dive(d); } // No visible dive -> deselect all - setSelection({}, nullptr); + select_single_dive(nullptr); } diff --git a/core/selection.h b/core/selection.h index a390f0dd7..8fe5707ce 100644 --- a/core/selection.h +++ b/core/selection.h @@ -20,6 +20,7 @@ extern struct dive *first_selected_dive(void); extern struct dive *last_selected_dive(void); extern bool consecutive_selected(void); extern void select_newest_visible_dive(); +extern void select_single_dive(struct dive *d); // wrapper for setSelection() with a single dive. NULL clears the selection. #if DEBUG_SELECTION_TRACKING extern void dump_selection(void);