From bb31c77597f28976eb4784318fa7b01a28f3942b Mon Sep 17 00:00:00 2001 From: Jan Mulder Date: Fri, 24 Mar 2017 19:11:31 +0100 Subject: [PATCH] minimal pO2 threshold: split max threshold into min and max Nothing really special here. Just a split of the only p02 max threshold into a min threshold and max threshold, and the adaptation of the UI. Change of translatable strings included. ref: https://github.com/Subsurface-divelog/subsurface/issues/259 Signed-off-by: Jan Mulder --- core/pref.h | 3 +- core/subsurface-qt/SettingsObjectWrapper.cpp | 35 ++- core/subsurface-qt/SettingsObjectWrapper.h | 22 +- core/subsurfacestartup.c | 3 +- .../preferences/preferences_graph.cpp | 6 +- .../preferences/preferences_graph.ui | 286 +++++++++--------- profile-widget/profilewidget2.cpp | 12 +- 7 files changed, 204 insertions(+), 163 deletions(-) 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);