diff options
author | Rick Walsh <rickmwalsh@gmail.com> | 2016-05-21 19:32:09 +1000 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2016-05-21 07:03:38 -0700 |
commit | 9b29173363861861949814191861fa46e255c349 (patch) | |
tree | 9fdb002a18d775a75b7d9264a81f11d7d8a43118 | |
parent | 67dda48c884b7413e46acde4e890c0fa19640f67 (diff) | |
download | subsurface-9b29173363861861949814191861fa46e255c349.tar.gz |
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>
-rw-r--r-- | core/dive.c | 3 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 14 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 4 | ||||
-rw-r--r-- | core/subsurfacestartup.c | 1 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.cpp | 11 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.h | 1 | ||||
-rw-r--r-- | desktop-widgets/plannerSettings.ui | 31 |
8 files changed, 62 insertions, 4 deletions
diff --git a/core/dive.c b/core/dive.c index 6d5ba1dbb..c4f5dd778 100644 --- a/core/dive.c +++ b/core/dive.c @@ -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 fhe; - int ead = 30000; //this should be user-configurable int pnarcotic, ambient; - pnarcotic = depth_to_mbar(ead, dive); + pnarcotic = depth_to_mbar(prefs.bestmixead, dive); ambient = depth_to_mbar(depth.mm, dive); fhe.permille = (100 - 100 * pnarcotic / ambient) * 10; //use integer arithmetic to round up to nearest percent if (fhe.permille < 0) diff --git a/core/pref.h b/core/pref.h index be684fd90..be343796a 100644 --- a/core/pref.h +++ b/core/pref.h @@ -92,6 +92,7 @@ struct preferences { int descrate; int bottompo2; int decopo2; + int bestmixead; int proxy_type; char *proxy_host; int proxy_port; diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp index ed305ef28..eeb4c96c2 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.cpp +++ b/core/subsurface-qt/SettingsObjectWrapper.cpp @@ -915,6 +915,11 @@ int DivePlannerSettings::decopo2() const return prefs.decopo2; } +int DivePlannerSettings::bestmixead() const +{ + return prefs.bestmixead; +} + int DivePlannerSettings::reserveGas() const { return prefs.reserve_gas; @@ -1089,6 +1094,15 @@ void DivePlannerSettings::setDecopo2(int 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) { QSettings s; diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h index f115e2d86..b4b898a3d 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.h +++ b/core/subsurface-qt/SettingsObjectWrapper.h @@ -327,6 +327,7 @@ class DivePlannerSettings : public QObject { Q_PROPERTY(int descrate READ descrate WRITE setDescrate NOTIFY descrateChanged) Q_PROPERTY(int bottompo2 READ bottompo2 WRITE setBottompo2 NOTIFY bottompo2Changed) 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 min_switch_duration READ minSwitchDuration WRITE setMinSwitchDuration NOTIFY minSwitchDurationChanged) Q_PROPERTY(int bottomsac READ bottomSac WRITE setBottomSac NOTIFY bottomSacChanged) @@ -352,6 +353,7 @@ public: int descrate() const; int bottompo2() const; int decopo2() const; + int bestmixead() const; int reserveGas() const; int minSwitchDuration() const; int bottomSac() const; @@ -376,6 +378,7 @@ public slots: void setDescrate(int value); void setBottompo2(int value); void setDecopo2(int value); + void setBestmixead(int value); void setReserveGas(int value); void setMinSwitchDuration(int value); void setBottomSac(int value); @@ -400,6 +403,7 @@ signals: void descrateChanged(int value); void bottompo2Changed(int value); void decopo2Changed(int value); + void bestmixeadChanged(int value); void reserveGasChanged(int value); void minSwitchDurationChanged(int value); void bottomSacChanged(int value); diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c index c2881a17f..f58efb114 100644 --- a/core/subsurfacestartup.c +++ b/core/subsurfacestartup.c @@ -52,6 +52,7 @@ struct preferences default_prefs = { .descrate = 18000 / 60, .bottompo2 = 1400, .decopo2 = 1600, + .bestmixead = 30000, .doo2breaks = false, .drop_stone_mode = false, .switch_at_req_stop = false, diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp index 3a2436c6c..ac322d200 100644 --- a/desktop-widgets/diveplanner.cpp +++ b/desktop-widgets/diveplanner.cpp @@ -288,6 +288,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) prefs.descrate = s.value("descrate", prefs.descrate).toInt(); prefs.bottompo2 = s.value("bottompo2", prefs.bottompo2).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.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(); @@ -351,6 +352,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f) connect(ui.descRate, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged())); connect(ui.bottompo2, SIGNAL(valueChanged(double)), this, SLOT(setBottomPo2(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.bottomSAC, SIGNAL(valueChanged(double)), this, SLOT(bottomSacChanged(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.ascRateLast6m->setValue(rint(prefs.ascratelast6m / UNIT_FACTOR)); ui.descRate->setValue(rint(prefs.descrate / UNIT_FACTOR)); + ui.bestmixEAD->setValue(rint(get_depth_units(prefs.bestmixead, NULL, NULL))); } PlannerSettingsWidget::~PlannerSettingsWidget() @@ -400,6 +403,7 @@ PlannerSettingsWidget::~PlannerSettingsWidget() s.setValue("descrate", prefs.descrate); s.setValue("bottompo2", prefs.bottompo2); s.setValue("decopo2", prefs.decopo2); + s.setValue("bestmixead", prefs.bestmixead); s.setValue("doo2breaks", prefs.doo2breaks); s.setValue("drop_stone_mode", prefs.drop_stone_mode); 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.asc50to6->setText(tr("50% avg. depth to 20ft")); ui.asc6toSurf->setText(tr("20ft to surface")); + ui.bestmixEAD->setSuffix(tr("ft")); } else { vs.append(tr("m/min")); ui.lastStop->setText(tr("Last stop at 6m")); ui.asc50to6->setText(tr("50% avg. depth to 6m")); ui.asc6toSurf->setText(tr("6m to surface")); + ui.bestmixEAD->setSuffix(tr("m")); } if(get_units()->volume == units::CUFT) { ui.bottomSAC->setSuffix(tr("cuft/min")); @@ -508,6 +514,11 @@ void PlannerSettingsWidget::setDecoPo2(double po2) prefs.decopo2 = (int) (po2 * 1000.0); } +void PlannerSettingsWidget::setBestmixEAD(int depth) +{ + prefs.bestmixead = units_to_depth(depth); +} + void PlannerSettingsWidget::setBackgasBreaks(bool dobreaks) { prefs.doo2breaks = dobreaks; diff --git a/desktop-widgets/diveplanner.h b/desktop-widgets/diveplanner.h index 03014cb9c..69f993824 100644 --- a/desktop-widgets/diveplanner.h +++ b/desktop-widgets/diveplanner.h @@ -78,6 +78,7 @@ slots: void setDescRate(int rate); void setBottomPo2(double po2); void setDecoPo2(double po2); + void setBestmixEAD(int depth); void setBackgasBreaks(bool dobreaks); void disableDecoElements(int mode); diff --git a/desktop-widgets/plannerSettings.ui b/desktop-widgets/plannerSettings.ui index 4db69f883..2ec8d4ab3 100644 --- a/desktop-widgets/plannerSettings.ui +++ b/desktop-widgets/plannerSettings.ui @@ -530,7 +530,7 @@ <property name="spacing"> <number>2</number> </property> - <item row="4" column="0"> + <item row="5" column="0"> <spacer name="verticalSpacer_3"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -588,6 +588,25 @@ </property> </widget> </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"> <widget class="QLabel" name="bottomsac"> <property name="text"> @@ -602,7 +621,14 @@ </property> </widget> </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"> <property name="title"> <string>Notes</string> @@ -739,6 +765,7 @@ <tabstop>decoStopSAC</tabstop> <tabstop>bottompo2</tabstop> <tabstop>decopo2</tabstop> + <tabstop>bestmixEAD</tabstop> <tabstop>display_runtime</tabstop> <tabstop>display_duration</tabstop> <tabstop>display_transitions</tabstop> |