mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
d453d5cb37
commit
ecf0408aae
4 changed files with 52 additions and 8 deletions
11
dive.c
11
dive.c
|
@ -188,6 +188,17 @@ double get_volume_units(unsigned int ml, int *frac, const char **units)
|
||||||
return vol;
|
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)
|
unsigned int units_to_depth(double depth)
|
||||||
{
|
{
|
||||||
if (get_units()->length == METERS)
|
if (get_units()->length == METERS)
|
||||||
|
|
1
dive.h
1
dive.h
|
@ -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 double get_vertical_speed_units(unsigned int mms, int *frac, const char **units);
|
||||||
|
|
||||||
extern unsigned int units_to_depth(double depth);
|
extern unsigned int units_to_depth(double depth);
|
||||||
|
extern int units_to_sac(int volume);
|
||||||
|
|
||||||
/* Volume in mliter of a cylinder at pressure 'p' */
|
/* Volume in mliter of a cylinder at pressure 'p' */
|
||||||
extern int gas_volume(cylinder_t *cyl, pressure_t p);
|
extern int gas_volume(cylinder_t *cyl, pressure_t p);
|
||||||
|
|
|
@ -416,8 +416,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
|
||||||
connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFLow()));
|
connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFLow()));
|
||||||
connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool)));
|
connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool)));
|
||||||
|
|
||||||
ui.bottomSAC->setValue(prefs.bottomsac / 1000.0);
|
ui.bottomSAC->setValue(rint(get_volume_units(prefs.bottomsac, NULL, NULL)));
|
||||||
ui.decoStopSAC->setValue(prefs.decosac / 1000.0);
|
ui.decoStopSAC->setValue(rint(get_volume_units(prefs.decosac, NULL, NULL)));
|
||||||
ui.gflow->setValue(prefs.gflow);
|
ui.gflow->setValue(prefs.gflow);
|
||||||
ui.gfhigh->setValue(prefs.gfhigh);
|
ui.gfhigh->setValue(prefs.gfhigh);
|
||||||
|
|
||||||
|
@ -466,6 +466,21 @@ void PlannerSettingsWidget::settingsChanged()
|
||||||
ui.asc50to6->setText(tr("50% avg. depth to 6m"));
|
ui.asc50to6->setText(tr("50% avg. depth to 6m"));
|
||||||
ui.asc6toSurf->setText(tr("6m to surface"));
|
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();
|
updateUnitsUI();
|
||||||
ui.ascRate75->setSuffix(vs);
|
ui.ascRate75->setSuffix(vs);
|
||||||
ui.ascRate50->setSuffix(vs);
|
ui.ascRate50->setSuffix(vs);
|
||||||
|
@ -690,14 +705,17 @@ void DivePlannerPointsModel::emitDataChanged()
|
||||||
|
|
||||||
void DivePlannerPointsModel::setBottomSac(int sac)
|
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;
|
prefs.bottomsac = diveplan.bottomsac;
|
||||||
emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1));
|
emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivePlannerPointsModel::setDecoSac(int sac)
|
void DivePlannerPointsModel::setDecoSac(int sac)
|
||||||
{
|
{
|
||||||
diveplan.decosac = sac * 1000;
|
volume_t newSAC;
|
||||||
|
diveplan.decosac = units_to_sac(sac);
|
||||||
prefs.decosac = diveplan.decosac;
|
prefs.decosac = diveplan.decosac;
|
||||||
emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1));
|
emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1089</width>
|
<width>1078</width>
|
||||||
<height>404</height>
|
<height>418</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
@ -271,6 +271,9 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QSpinBox" name="gflow">
|
<widget class="QSpinBox" name="gflow">
|
||||||
|
<property name="suffix">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -288,6 +291,9 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QSpinBox" name="gfhigh">
|
<widget class="QSpinBox" name="gfhigh">
|
||||||
|
<property name="suffix">
|
||||||
|
<string>%</string>
|
||||||
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -362,7 +368,11 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<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>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_14">
|
||||||
|
@ -372,7 +382,11 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<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>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QLabel" name="label_6">
|
||||||
|
|
Loading…
Add table
Reference in a new issue