From ccfdcca6e63336fddf4444e7bcf56c009c6195f7 Mon Sep 17 00:00:00 2001 From: Anton Lundin Date: Mon, 23 Jun 2014 19:21:29 +0200 Subject: [PATCH] Drop like a stone mode in planner Most of my dives i plan i know it will just be full speed down a line in the beginning and thus the planner can figure out that leg of the plan by it self. The config box added here isn't connected, because i saw that the other planner boxes wasn't connected ether, so i left it in the same state as they where. Signed-off-by: Anton Lundin Signed-off-by: Dirk Hohndel --- qt-ui/diveplanner.cpp | 29 +++++++++++++++++++++++++++++ qt-ui/diveplanner.h | 2 ++ qt-ui/diveplanner.ui | 7 +++++++ qt-ui/plannerSettings.ui | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index c17758547..516b36b0f 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -276,6 +276,7 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg connect(ui.gflow, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFLow(int))); connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(emitDataChanged())); connect(ui.printPlan, SIGNAL(pressed()), this, SLOT(printDecoPlan())); + connect(ui.drop_stone_mode, SIGNAL(toggled(bool)), plannerModel, SLOT(setDropStoneMode(bool))); #ifdef NO_PRINTING ui.printPlan->hide(); #endif @@ -583,6 +584,28 @@ void DivePlannerPointsModel::setDisplayTransitions(bool value) emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1)); } +void DivePlannerPointsModel::setDropStoneMode(bool value) +{ + drop_stone_mode = value; + if (drop_stone_mode) { + /* Remove the first entry if we enable drop_stone_mode */ + if (rowCount() >= 2) { + beginRemoveRows(QModelIndex(), 0, 0); + divepoints.remove(0); + endRemoveRows(); + } + } else { + /* Add a first entry if we disable drop_stone_mode */ + beginInsertRows(QModelIndex(), 0, 0); + /* Copy the first current point */ + divedatapoint p = divepoints.at(0); + p.time = p.depth / 300; + divepoints.push_front(p); + endInsertRows(); + } + emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1)); +} + void DivePlannerPointsModel::setStartTime(const QTime &t) { diveplan.when = (t.msec() + QDateTime::currentMSecsSinceEpoch()) / 1000 - gettimezoneoffset(); @@ -860,6 +883,12 @@ void DivePlannerPointsModel::createTemporaryPlan() divedatapoint p = at(i); int deltaT = lastIndex != -1 ? p.time - at(lastIndex).time : p.time; lastIndex = i; + if (i == 0 && drop_stone_mode) { + /* Okay, we add a fist segment where we go down to depth */ + /* FIXME: make this configurable, now hard-coded to 18 m/s */ + plan_add_segment(&diveplan, p.depth / 300, p.depth, p.gasmix, p.po2, false); + deltaT -= p.depth / 300; + } if (p.entered) plan_add_segment(&diveplan, deltaT, p.depth, p.gasmix, p.po2, true); } diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 96725550b..0b4e783cb 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -73,6 +73,7 @@ slots: void setDecoSac(int sac); void setStartTime(const QTime &t); void setLastStop6m(bool value); + void setDropStoneMode(bool value); void setVerbatim(bool value); void setDisplayRuntime(bool value); void setDisplayDuration(bool value); @@ -104,6 +105,7 @@ private: QVector backupSamples; // For editing added dives. struct dive *stagingDive; QVector > oldGases; + bool drop_stone_mode; }; class DiveHandler : public QObject, public QGraphicsEllipseItem { diff --git a/qt-ui/diveplanner.ui b/qt-ui/diveplanner.ui index 1aa4376dc..33ec33cbd 100644 --- a/qt-ui/diveplanner.ui +++ b/qt-ui/diveplanner.ui @@ -185,6 +185,13 @@ + + + + Drop like a stone mode + + + diff --git a/qt-ui/plannerSettings.ui b/qt-ui/plannerSettings.ui index 547bd8124..82584fa0e 100644 --- a/qt-ui/plannerSettings.ui +++ b/qt-ui/plannerSettings.ui @@ -244,6 +244,42 @@ + + + + Decent rate + + + + + + + surface to the bottom + + + + + + + + 0 + 0 + + + + + 16777215 + 20 + + + + 1 + + + 18 + + + @@ -263,6 +299,7 @@ backgasBreaks ascRate75_2 ascRate75_3 + descRate