diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-11-25 19:00:38 +0100 |
---|---|---|
committer | bstoeger <32835590+bstoeger@users.noreply.github.com> | 2019-12-04 13:00:23 +0100 |
commit | 755f185cfcbd3d61457df6fdff32bcf2118f0ab5 (patch) | |
tree | c596b7b00b830a8fed11b661fd4d9de3582337b4 /core | |
parent | 86f384f932ae04ab17dabadda81d845069f963d7 (diff) | |
download | subsurface-755f185cfcbd3d61457df6fdff32bcf2118f0ab5.tar.gz |
Selection: move selection of "first" dive to core
The DiveListView has a function to select the first dive. Move
this to the core to be able to call it from all parts (not only
desktop) of the code.
Currently, this has a (small?) UI regression: when filtering dives
and no selected dive is visible anymore, the old code would select
the first dive in the list. The new code selects the newest dive,
which might not be the first if some sort-criterion is active.
To revert to the old behavior, it will be necessary to move the
sorting function likewise to the core.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r-- | core/selection.cpp | 13 | ||||
-rw-r--r-- | core/selection.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/core/selection.cpp b/core/selection.cpp index 92bb631fc..6b5dfe726 100644 --- a/core/selection.cpp +++ b/core/selection.cpp @@ -210,3 +210,16 @@ std::vector<dive *> getDiveSelection() } return res; } + +// Select the first dive that is visible +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); + } + + // No visible dive -> deselect all + setSelection({}, nullptr); +} diff --git a/core/selection.h b/core/selection.h index e990a697c..a390f0dd7 100644 --- a/core/selection.h +++ b/core/selection.h @@ -19,6 +19,7 @@ extern void deselect_dive(struct dive *dive); 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(); #if DEBUG_SELECTION_TRACKING extern void dump_selection(void); |