diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2016-04-14 05:34:19 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-04-14 09:42:10 -0700 |
commit | 590af9ae7dced1ca87b38f1ab3774d3a2b678ba1 (patch) | |
tree | 98dba41ea7eb8a06f4ae998bd8203d49084b15f3 /core/divelist.c | |
parent | 176b92776b45d6f1135441513727cb5f23f49d88 (diff) | |
download | subsurface-590af9ae7dced1ca87b38f1ab3774d3a2b678ba1.tar.gz |
Add helper to find the dive closest to a given time
If we want to keep the selected dive "close" to where it was before an
operation (whether a delete, or a reload, or something like that), then
the most intuitive thing to do appears to be to select either the same
dive again (if it still exists), or one very close to it in time. This
helper allows us to identify the dive in the current dive list that is
closest to the given time.
We do this in the C code to ensure that we look at all dives in the
dive_table - based on the id that is returned the UI can then figure out
where this dive is currently shown.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'core/divelist.c')
-rw-r--r-- | core/divelist.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/core/divelist.c b/core/divelist.c index 543d9e17b..52545af1a 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -1189,6 +1189,33 @@ void report_datafile_version(int version) min_datafile_version = version; } +int get_dive_id_closest_to(timestamp_t when) +{ + int i; + int nr = dive_table.nr; + + // deal with pathological cases + if (nr == 0) + return 0; + else if (nr == 1) + return dive_table.dives[0]->id; + + for (i = 0; i < nr && dive_table.dives[i]->when <= when; i++) + ; // nothing + + // again, capture the two edge cases first + if (i == nr) + return dive_table.dives[i - 1]->id; + else if (i == 0) + return dive_table.dives[0]->id; + + if (when - dive_table.dives[i - 1]->when < dive_table.dives[i]->when - when) + return dive_table.dives[i - 1]->id; + else + return dive_table.dives[i]->id; +} + + void clear_dive_file_data() { while (dive_table.nr) |