mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Planner: add best mix EAD preference
Add best mix EAD preference and UI, along with a tooltip describing what it does Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
67dda48c88
commit
9b29173363
8 changed files with 62 additions and 4 deletions
|
|
@ -3653,9 +3653,8 @@ fraction_t best_o2(depth_t depth, struct dive *dive)
|
||||||
fraction_t best_He(depth_t depth, struct dive *dive)
|
fraction_t best_He(depth_t depth, struct dive *dive)
|
||||||
{
|
{
|
||||||
fraction_t fhe;
|
fraction_t fhe;
|
||||||
int ead = 30000; //this should be user-configurable
|
|
||||||
int pnarcotic, ambient;
|
int pnarcotic, ambient;
|
||||||
pnarcotic = depth_to_mbar(ead, dive);
|
pnarcotic = depth_to_mbar(prefs.bestmixead, dive);
|
||||||
ambient = depth_to_mbar(depth.mm, dive);
|
ambient = depth_to_mbar(depth.mm, dive);
|
||||||
fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent
|
fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent
|
||||||
if (fhe.permille < 0)
|
if (fhe.permille < 0)
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ struct preferences {
|
||||||
int descrate;
|
int descrate;
|
||||||
int bottompo2;
|
int bottompo2;
|
||||||
int decopo2;
|
int decopo2;
|
||||||
|
int bestmixead;
|
||||||
int proxy_type;
|
int proxy_type;
|
||||||
char *proxy_host;
|
char *proxy_host;
|
||||||
int proxy_port;
|
int proxy_port;
|
||||||
|
|
|
||||||
|
|
@ -915,6 +915,11 @@ int DivePlannerSettings::decopo2() const
|
||||||
return prefs.decopo2;
|
return prefs.decopo2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DivePlannerSettings::bestmixead() const
|
||||||
|
{
|
||||||
|
return prefs.bestmixead;
|
||||||
|
}
|
||||||
|
|
||||||
int DivePlannerSettings::reserveGas() const
|
int DivePlannerSettings::reserveGas() const
|
||||||
{
|
{
|
||||||
return prefs.reserve_gas;
|
return prefs.reserve_gas;
|
||||||
|
|
@ -1089,6 +1094,15 @@ void DivePlannerSettings::setDecopo2(int value)
|
||||||
emit decopo2Changed(value);
|
emit decopo2Changed(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivePlannerSettings::setBestmixead(int value)
|
||||||
|
{
|
||||||
|
QSettings s;
|
||||||
|
s.beginGroup(group);
|
||||||
|
s.setValue("bestmixead", value);
|
||||||
|
prefs.bestmixead = value;
|
||||||
|
emit bestmixeadChanged(value);
|
||||||
|
}
|
||||||
|
|
||||||
void DivePlannerSettings::setReserveGas(int value)
|
void DivePlannerSettings::setReserveGas(int value)
|
||||||
{
|
{
|
||||||
QSettings s;
|
QSettings s;
|
||||||
|
|
|
||||||
|
|
@ -327,6 +327,7 @@ class DivePlannerSettings : public QObject {
|
||||||
Q_PROPERTY(int descrate READ descrate WRITE setDescrate NOTIFY descrateChanged)
|
Q_PROPERTY(int descrate READ descrate WRITE setDescrate NOTIFY descrateChanged)
|
||||||
Q_PROPERTY(int bottompo2 READ bottompo2 WRITE setBottompo2 NOTIFY bottompo2Changed)
|
Q_PROPERTY(int bottompo2 READ bottompo2 WRITE setBottompo2 NOTIFY bottompo2Changed)
|
||||||
Q_PROPERTY(int decopo2 READ decopo2 WRITE setDecopo2 NOTIFY decopo2Changed)
|
Q_PROPERTY(int decopo2 READ decopo2 WRITE setDecopo2 NOTIFY decopo2Changed)
|
||||||
|
Q_PROPERTY(int bestmixead READ bestmixead WRITE setBestmixead NOTIFY bestmixeadChanged)
|
||||||
Q_PROPERTY(int reserve_gas READ reserveGas WRITE setReserveGas NOTIFY reserveGasChanged)
|
Q_PROPERTY(int reserve_gas READ reserveGas WRITE setReserveGas NOTIFY reserveGasChanged)
|
||||||
Q_PROPERTY(int min_switch_duration READ minSwitchDuration WRITE setMinSwitchDuration NOTIFY minSwitchDurationChanged)
|
Q_PROPERTY(int min_switch_duration READ minSwitchDuration WRITE setMinSwitchDuration NOTIFY minSwitchDurationChanged)
|
||||||
Q_PROPERTY(int bottomsac READ bottomSac WRITE setBottomSac NOTIFY bottomSacChanged)
|
Q_PROPERTY(int bottomsac READ bottomSac WRITE setBottomSac NOTIFY bottomSacChanged)
|
||||||
|
|
@ -352,6 +353,7 @@ public:
|
||||||
int descrate() const;
|
int descrate() const;
|
||||||
int bottompo2() const;
|
int bottompo2() const;
|
||||||
int decopo2() const;
|
int decopo2() const;
|
||||||
|
int bestmixead() const;
|
||||||
int reserveGas() const;
|
int reserveGas() const;
|
||||||
int minSwitchDuration() const;
|
int minSwitchDuration() const;
|
||||||
int bottomSac() const;
|
int bottomSac() const;
|
||||||
|
|
@ -376,6 +378,7 @@ public slots:
|
||||||
void setDescrate(int value);
|
void setDescrate(int value);
|
||||||
void setBottompo2(int value);
|
void setBottompo2(int value);
|
||||||
void setDecopo2(int value);
|
void setDecopo2(int value);
|
||||||
|
void setBestmixead(int value);
|
||||||
void setReserveGas(int value);
|
void setReserveGas(int value);
|
||||||
void setMinSwitchDuration(int value);
|
void setMinSwitchDuration(int value);
|
||||||
void setBottomSac(int value);
|
void setBottomSac(int value);
|
||||||
|
|
@ -400,6 +403,7 @@ signals:
|
||||||
void descrateChanged(int value);
|
void descrateChanged(int value);
|
||||||
void bottompo2Changed(int value);
|
void bottompo2Changed(int value);
|
||||||
void decopo2Changed(int value);
|
void decopo2Changed(int value);
|
||||||
|
void bestmixeadChanged(int value);
|
||||||
void reserveGasChanged(int value);
|
void reserveGasChanged(int value);
|
||||||
void minSwitchDurationChanged(int value);
|
void minSwitchDurationChanged(int value);
|
||||||
void bottomSacChanged(int value);
|
void bottomSacChanged(int value);
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ struct preferences default_prefs = {
|
||||||
.descrate = 18000 / 60,
|
.descrate = 18000 / 60,
|
||||||
.bottompo2 = 1400,
|
.bottompo2 = 1400,
|
||||||
.decopo2 = 1600,
|
.decopo2 = 1600,
|
||||||
|
.bestmixead = 30000,
|
||||||
.doo2breaks = false,
|
.doo2breaks = false,
|
||||||
.drop_stone_mode = false,
|
.drop_stone_mode = false,
|
||||||
.switch_at_req_stop = false,
|
.switch_at_req_stop = false,
|
||||||
|
|
|
||||||
|
|
@ -288,6 +288,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
|
||||||
prefs.descrate = s.value("descrate", prefs.descrate).toInt();
|
prefs.descrate = s.value("descrate", prefs.descrate).toInt();
|
||||||
prefs.bottompo2 = s.value("bottompo2", prefs.bottompo2).toInt();
|
prefs.bottompo2 = s.value("bottompo2", prefs.bottompo2).toInt();
|
||||||
prefs.decopo2 = s.value("decopo2", prefs.decopo2).toInt();
|
prefs.decopo2 = s.value("decopo2", prefs.decopo2).toInt();
|
||||||
|
prefs.bestmixead = s.value("bestmixead", prefs.bestmixead).toInt();
|
||||||
prefs.doo2breaks = s.value("doo2breaks", prefs.doo2breaks).toBool();
|
prefs.doo2breaks = s.value("doo2breaks", prefs.doo2breaks).toBool();
|
||||||
prefs.switch_at_req_stop = s.value("switch_at_req_stop", prefs.switch_at_req_stop).toBool();
|
prefs.switch_at_req_stop = s.value("switch_at_req_stop", prefs.switch_at_req_stop).toBool();
|
||||||
prefs.min_switch_duration = s.value("min_switch_duration", prefs.min_switch_duration).toInt();
|
prefs.min_switch_duration = s.value("min_switch_duration", prefs.min_switch_duration).toInt();
|
||||||
|
|
@ -351,6 +352,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
|
||||||
connect(ui.descRate, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged()));
|
connect(ui.descRate, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged()));
|
||||||
connect(ui.bottompo2, SIGNAL(valueChanged(double)), this, SLOT(setBottomPo2(double)));
|
connect(ui.bottompo2, SIGNAL(valueChanged(double)), this, SLOT(setBottomPo2(double)));
|
||||||
connect(ui.decopo2, SIGNAL(valueChanged(double)), this, SLOT(setDecoPo2(double)));
|
connect(ui.decopo2, SIGNAL(valueChanged(double)), this, SLOT(setDecoPo2(double)));
|
||||||
|
connect(ui.bestmixEAD, SIGNAL(valueChanged(int)), this, SLOT(setBestmixEAD(int)));
|
||||||
connect(ui.drop_stone_mode, SIGNAL(toggled(bool)), plannerModel, SLOT(setDropStoneMode(bool)));
|
connect(ui.drop_stone_mode, SIGNAL(toggled(bool)), plannerModel, SLOT(setDropStoneMode(bool)));
|
||||||
connect(ui.bottomSAC, SIGNAL(valueChanged(double)), this, SLOT(bottomSacChanged(double)));
|
connect(ui.bottomSAC, SIGNAL(valueChanged(double)), this, SLOT(bottomSacChanged(double)));
|
||||||
connect(ui.decoStopSAC, SIGNAL(valueChanged(double)), this, SLOT(decoSacChanged(double)));
|
connect(ui.decoStopSAC, SIGNAL(valueChanged(double)), this, SLOT(decoSacChanged(double)));
|
||||||
|
|
@ -380,6 +382,7 @@ void PlannerSettingsWidget::updateUnitsUI()
|
||||||
ui.ascRateStops->setValue(rint(prefs.ascratestops / UNIT_FACTOR));
|
ui.ascRateStops->setValue(rint(prefs.ascratestops / UNIT_FACTOR));
|
||||||
ui.ascRateLast6m->setValue(rint(prefs.ascratelast6m / UNIT_FACTOR));
|
ui.ascRateLast6m->setValue(rint(prefs.ascratelast6m / UNIT_FACTOR));
|
||||||
ui.descRate->setValue(rint(prefs.descrate / UNIT_FACTOR));
|
ui.descRate->setValue(rint(prefs.descrate / UNIT_FACTOR));
|
||||||
|
ui.bestmixEAD->setValue(rint(get_depth_units(prefs.bestmixead, NULL, NULL)));
|
||||||
}
|
}
|
||||||
|
|
||||||
PlannerSettingsWidget::~PlannerSettingsWidget()
|
PlannerSettingsWidget::~PlannerSettingsWidget()
|
||||||
|
|
@ -400,6 +403,7 @@ PlannerSettingsWidget::~PlannerSettingsWidget()
|
||||||
s.setValue("descrate", prefs.descrate);
|
s.setValue("descrate", prefs.descrate);
|
||||||
s.setValue("bottompo2", prefs.bottompo2);
|
s.setValue("bottompo2", prefs.bottompo2);
|
||||||
s.setValue("decopo2", prefs.decopo2);
|
s.setValue("decopo2", prefs.decopo2);
|
||||||
|
s.setValue("bestmixead", prefs.bestmixead);
|
||||||
s.setValue("doo2breaks", prefs.doo2breaks);
|
s.setValue("doo2breaks", prefs.doo2breaks);
|
||||||
s.setValue("drop_stone_mode", prefs.drop_stone_mode);
|
s.setValue("drop_stone_mode", prefs.drop_stone_mode);
|
||||||
s.setValue("switch_at_req_stop", prefs.switch_at_req_stop);
|
s.setValue("switch_at_req_stop", prefs.switch_at_req_stop);
|
||||||
|
|
@ -422,11 +426,13 @@ void PlannerSettingsWidget::settingsChanged()
|
||||||
ui.lastStop->setText(tr("Last stop at 20ft"));
|
ui.lastStop->setText(tr("Last stop at 20ft"));
|
||||||
ui.asc50to6->setText(tr("50% avg. depth to 20ft"));
|
ui.asc50to6->setText(tr("50% avg. depth to 20ft"));
|
||||||
ui.asc6toSurf->setText(tr("20ft to surface"));
|
ui.asc6toSurf->setText(tr("20ft to surface"));
|
||||||
|
ui.bestmixEAD->setSuffix(tr("ft"));
|
||||||
} else {
|
} else {
|
||||||
vs.append(tr("m/min"));
|
vs.append(tr("m/min"));
|
||||||
ui.lastStop->setText(tr("Last stop at 6m"));
|
ui.lastStop->setText(tr("Last stop at 6m"));
|
||||||
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"));
|
||||||
|
ui.bestmixEAD->setSuffix(tr("m"));
|
||||||
}
|
}
|
||||||
if(get_units()->volume == units::CUFT) {
|
if(get_units()->volume == units::CUFT) {
|
||||||
ui.bottomSAC->setSuffix(tr("cuft/min"));
|
ui.bottomSAC->setSuffix(tr("cuft/min"));
|
||||||
|
|
@ -508,6 +514,11 @@ void PlannerSettingsWidget::setDecoPo2(double po2)
|
||||||
prefs.decopo2 = (int) (po2 * 1000.0);
|
prefs.decopo2 = (int) (po2 * 1000.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlannerSettingsWidget::setBestmixEAD(int depth)
|
||||||
|
{
|
||||||
|
prefs.bestmixead = units_to_depth(depth);
|
||||||
|
}
|
||||||
|
|
||||||
void PlannerSettingsWidget::setBackgasBreaks(bool dobreaks)
|
void PlannerSettingsWidget::setBackgasBreaks(bool dobreaks)
|
||||||
{
|
{
|
||||||
prefs.doo2breaks = dobreaks;
|
prefs.doo2breaks = dobreaks;
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@ slots:
|
||||||
void setDescRate(int rate);
|
void setDescRate(int rate);
|
||||||
void setBottomPo2(double po2);
|
void setBottomPo2(double po2);
|
||||||
void setDecoPo2(double po2);
|
void setDecoPo2(double po2);
|
||||||
|
void setBestmixEAD(int depth);
|
||||||
void setBackgasBreaks(bool dobreaks);
|
void setBackgasBreaks(bool dobreaks);
|
||||||
void disableDecoElements(int mode);
|
void disableDecoElements(int mode);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -530,7 +530,7 @@
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>2</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="4" column="0">
|
<item row="5" column="0">
|
||||||
<spacer name="verticalSpacer_3">
|
<spacer name="verticalSpacer_3">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
|
@ -588,6 +588,25 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="bestmixEAD">
|
||||||
|
<property name="suffix">
|
||||||
|
<string>m</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>999</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Used to calculate best mix. Select best mix depth in 'Available gases' table by entering gas depth, followed by "B" (best trimix mix) or "BN" (best nitrox mix)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="bottomsac">
|
<widget class="QLabel" name="bottomsac">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
@ -602,7 +621,14 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" colspan="2">
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="bestEAD">
|
||||||
|
<property name="text">
|
||||||
|
<string>Best mix EAD</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" colspan="2">
|
||||||
<widget class="QGroupBox" name="Notes">
|
<widget class="QGroupBox" name="Notes">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Notes</string>
|
<string>Notes</string>
|
||||||
|
|
@ -739,6 +765,7 @@
|
||||||
<tabstop>decoStopSAC</tabstop>
|
<tabstop>decoStopSAC</tabstop>
|
||||||
<tabstop>bottompo2</tabstop>
|
<tabstop>bottompo2</tabstop>
|
||||||
<tabstop>decopo2</tabstop>
|
<tabstop>decopo2</tabstop>
|
||||||
|
<tabstop>bestmixEAD</tabstop>
|
||||||
<tabstop>display_runtime</tabstop>
|
<tabstop>display_runtime</tabstop>
|
||||||
<tabstop>display_duration</tabstop>
|
<tabstop>display_duration</tabstop>
|
||||||
<tabstop>display_transitions</tabstop>
|
<tabstop>display_transitions</tabstop>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue