summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-01-24 07:05:32 +1200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-01-24 07:07:02 +1200
commitc3614424f9117c053c783fba5f6499743ec125f9 (patch)
treea598bd77a071d74e3c9570adbe4e39f544f996c9
parent6aee901f6fb329b3c8b3945fc394842a921ca2c7 (diff)
downloadsubsurface-c3614424f9117c053c783fba5f6499743ec125f9.tar.gz
Correcly look at all relevant dive computer structures
When calculating maxima for a dive, we need to take data from all existing dive computer structures plus potentially also a fake dive computer structure that is just passed in in order to create a meaningful profile. Commit 86c961614bfa ("Actually walk all dive computers, don't just claim to do so") missed that second case and no longer took the fake_dc into account, breaking the display of dives that don't have samples. Reported-by: Miika Turkia <miika.turkia@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--profile.c12
-rw-r--r--profile.h2
-rw-r--r--qt-ui/profile/profilewidget2.cpp2
3 files changed, 12 insertions, 4 deletions
diff --git a/profile.c b/profile.c
index 0e5306adb..3e5887bd0 100644
--- a/profile.c
+++ b/profile.c
@@ -442,9 +442,10 @@ static void check_setpoint_events(struct dive *dive, struct divecomputer *dc, st
}
-struct plot_info calculate_max_limits_new(struct dive *dive)
+struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer *given_dc)
{
struct divecomputer *dc = &(dive->dc);
+ bool seen = false;
static struct plot_info pi;
int maxdepth = dive->maxdepth.mm;
int maxtime = 0;
@@ -465,6 +466,8 @@ struct plot_info calculate_max_limits_new(struct dive *dive)
/* Then do all the samples from all the dive computers */
do {
+ if (dc == given_dc)
+ seen = true;
int i = dc->samples;
int lastdepth = 0;
struct sample *s = dc->sample;
@@ -497,7 +500,12 @@ struct plot_info calculate_max_limits_new(struct dive *dive)
lastdepth = depth;
s++;
}
- } while ((dc = dc->next) != NULL);
+ dc = dc->next;
+ if (dc == NULL && !seen) {
+ dc = given_dc;
+ seen = true;
+ }
+ } while (dc != NULL);
if (minpressure > maxpressure)
minpressure = 0;
diff --git a/profile.h b/profile.h
index 726d10573..36b8aa767 100644
--- a/profile.h
+++ b/profile.h
@@ -68,7 +68,7 @@ struct ev_select {
bool plot_ev;
};
-struct plot_info calculate_max_limits_new(struct dive *dive);
+struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer *given_dc);
void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int bufsize, int sum);
struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
struct plot_info *analyze_plot_info(struct plot_info *pi);
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 141c7e978..ea2a42d49 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -535,7 +535,7 @@ void ProfileWidget2::plotDive(struct dive *d, bool force)
* so I'll *not* calculate everything if something is not being
* shown.
*/
- plotInfo = calculate_max_limits_new(&displayed_dive);
+ plotInfo = calculate_max_limits_new(&displayed_dive, currentdc);
create_plot_info_new(&displayed_dive, currentdc, &plotInfo, !shouldCalculateMaxDepth);
if (shouldCalculateMaxTime)
maxtime = get_maxtime(&plotInfo);