Profile heartrate: Nicer min/max values and tic distance

Correct a bug in finding the minimum heartrate.

Use the minimum and maximum heartrate value to set min/max and
tic distance for the heartrate axis in the profile.

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
This commit is contained in:
Stefan Fuchs 2018-03-15 23:12:45 +01:00 committed by Dirk Hohndel
parent ea7f49031d
commit b38eb45b29
2 changed files with 16 additions and 4 deletions

View file

@ -439,7 +439,7 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer
maxpressure = pressure;
if (heartbeat > maxhr)
maxhr = heartbeat;
if (heartbeat < minhr)
if (heartbeat && heartbeat < minhr)
minhr = heartbeat;
if (depth > maxdepth)
@ -469,7 +469,7 @@ struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer
if (minpressure > maxpressure)
minpressure = 0;
if (minhr > maxhr)
minhr = 0;
minhr = maxhr;
memset(&pi, 0, sizeof(pi));
pi.maxdepth = maxdepth;

View file

@ -644,8 +644,20 @@ void ProfileWidget2::plotDive(struct dive *d, bool force)
#ifndef SUBSURFACE_MOBILE
if (plotInfo.maxhr) {
heartBeatAxis->setMinimum(plotInfo.minhr);
heartBeatAxis->setMaximum(plotInfo.maxhr);
int heartBeatAxisMin = lrint(plotInfo.minhr / 5.0 - 0.5) * 5;
int heartBeatAxisMax, heartBeatAxisTick;
if (plotInfo.maxhr - plotInfo.minhr < 40)
heartBeatAxisTick = 10;
else if (plotInfo.maxhr - plotInfo.minhr < 80)
heartBeatAxisTick = 20;
else if (plotInfo.maxhr - plotInfo.minhr < 100)
heartBeatAxisTick = 25;
else
heartBeatAxisTick = 50;
for (heartBeatAxisMax = heartBeatAxisMin; heartBeatAxisMax < plotInfo.maxhr; heartBeatAxisMax += heartBeatAxisTick);
heartBeatAxis->setMinimum(heartBeatAxisMin);
heartBeatAxis->setMaximum(heartBeatAxisMax + 1);
heartBeatAxis->setTickInterval(heartBeatAxisTick);
heartBeatAxis->updateTicks(HR_AXIS); // this shows the ticks
}
heartBeatAxis->setVisible(prefs.hrgraph && plotInfo.maxhr);