summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-10-11 16:39:40 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-10-11 20:26:28 -0700
commit58b668c714223bf7ab1164f27353fb49a38ada40 (patch)
tree1323e0115a2805dba6da3147258965f7abf2f140
parentd031b54d16e74becd3a5b320c5cbed62a66c9d57 (diff)
downloadsubsurface-58b668c714223bf7ab1164f27353fb49a38ada40.tar.gz
Fix dive planner sidebar depth units
The dive planner always showed the depth in our internal units, ie millimeter, in the sidebar that showed the plan points. That made little sense in metric mode, and none at all in imperial. The _graph_ showed things in meter and feet. So make the DivePlannerPointsModel always convert things to and from the user units. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--dive.c7
-rw-r--r--dive.h2
-rw-r--r--qt-ui/diveplanner.cpp4
3 files changed, 11 insertions, 2 deletions
diff --git a/dive.c b/dive.c
index c03d124a4..a98b10412 100644
--- a/dive.c
+++ b/dive.c
@@ -101,6 +101,13 @@ double get_volume_units(unsigned int ml, int *frac, const char **units)
return vol;
}
+unsigned int units_to_depth(double depth)
+{
+ if (get_units()->length == METERS)
+ return rint(depth * 1000);
+ return feet_to_mm(depth);
+}
+
double get_depth_units(unsigned int mm, int *frac, const char **units)
{
int decimals;
diff --git a/dive.h b/dive.h
index aec59f6f9..fd9431a30 100644
--- a/dive.h
+++ b/dive.h
@@ -185,6 +185,8 @@ extern double get_temp_units(unsigned int mk, const char **units);
extern double get_weight_units(unsigned int grams, int *frac, const char **units);
extern double get_vertical_speed_units(unsigned int mms, int *frac, const char **units);
+extern unsigned int units_to_depth(double depth);
+
static inline double grams_to_lbs(int grams)
{
return grams / 453.6;
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 7c7957e67..2078ff8a8 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -937,7 +937,7 @@ QVariant DivePlannerPointsModel::data(const QModelIndex& index, int role) const
divedatapoint p = divepoints.at(index.row());
switch(index.column()) {
case CCSETPOINT: return p.po2;
- case DEPTH: return p.depth;
+ case DEPTH: return rint(get_depth_units(p.depth, NULL, NULL));
case DURATION: return p.time / 60;
case GAS: return strForAir(p);
}
@@ -956,7 +956,7 @@ bool DivePlannerPointsModel::setData(const QModelIndex& index, const QVariant& v
if(role == Qt::EditRole) {
divedatapoint& p = divepoints[index.row()];
switch(index.column()) {
- case DEPTH: p.depth = value.toInt(); break;
+ case DEPTH: p.depth = units_to_depth(value.toInt()); break;
case DURATION: p.time = value.toInt() * 60; break;
case CCSETPOINT:{
int po2 = 0;