diff options
author | Robert C. Helling <helling@atdotde.de> | 2014-08-06 10:16:12 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-08-13 21:11:07 -0600 |
commit | ecf0408aae4024f70a3c9689d1de394a2f47a0ff (patch) | |
tree | 94b1f74c5d7f24f7e0ee7582101811014c11d1d9 | |
parent | d453d5cb37dcec5341c9ef8e6063665dc5b629b8 (diff) | |
download | subsurface-ecf0408aae4024f70a3c9689d1de394a2f47a0ff.tar.gz |
Make SAC values in planner settings respect unit settings
So far, the fields for the two SAC rates did not show a unit and were implictly l/min.
Now they respect the settings for volume units. This was harder than I thought for two reasons:
1) Imperial units for SAC are cuft/min but a typical value would be .70. So I made the point
the field prefix and what is entered is actually hundreth of cuft per minute.
2) I had to get the rounding right in order not to get effects like 20l/min become .70 cuft/min (19800 ml/min
internally) which would then become 19l/min when switching back.
While being at it, I gave the gradient factors '%'-signs as units.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | dive.c | 11 | ||||
-rw-r--r-- | dive.h | 1 | ||||
-rw-r--r-- | qt-ui/diveplanner.cpp | 26 | ||||
-rw-r--r-- | qt-ui/plannerSettings.ui | 22 |
4 files changed, 52 insertions, 8 deletions
@@ -188,6 +188,17 @@ double get_volume_units(unsigned int ml, int *frac, const char **units) return vol; } +int units_to_sac(int volume) +{ + if(get_units()->volume == CUFT) + if (volume < 10) + return cuft_to_l(volume) * 100; + else + return cuft_to_l(volume) * 10; + else + return volume * 1000; +} + unsigned int units_to_depth(double depth) { if (get_units()->length == METERS) @@ -99,6 +99,7 @@ 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); +extern int units_to_sac(int volume); /* Volume in mliter of a cylinder at pressure 'p' */ extern int gas_volume(cylinder_t *cyl, pressure_t p); diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 09320cafe..e51400ac0 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -416,8 +416,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFLow())); connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool))); - ui.bottomSAC->setValue(prefs.bottomsac / 1000.0); - ui.decoStopSAC->setValue(prefs.decosac / 1000.0); + ui.bottomSAC->setValue(rint(get_volume_units(prefs.bottomsac, NULL, NULL))); + ui.decoStopSAC->setValue(rint(get_volume_units(prefs.decosac, NULL, NULL))); ui.gflow->setValue(prefs.gflow); ui.gfhigh->setValue(prefs.gfhigh); @@ -466,6 +466,21 @@ void PlannerSettingsWidget::settingsChanged() ui.asc50to6->setText(tr("50% avg. depth to 6m")); ui.asc6toSurf->setText(tr("6m to surface")); } + if(get_units()->volume == units::CUFT) { + ui.bottomSAC->setSuffix(tr("cuft/min")); + ui.decoStopSAC->setSuffix(tr("cuft/min")); + ui.bottomSAC->setPrefix("."); + ui.decoStopSAC->setPrefix("."); + ui.bottomSAC->setValue(rint(ml_to_cuft(prefs.bottomsac) * 100.0)); + ui.decoStopSAC->setValue(rint(ml_to_cuft(prefs.decosac) * 100.0)); + } else { + ui.bottomSAC->setSuffix(tr("ℓ/min")); + ui.decoStopSAC->setSuffix(tr("ℓ/min")); + ui.bottomSAC->setPrefix(""); + ui.decoStopSAC->setPrefix(""); + ui.bottomSAC->setValue(rint((double) prefs.bottomsac / 1000.0)); + ui.decoStopSAC->setValue(rint((double) prefs.decosac / 1000.0)); + } updateUnitsUI(); ui.ascRate75->setSuffix(vs); ui.ascRate50->setSuffix(vs); @@ -690,14 +705,17 @@ void DivePlannerPointsModel::emitDataChanged() void DivePlannerPointsModel::setBottomSac(int sac) { - diveplan.bottomsac = sac * 1000; + volume_t newSAC; + newSAC.mliter = units_to_sac(sac); + diveplan.bottomsac = newSAC.mliter; prefs.bottomsac = diveplan.bottomsac; emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1)); } void DivePlannerPointsModel::setDecoSac(int sac) { - diveplan.decosac = sac * 1000; + volume_t newSAC; + diveplan.decosac = units_to_sac(sac); prefs.decosac = diveplan.decosac; emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1)); } diff --git a/qt-ui/plannerSettings.ui b/qt-ui/plannerSettings.ui index 0ad0f5b70..a28453c01 100644 --- a/qt-ui/plannerSettings.ui +++ b/qt-ui/plannerSettings.ui @@ -30,8 +30,8 @@ <rect> <x>0</x> <y>0</y> - <width>1089</width> - <height>404</height> + <width>1078</width> + <height>418</height> </rect> </property> <layout class="QHBoxLayout" name="horizontalLayout"> @@ -271,6 +271,9 @@ </item> <item row="0" column="1"> <widget class="QSpinBox" name="gflow"> + <property name="suffix"> + <string>%</string> + </property> <property name="minimum"> <number>1</number> </property> @@ -288,6 +291,9 @@ </item> <item row="1" column="1"> <widget class="QSpinBox" name="gfhigh"> + <property name="suffix"> + <string>%</string> + </property> <property name="minimum"> <number>1</number> </property> @@ -362,7 +368,11 @@ </widget> </item> <item row="0" column="1"> - <widget class="QSpinBox" name="bottomSAC"/> + <widget class="QSpinBox" name="bottomSAC"> + <property name="suffix"> + <string>ℓ/min</string> + </property> + </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_14"> @@ -372,7 +382,11 @@ </widget> </item> <item row="1" column="1"> - <widget class="QSpinBox" name="decoStopSAC"/> + <widget class="QSpinBox" name="decoStopSAC"> + <property name="suffix"> + <string>ℓ/min</string> + </property> + </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label_6"> |