aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--profile-widget/profilewidget2.cpp26
-rw-r--r--qt-models/diveplannermodel.cpp12
2 files changed, 12 insertions, 26 deletions
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);
}
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index f22dd931e..767edc80a 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -844,6 +844,18 @@ void DivePlannerPointsModel::editStop(int row, divedatapoint newData)
*/
int old_first_cylid = divepoints[0].cylinderid;
+ // Refuse creation of two points with the same time stamp.
+ // Note: "time" is moved in the positive direction to avoid
+ // time becoming zero or, worse, negative.
+ while (std::any_of(divepoints.begin(), divepoints.begin() + row,
+ [t = newData.time] (const divedatapoint &data)
+ { return data.time == t; }))
+ newData.time += 10;
+ while (std::any_of(divepoints.begin() + row + 1, divepoints.end(),
+ [t = newData.time] (const divedatapoint &data)
+ { return data.time == t; }))
+ newData.time += 10;
+
// Is it ok to change data first and then move the rows?
divepoints[row] = newData;