diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-02-09 07:41:15 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-02-09 07:41:15 -0800 |
commit | ebcbe5aedd6188d2dce0cc9dee37daaaab4e8b05 (patch) | |
tree | a163cfaa732ed09ee4ebe3c7e88e32fc81beb9af /dive.c | |
parent | b9865d6bbc30ff4f82ffa17d4a2e3e74bc1054ed (diff) | |
download | subsurface-ebcbe5aedd6188d2dce0cc9dee37daaaab4e8b05.tar.gz |
Finish removing accesses to first divecomputer instead of dive
This adds watertemp and airtemp to the dive, populates them in fixup and
uses them elsewhere in the code.
WARNING: as a sideeffect we now edit the airtemp in the dive, but we never
display this in the DIve Info notebook (as that always displays the data
from the specific selected divecomputer). This is likely to cause
confusion. It's consistent behavior, but... odd. This brings back the
desire to have a view of "best data available" for a dive, in addition to
the "per divecomputer" view. This would also allow us to consolidate the
different pressure graphs we may be getting from different divecomputers
(consider the case where you dive with multiple air integrated computers
that are connected to different tanks - now we could have one profile with
all the correct tank pressure plots overlayed - and the best available (or
edited) data in the corresponding Dive Info notebook.
This commit also fixes a few remaining accesses to the first divecomputer
that fell through the cracks earlier and does a couple of other related
cleanups.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.c')
-rw-r--r-- | dive.c | 33 |
1 files changed, 32 insertions, 1 deletions
@@ -469,6 +469,36 @@ static void fixup_duration(struct dive *dive) dive->duration.seconds = duration; } +static void fixup_watertemp(struct dive *dive) +{ + struct divecomputer *dc; + int sum = 0, nr = 0; + + for_each_dc(dive, dc) { + if (dc->watertemp.mkelvin) { + sum += dc->watertemp.mkelvin; + nr++; + } + } + if (nr) + dive->watertemp.mkelvin = (sum + nr / 2) / nr; +} + +static void fixup_airtemp(struct dive *dive) +{ + struct divecomputer *dc; + int sum = 0, nr = 0; + + for_each_dc(dive, dc) { + if (dc->airtemp.mkelvin) { + sum += dc->airtemp.mkelvin; + nr++; + } + } + if (nr) + dive->airtemp.mkelvin = (sum + nr / 2) / nr; +} + /* * events are stored as a linked list, so the concept of * "consecutive, identical events" is somewhat hard to @@ -662,6 +692,8 @@ struct dive *fixup_dive(struct dive *dive) fixup_surface_pressure(dive); fixup_meandepth(dive); fixup_duration(dive); + fixup_watertemp(dive); + fixup_airtemp(dive); for_each_dc(dive, dc) fixup_dive_dc(dive, dc); @@ -1580,7 +1612,6 @@ struct dive *merge_dives(struct dive *a, struct dive *b, int offset, gboolean pr MERGE_MAX(res, a, b, rating); MERGE_TXT(res, a, b, suit); MERGE_MAX(res, a, b, number); - res->dc.meandepth.mm = 0; MERGE_NONZERO(res, a, b, cns); MERGE_NONZERO(res, a, b, visibility); merge_equipment(res, a, b); |