From 891839d254b8383abea7933ec45aa896d43100c7 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Mon, 25 Jan 2021 16:03:03 +0100 Subject: planner: move same-time check to DivePlannerPointsModel There must not be two dive planner points at the same time stamp, as this violates the laws of physics (and internal assumptions). The corresponding test was done in the profile code at two different places with floating point arithmetics. This is a bad idea, because 1) code duplication 2) danger of rounding issues Instead, do this in one central point in the planner model and use integer arithmetics. Simply add a few seconds until a unique timestamp is obtained. Signed-off-by: Berthold Stoeger --- profile-widget/profilewidget2.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) (limited to 'profile-widget') diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp index 38bbfdd00..12be6e4a8 100644 --- a/profile-widget/profilewidget2.cpp +++ b/profile-widget/profilewidget2.cpp @@ -1873,19 +1873,6 @@ void ProfileWidget2::keyLeftAction() if (dp.time / 60 <= 0) continue; - // don't overlap positions. - // maybe this is a good place for a 'goto'? - double xpos = timeAxis->posAtValue((dp.time - 60) / 60); - bool nextStep = false; - for (const auto &h: handles) { - if (IS_FP_SAME(h->pos().x(), xpos)) { - nextStep = true; - break; - } - } - if (nextStep) - continue; - dp.time -= 60; plannerModel->editStop(row, dp); } @@ -1907,19 +1894,6 @@ void ProfileWidget2::keyRightAction() if (dp.time / 60.0 >= timeAxis->maximum()) continue; - // don't overlap positions. - // maybe this is a good place for a 'goto'? - double xpos = timeAxis->posAtValue((dp.time + 60) / 60); - bool nextStep = false; - for (const auto &h: handles) { - if (IS_FP_SAME(h->pos().x(), xpos)) { - nextStep = true; - break; - } - } - if (nextStep) - continue; - dp.time += 60; plannerModel->editStop(row, dp); } -- cgit v1.2.3-70-g09d2