diff --git a/core/pref.h b/core/pref.h
index 9122800bb..9cefd0812 100644
--- a/core/pref.h
+++ b/core/pref.h
@@ -14,7 +14,8 @@ typedef struct
short po2;
short pn2;
short phe;
- double po2_threshold;
+ double po2_threshold_min;
+ double po2_threshold_max;
double pn2_threshold;
double phe_threshold;
} partial_pressure_graphs_t;
diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp
index f5d2e0f9a..a22b0c015 100644
--- a/core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -166,11 +166,17 @@ short PartialPressureGasSettings::showPhe() const
return prefs.pp_graphs.phe;
}
-double PartialPressureGasSettings::po2Threshold() const
+double PartialPressureGasSettings::po2ThresholdMin() const
{
- return prefs.pp_graphs.po2_threshold;
+ return prefs.pp_graphs.po2_threshold_min;
}
+double PartialPressureGasSettings::po2ThresholdMax() const
+{
+ return prefs.pp_graphs.po2_threshold_max;
+}
+
+
double PartialPressureGasSettings::pn2Threshold() const
{
return prefs.pp_graphs.pn2_threshold;
@@ -217,16 +223,28 @@ void PartialPressureGasSettings::setShowPhe(short value)
emit showPheChanged(value);
}
-void PartialPressureGasSettings::setPo2Threshold(double value)
+void PartialPressureGasSettings::setPo2ThresholdMin(double value)
{
- if (value == prefs.pp_graphs.po2_threshold)
+ if (value == prefs.pp_graphs.po2_threshold_min)
return;
QSettings s;
s.beginGroup(group);
- s.setValue("po2threshold", value);
- prefs.pp_graphs.po2_threshold = value;
- emit po2ThresholdChanged(value);
+ s.setValue("po2thresholdmin", value);
+ prefs.pp_graphs.po2_threshold_min = value;
+ emit po2ThresholdMinChanged(value);
+}
+
+void PartialPressureGasSettings::setPo2ThresholdMax(double value)
+{
+ if (value == prefs.pp_graphs.po2_threshold_max)
+ return;
+
+ QSettings s;
+ s.beginGroup(group);
+ s.setValue("po2thresholdmax", value);
+ prefs.pp_graphs.po2_threshold_max = value;
+ emit po2ThresholdMaxChanged(value);
}
void PartialPressureGasSettings::setPn2Threshold(double value)
@@ -2167,7 +2185,8 @@ void SettingsObjectWrapper::load()
GET_BOOL("po2graph", pp_graphs.po2);
GET_BOOL("pn2graph", pp_graphs.pn2);
GET_BOOL("phegraph", pp_graphs.phe);
- GET_DOUBLE("po2threshold", pp_graphs.po2_threshold);
+ GET_DOUBLE("po2thresholdmin", pp_graphs.po2_threshold_min);
+ GET_DOUBLE("po2thresholdmax", pp_graphs.po2_threshold_max);
GET_DOUBLE("pn2threshold", pp_graphs.pn2_threshold);
GET_DOUBLE("phethreshold", pp_graphs.phe_threshold);
GET_BOOL("mod", mod);
diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h
index 1d35dd5d5..51cf4b0ae 100644
--- a/core/subsurface-qt/SettingsObjectWrapper.h
+++ b/core/subsurface-qt/SettingsObjectWrapper.h
@@ -69,19 +69,21 @@ private:
/* Control the state of the Partial Pressure Graphs preferences */
class PartialPressureGasSettings : public QObject {
Q_OBJECT
- Q_PROPERTY(short show_po2 READ showPo2 WRITE setShowPo2 NOTIFY showPo2Changed)
- Q_PROPERTY(short show_pn2 READ showPn2 WRITE setShowPn2 NOTIFY showPn2Changed)
- Q_PROPERTY(short show_phe READ showPhe WRITE setShowPhe NOTIFY showPheChanged)
- Q_PROPERTY(double po2_threshold READ po2Threshold WRITE setPo2Threshold NOTIFY po2ThresholdChanged)
- Q_PROPERTY(double pn2_threshold READ pn2Threshold WRITE setPn2Threshold NOTIFY pn2ThresholdChanged)
- Q_PROPERTY(double phe_threshold READ pheThreshold WRITE setPheThreshold NOTIFY pheThresholdChanged)
+ Q_PROPERTY(short show_po2 READ showPo2 WRITE setShowPo2 NOTIFY showPo2Changed)
+ Q_PROPERTY(short show_pn2 READ showPn2 WRITE setShowPn2 NOTIFY showPn2Changed)
+ Q_PROPERTY(short show_phe READ showPhe WRITE setShowPhe NOTIFY showPheChanged)
+ Q_PROPERTY(double po2_threshold_min READ po2ThresholdMin WRITE setPo2ThresholdMin NOTIFY po2ThresholdMinChanged)
+ Q_PROPERTY(double po2_threshold_max READ po2ThresholdMax WRITE setPo2ThresholdMax NOTIFY po2ThresholdMaxChanged)
+ Q_PROPERTY(double pn2_threshold READ pn2Threshold WRITE setPn2Threshold NOTIFY pn2ThresholdChanged)
+ Q_PROPERTY(double phe_threshold READ pheThreshold WRITE setPheThreshold NOTIFY pheThresholdChanged)
public:
PartialPressureGasSettings(QObject *parent);
short showPo2() const;
short showPn2() const;
short showPhe() const;
- double po2Threshold() const;
+ double po2ThresholdMin() const;
+ double po2ThresholdMax() const;
double pn2Threshold() const;
double pheThreshold() const;
@@ -89,7 +91,8 @@ public slots:
void setShowPo2(short value);
void setShowPn2(short value);
void setShowPhe(short value);
- void setPo2Threshold(double value);
+ void setPo2ThresholdMin(double value);
+ void setPo2ThresholdMax(double value);
void setPn2Threshold(double value);
void setPheThreshold(double value);
@@ -97,7 +100,8 @@ signals:
void showPo2Changed(short value);
void showPn2Changed(short value);
void showPheChanged(short value);
- void po2ThresholdChanged(double value);
+ void po2ThresholdMaxChanged(double value);
+ void po2ThresholdMinChanged(double value);
void pn2ThresholdChanged(double value);
void pheThresholdChanged(double value);
diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c
index 89ecbd2fb..c2ab42583 100644
--- a/core/subsurfacestartup.c
+++ b/core/subsurfacestartup.c
@@ -20,7 +20,8 @@ struct preferences default_prefs = {
.po2 = false,
.pn2 = false,
.phe = false,
- .po2_threshold = 1.6,
+ .po2_threshold_min = 0.16,
+ .po2_threshold_max = 1.6,
.pn2_threshold = 4.0,
.phe_threshold = 13.0,
},
diff --git a/desktop-widgets/preferences/preferences_graph.cpp b/desktop-widgets/preferences/preferences_graph.cpp
index 03f09166c..b4fd81fd1 100644
--- a/desktop-widgets/preferences/preferences_graph.cpp
+++ b/desktop-widgets/preferences/preferences_graph.cpp
@@ -20,7 +20,8 @@ PreferencesGraph::~PreferencesGraph()
void PreferencesGraph::refreshSettings()
{
ui->pheThreshold->setValue(prefs.pp_graphs.phe_threshold);
- ui->po2Threshold->setValue(prefs.pp_graphs.po2_threshold);
+ ui->po2ThresholdMax->setValue(prefs.pp_graphs.po2_threshold_max);
+ ui->po2ThresholdMin->setValue(prefs.pp_graphs.po2_threshold_min);
ui->pn2Threshold->setValue(prefs.pp_graphs.pn2_threshold);
ui->maxpo2->setValue(prefs.modpO2);
ui->red_ceiling->setChecked(prefs.redceiling);
@@ -56,7 +57,8 @@ void PreferencesGraph::syncSettings()
auto pp_gas = SettingsObjectWrapper::instance()->pp_gas;
pp_gas->setPheThreshold(ui->pheThreshold->value());
- pp_gas->setPo2Threshold(ui->po2Threshold->value());
+ pp_gas->setPo2ThresholdMax(ui->po2ThresholdMax->value());
+ pp_gas->setPo2ThresholdMin(ui->po2ThresholdMin->value());
pp_gas->setPn2Threshold(ui->pn2Threshold->value());
auto tech = SettingsObjectWrapper::instance()->techDetails;
diff --git a/desktop-widgets/preferences/preferences_graph.ui b/desktop-widgets/preferences/preferences_graph.ui
index 881c057ec..4b4cccb0d 100644
--- a/desktop-widgets/preferences/preferences_graph.ui
+++ b/desktop-widgets/preferences/preferences_graph.ui
@@ -7,7 +7,7 @@
0
0
650
- 581
+ 634
@@ -26,12 +26,12 @@
true
- Threshold for pO₂
+ Threshold for pO₂ (minimum, maximum)
- -
-
+
-
+
true
@@ -49,12 +49,32 @@
true
- Threshold for pN₂
+ Threshold for pN₂ (maximum only)
- -
-
+
-
+
+
+ CCR options:
+
+
+
+ -
+
+
+ true
+
+
+ bar
+
+
+ 0.100000000000000
+
+
+
+ -
+
true
@@ -72,20 +92,7 @@
true
- Threshold for pHe
-
-
-
- -
-
-
- true
-
-
- bar
-
-
- 0.100000000000000
+ Threshold for pHe (maximum only)
@@ -95,27 +102,14 @@
true
- pO₂ in calculating MOD
+ pO₂ in calculating MOD (maximum only )
- -
-
-
- true
-
-
- bar
-
-
- 0.100000000000000
-
-
-
- -
-
+
-
+
- CCR options:
+ Show setpoints when viewing pO₂
@@ -142,13 +136,6 @@
- -
-
-
- Show setpoints when viewing pO₂
-
-
-
-
@@ -156,6 +143,32 @@
+ -
+
+
+ true
+
+
+ bar
+
+
+ 0.100000000000000
+
+
+
+ -
+
+
+ true
+
+
+ bar
+
+
+ 0.010000000000000
+
+
+
@@ -165,13 +178,13 @@
Ceiling display setup
- -
-
-
- true
-
+
-
+
- Draw dive computer reported ceiling red
+ Conservatism level
+
+
+ Qt::AlignCenter
@@ -185,23 +198,96 @@
- -
-
+
-
+
- VPM-B
+ B&ühlmann
+
+
+ true
- -
-
+
-
+
+
+ true
+
- Conservatism level
+ Draw dive computer reported ceiling red
+
+
+
+ -
+
+
+
+
+
+ 1:
+
+
+
+ -
+
+
+ GFHigh
Qt::AlignCenter
+ -
+
+
+ ℓ/min
+
+
+ 3
+
+
+
+ -
+
+
+ %
+
+
+ 1
+
+
+ 150
+
+
+
+ -
+
+
+ Metabolic rate O₂
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ Dilution ratio
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ GFLow at max. depth
+
+
+
-
@@ -215,23 +301,17 @@
- -
-
+
-
+
- Bühlmann
-
-
- true
+ pSCR options:
- -
-
+
-
+
- GFHigh
-
-
- Qt::AlignCenter
+ &VPM-B
@@ -258,73 +338,6 @@
- -
-
-
- %
-
-
- 1
-
-
- 150
-
-
-
- -
-
-
- GFLow at max. depth
-
-
-
- -
-
-
- pSCR options:
-
-
-
- -
-
-
- Metabolic rate O₂
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
- ℓ/min
-
-
- 3
-
-
-
- -
-
-
- Dilution ratio
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
-
-
- 1:
-
-
-
@@ -367,7 +380,6 @@
- po2Threshold
pn2Threshold
pheThreshold
maxpo2
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp
index c10263fc0..bae8bb6d9 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -351,13 +351,15 @@ void ProfileWidget2::setupItemOnScene()
CREATE_PP_GAS(pn2GasItem, PN2, PN2, PN2_ALERT, &prefs.pp_graphs.pn2_threshold);
CREATE_PP_GAS(pheGasItem, PHE, PHE, PHE_ALERT, &prefs.pp_graphs.phe_threshold);
- CREATE_PP_GAS(po2GasItem, PO2, PO2, PO2_ALERT, &prefs.pp_graphs.po2_threshold);
- CREATE_PP_GAS(o2SetpointGasItem, O2SETPOINT, PO2_ALERT, PO2_ALERT, &prefs.pp_graphs.po2_threshold);
- CREATE_PP_GAS(ccrsensor1GasItem, CCRSENSOR1, CCRSENSOR1, PO2_ALERT, &prefs.pp_graphs.po2_threshold);
- CREATE_PP_GAS(ccrsensor2GasItem, CCRSENSOR2, CCRSENSOR2, PO2_ALERT, &prefs.pp_graphs.po2_threshold);
- CREATE_PP_GAS(ccrsensor3GasItem, CCRSENSOR3, CCRSENSOR3, PO2_ALERT, &prefs.pp_graphs.po2_threshold);
+ CREATE_PP_GAS(po2GasItem, PO2, PO2, PO2_ALERT, &prefs.pp_graphs.po2_threshold_max);
+ CREATE_PP_GAS(o2SetpointGasItem, O2SETPOINT, PO2_ALERT, PO2_ALERT, &prefs.pp_graphs.po2_threshold_max);
+ CREATE_PP_GAS(ccrsensor1GasItem, CCRSENSOR1, CCRSENSOR1, PO2_ALERT, &prefs.pp_graphs.po2_threshold_max);
+ CREATE_PP_GAS(ccrsensor2GasItem, CCRSENSOR2, CCRSENSOR2, PO2_ALERT, &prefs.pp_graphs.po2_threshold_max);
+ CREATE_PP_GAS(ccrsensor3GasItem, CCRSENSOR3, CCRSENSOR3, PO2_ALERT, &prefs.pp_graphs.po2_threshold_max);
+
#undef CREATE_PP_GAS
#ifndef SUBSURFACE_MOBILE
+
// Visibility Connections
connect(SettingsObjectWrapper::instance()->pp_gas, &PartialPressureGasSettings::showPheChanged, pheGasItem, &PartialPressureGasItem::setVisible);
connect(SettingsObjectWrapper::instance()->pp_gas, &PartialPressureGasSettings::showPo2Changed, po2GasItem, &PartialPressureGasItem::setVisible);