From e946ce98feb6144548d0f3a12d8c39b5b2a6d02d Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Sat, 22 Aug 2020 13:03:51 +0200 Subject: Planner: enforce minimal segement duration You cannot be at two depths at the same time (and it confuses the planner). So give yourself at least 10 seconds. Signed-off-by: Robert C. Helling Signed-off-by: Dirk Hohndel --- qt-models/diveplannermodel.cpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'qt-models/diveplannermodel.cpp') diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index bdc79c9e6..5be22b08d 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -339,17 +339,35 @@ bool DivePlannerPointsModel::setData(const QModelIndex &index, const QVariant &v } break; case RUNTIME: - p.time = value.toInt() * 60; - break; - case DURATION: + { + int secs = value.toInt() * 60; i = index.row(); + int duration = secs; if (i) - shift = divepoints[i].time - divepoints[i - 1].time - value.toInt() * 60; - else - shift = divepoints[i].time - value.toInt() * 60; - while (i < divepoints.size()) - divepoints[i++].time -= shift; + duration -= divepoints[i-1].time; + // Make sure segments have a minimal duration + if (duration <= 0) + secs += 10 - duration; + p.time = secs; + while (++i < divepoints.size()) + if (divepoints[i].time < divepoints[i - 1].time + 10) + divepoints[i].time = divepoints[i - 1].time + 10; + } break; + case DURATION: + { + int secs = value.toInt() * 60; + if (!secs) + secs = 10; + i = index.row(); + if (i) + shift = divepoints[i].time - divepoints[i - 1].time - secs; + else + shift = divepoints[i].time - secs; + while (i < divepoints.size()) + divepoints[i++].time -= shift; + } + break; case CCSETPOINT: { int po2 = 0; QByteArray gasv = value.toByteArray(); -- cgit v1.2.3-70-g09d2