diff options
-rw-r--r-- | profile-widget/profilewidget2.cpp | 26 | ||||
-rw-r--r-- | qt-models/diveplannermodel.cpp | 12 |
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; |