aboutsummaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar willem ferguson <willemferguson@zoology.up.ac.za>2015-01-20 20:13:53 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-01-21 17:00:18 +1200
commita700be32076225e68bfaa4b6c418cff015e2ceec (patch)
tree57c7d8b94e66279d301470b53101d2b5c05deec5 /qt-ui
parent2923329e8e47f64667c34b33eb1de64657cb6774 (diff)
downloadsubsurface-a700be32076225e68bfaa4b6c418cff015e2ceec.tar.gz
CCR option: display o2 sensor data
This patch creates the possibility of viewing the individual sensor values when the po2 button on the profile toolbar is activated. This follows exactly the procedure for optionally displaying the setpoint values while viewing po2. A checkbox in the preferences panel determines whether sensor information is shown. By default it is set to OFF. When checked, and the po2 button is activated, sensor1 values are shown in grey, sensor2 in blue and sensor3 in brown. Signed-off-by: willem ferguson <willemferguson@zoology.up.ac.za> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/graphicsview-common.cpp3
-rw-r--r--qt-ui/graphicsview-common.h3
-rw-r--r--qt-ui/preferences.cpp3
-rw-r--r--qt-ui/preferences.ui23
-rw-r--r--qt-ui/profile/diveplotdatamodel.cpp26
-rw-r--r--qt-ui/profile/diveplotdatamodel.h4
-rw-r--r--qt-ui/profile/profilewidget2.cpp25
-rw-r--r--qt-ui/profile/profilewidget2.h3
8 files changed, 80 insertions, 10 deletions
diff --git a/qt-ui/graphicsview-common.cpp b/qt-ui/graphicsview-common.cpp
index 4402a23bf..a1813ce2d 100644
--- a/qt-ui/graphicsview-common.cpp
+++ b/qt-ui/graphicsview-common.cpp
@@ -28,6 +28,9 @@ void fill_profile_color()
profile_color[PHE] = COLOR(PEANUT, BLACK1_LOW_TRANS, PEANUT);
profile_color[PHE_ALERT] = COLOR(RED1, BLACK1_LOW_TRANS, RED1);
profile_color[O2SETPOINT] = COLOR(RED1, BLACK1_LOW_TRANS, RED1);
+ profile_color[CCRSENSOR1] = COLOR(TUNDORA1_MED_TRANS, BLACK1_LOW_TRANS, TUNDORA1_MED_TRANS);
+ profile_color[CCRSENSOR2] = COLOR(ROYALBLUE2_LOW_TRANS, BLACK1_LOW_TRANS, ROYALBLUE2_LOW_TRANS);
+ profile_color[CCRSENSOR3] = COLOR(PEANUT, BLACK1_LOW_TRANS, PEANUT);
profile_color[PP_LINES] = COLOR(BLACK1_HIGH_TRANS, BLACK1_LOW_TRANS, BLACK1_HIGH_TRANS);
profile_color[TEXT_BACKGROUND] = COLOR(CONCRETE1_LOWER_TRANS, WHITE1, CONCRETE1_LOWER_TRANS);
diff --git a/qt-ui/graphicsview-common.h b/qt-ui/graphicsview-common.h
index 294109d34..3c1cb75a0 100644
--- a/qt-ui/graphicsview-common.h
+++ b/qt-ui/graphicsview-common.h
@@ -38,6 +38,9 @@ typedef enum {
PHE,
PHE_ALERT,
O2SETPOINT,
+ CCRSENSOR1,
+ CCRSENSOR2,
+ CCRSENSOR3,
PP_LINES,
/* Other colors */
diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 6c4e65df8..92c46f75b 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -124,6 +124,7 @@ void PreferencesDialog::setUiFromPrefs()
ui.gfhigh->setValue(prefs.gfhigh);
ui.gf_low_at_maxdepth->setChecked(prefs.gf_low_at_maxdepth);
ui.show_ccr_setpoint->setChecked(prefs.show_ccr_setpoint);
+ ui.show_ccr_sensors->setChecked(prefs.show_ccr_sensors);
ui.defaultSetpoint->setValue((double)prefs.defaultsetpoint / 1000.0);
ui.psro2rate->setValue(prefs.o2consumption / 1000.0);
ui.pscrfactor->setValue(rint(1000.0 / prefs.pscr_ratio));
@@ -279,6 +280,7 @@ void PreferencesDialog::syncSettings()
SAVE_OR_REMOVE("gfhigh", default_prefs.gfhigh, ui.gfhigh->value());
SAVE_OR_REMOVE("gf_low_at_maxdepth", default_prefs.gf_low_at_maxdepth, ui.gf_low_at_maxdepth->isChecked());
SAVE_OR_REMOVE("show_ccr_setpoint", default_prefs.show_ccr_setpoint, ui.show_ccr_setpoint->isChecked());
+ SAVE_OR_REMOVE("show_ccr_sensors", default_prefs.show_ccr_sensors, ui.show_ccr_sensors->isChecked());
SAVE_OR_REMOVE("display_unused_tanks", default_prefs.display_unused_tanks, ui.display_unused_tanks->isChecked());
SAVE_OR_REMOVE("show_average_depth", default_prefs.show_average_depth, ui.show_average_depth->isChecked());
s.endGroup();
@@ -396,6 +398,7 @@ void PreferencesDialog::loadSettings()
GET_INT("gfhigh", gfhigh);
GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth);
GET_BOOL("show_ccr_setpoint",show_ccr_setpoint);
+ GET_BOOL("show_ccr_sensors",show_ccr_sensors);
GET_BOOL("zoomed_plot", zoomed_plot);
set_gf(prefs.gflow, prefs.gfhigh, prefs.gf_low_at_maxdepth);
GET_BOOL("show_sac", show_sac);
diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui
index 77b3a25d1..66eda46bf 100644
--- a/qt-ui/preferences.ui
+++ b/qt-ui/preferences.ui
@@ -788,11 +788,25 @@
<string>GFLow at max depth</string>
</property>
</widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QCheckBox" name="show_ccr_setpoint">
+ <property name="text">
+ <string>CCR: Show setpoints when viewing pO₂</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QCheckBox" name="show_ccr_sensors">
+ <property name="text">
+ <string>CCR: Show individual O₂ sensor values when viewing pO₂</string>
+ </property>
+ </widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_26">
<property name="text">
- <string>Default CCR set-point</string>
+ <string>Default CCR set-point for dive planning</string>
</property>
</widget>
</item>
@@ -812,13 +826,6 @@
</property>
</widget>
</item>
- <item row="5" column="0">
- <widget class="QCheckBox" name="show_ccr_setpoint">
- <property name="text">
- <string>CCR: Show setpoints when viewing pO₂</string>
- </property>
- </widget>
- </item>
<item row="8" column="0">
<widget class="QLabel" name="pSCR">
<property name="text">
diff --git a/qt-ui/profile/diveplotdatamodel.cpp b/qt-ui/profile/diveplotdatamodel.cpp
index 9c0edc079..cdf17fe46 100644
--- a/qt-ui/profile/diveplotdatamodel.cpp
+++ b/qt-ui/profile/diveplotdatamodel.cpp
@@ -52,6 +52,12 @@ QVariant DivePlotDataModel::data(const QModelIndex &index, int role) const
return item.pressures.o2;
case O2SETPOINT:
return item.o2setpoint.mbar / 1000.0;
+ case CCRSENSOR1:
+ return item.o2sensor[0].mbar / 1000.0;
+ case CCRSENSOR2:
+ return item.o2sensor[1].mbar / 1000.0;
+ case CCRSENSOR3:
+ return item.o2sensor[2].mbar / 1000.0;
case HEARTBEAT:
return item.heartbeat;
case AMBPRESSURE:
@@ -129,6 +135,12 @@ QVariant DivePlotDataModel::headerData(int section, Qt::Orientation orientation,
return tr("pO₂");
case O2SETPOINT:
return tr("Setpoint");
+ case CCRSENSOR1:
+ return tr("Sensor1");
+ case CCRSENSOR2:
+ return tr("Sensor2");
+ case CCRSENSOR3:
+ return tr("Sensor3");
case AMBPRESSURE:
return tr("Ambient pressure");
case HEARTBEAT:
@@ -185,9 +197,23 @@ unsigned int DivePlotDataModel::dcShown() const
return ret; \
}
+#define MAX_SENSOR_GAS_FUNC(GASFUNC) \
+ double DivePlotDataModel::GASFUNC() /* CCR: This function finds the largest measured po2 value */ \
+ { /* by scanning the readings from the three individual o2 sensors. */ \
+ double ret = -1; /* This is used for scaling the Y-axis for partial pressures */ \
+ for (int s = 0; s < 3; s++) { /* when displaying the graphs for individual o2 sensors */ \
+ for (int i = 0, count = rowCount(); i < count; i++) { /* POTENTIAL PROBLEM: the '3' (no_sensors) is hard-coded here */\
+ if (pInfo.entry[i].o2sensor[s].mbar > ret) \
+ ret = pInfo.entry[i].o2sensor[s].mbar; \
+ } \
+ } \
+ return (ret / 1000.0); /* mbar -> bar conversion */ \
+ }
+
MAX_PPGAS_FUNC(he, pheMax);
MAX_PPGAS_FUNC(n2, pn2Max);
MAX_PPGAS_FUNC(o2, po2Max);
+MAX_SENSOR_GAS_FUNC(CCRMax);
void DivePlotDataModel::emitDataChanged()
{
diff --git a/qt-ui/profile/diveplotdatamodel.h b/qt-ui/profile/diveplotdatamodel.h
index 6fdb5fcdd..6a1f9bd16 100644
--- a/qt-ui/profile/diveplotdatamodel.h
+++ b/qt-ui/profile/diveplotdatamodel.h
@@ -60,6 +60,9 @@ public:
PHE,
PO2,
O2SETPOINT,
+ CCRSENSOR1,
+ CCRSENSOR2,
+ CCRSENSOR3,
HEARTBEAT,
AMBPRESSURE,
GFLINE,
@@ -78,6 +81,7 @@ public:
double pheMax();
double pn2Max();
double po2Max();
+ double CCRMax();
void emitDataChanged();
void calculateDecompression();
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 05553216d..fbf4aaf70 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -84,6 +84,9 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent),
pheGasItem(new PartialPressureGasItem()),
po2GasItem(new PartialPressureGasItem()),
o2SetpointGasItem(new PartialPressureGasItem()),
+ ccrsensor1GasItem(new PartialPressureGasItem()),
+ ccrsensor2GasItem(new PartialPressureGasItem()),
+ ccrsensor3GasItem(new PartialPressureGasItem()),
heartBeatAxis(new DiveCartesianAxis()),
heartBeatItem(new DiveHeartrateItem()),
percentageAxis(new DiveCartesianAxis()),
@@ -152,6 +155,9 @@ ProfileWidget2::~ProfileWidget2()
delete pheGasItem;
delete po2GasItem;
delete o2SetpointGasItem;
+ delete ccrsensor1GasItem;
+ delete ccrsensor2GasItem;
+ delete ccrsensor3GasItem;
delete heartBeatAxis;
delete heartBeatItem;
delete percentageAxis;
@@ -191,6 +197,9 @@ void ProfileWidget2::addItemsToScene()
scene()->addItem(pheGasItem);
scene()->addItem(po2GasItem);
scene()->addItem(o2SetpointGasItem);
+ scene()->addItem(ccrsensor1GasItem);
+ scene()->addItem(ccrsensor2GasItem);
+ scene()->addItem(ccrsensor3GasItem);
scene()->addItem(percentageAxis);
scene()->addItem(heartBeatAxis);
scene()->addItem(heartBeatItem);
@@ -297,6 +306,9 @@ void ProfileWidget2::setupItemOnScene()
CREATE_PP_GAS(pheGasItem, PHE, PHE, PHE_ALERT, &prefs.pp_graphs.phe_threshold, "phegraph");
CREATE_PP_GAS(po2GasItem, PO2, PO2, PO2_ALERT, &prefs.pp_graphs.po2_threshold, "po2graph");
CREATE_PP_GAS(o2SetpointGasItem, O2SETPOINT, PO2_ALERT, PO2_ALERT, &prefs.pp_graphs.po2_threshold, "po2graph");
+ CREATE_PP_GAS(ccrsensor1GasItem, CCRSENSOR1, CCRSENSOR1, PO2_ALERT, &prefs.pp_graphs.po2_threshold, "ccrsensorgraph");
+ CREATE_PP_GAS(ccrsensor2GasItem, CCRSENSOR2, CCRSENSOR2, PO2_ALERT, &prefs.pp_graphs.po2_threshold, "ccrsensorgraph");
+ CREATE_PP_GAS(ccrsensor3GasItem, CCRSENSOR3, CCRSENSOR3, PO2_ALERT, &prefs.pp_graphs.po2_threshold, "ccrsensorgraph");
#undef CREATE_PP_GAS
temperatureAxis->setTextVisible(false);
@@ -509,7 +521,10 @@ void ProfileWidget2::plotDive(struct dive *d, bool force)
currentdc = fake_dc(currentdc);
}
- o2SetpointGasItem->setVisible(current_dive && (currentdc->divemode == CCR) && prefs.show_ccr_setpoint && prefs.pp_graphs.po2);
+ o2SetpointGasItem->setVisible(prefs.show_ccr_setpoint && (currentdc->divemode == CCR) && prefs.pp_graphs.po2 && current_dive);
+ ccrsensor1GasItem->setVisible(prefs.show_ccr_sensors && (currentdc->divemode == CCR) && prefs.pp_graphs.po2 && current_dive);
+ ccrsensor2GasItem->setVisible(prefs.show_ccr_sensors && (currentdc->divemode == CCR) && prefs.pp_graphs.po2 && current_dive);
+ ccrsensor3GasItem->setVisible(prefs.show_ccr_sensors && (currentdc->divemode == CCR) && prefs.pp_graphs.po2 && (currentdc->no_o2sensors > 2) && current_dive);
/* This struct holds all the data that's about to be plotted.
* I'm not sure this is the best approach ( but since we are
@@ -860,6 +875,9 @@ void ProfileWidget2::setEmptyState()
pn2GasItem->setVisible(false);
po2GasItem->setVisible(false);
o2SetpointGasItem->setVisible(false);
+ ccrsensor1GasItem->setVisible(false);
+ ccrsensor2GasItem->setVisible(false);
+ ccrsensor3GasItem->setVisible(false);
pheGasItem->setVisible(false);
ambPressureItem->setVisible(false);
gflineItem->setVisible(false);
@@ -957,8 +975,11 @@ void ProfileWidget2::setProfileState()
}
pn2GasItem->setVisible(prefs.pp_graphs.pn2);
po2GasItem->setVisible(prefs.pp_graphs.po2);
- o2SetpointGasItem->setVisible(current_dive && prefs.pp_graphs.po2 && (current_dc->divemode == CCR) && (prefs.show_ccr_setpoint));
pheGasItem->setVisible(prefs.pp_graphs.phe);
+ o2SetpointGasItem->setVisible(current_dive && prefs.pp_graphs.po2 && (current_dc->divemode == CCR) && (prefs.show_ccr_setpoint));
+ ccrsensor1GasItem->setVisible(prefs.show_ccr_sensors && (current_dc->divemode == CCR) && prefs.pp_graphs.po2 && current_dive);
+ ccrsensor2GasItem->setVisible(prefs.show_ccr_sensors && (current_dc->divemode == CCR) && prefs.pp_graphs.po2 && (current_dc->no_o2sensors > 1) && current_dive);
+ ccrsensor3GasItem->setVisible(prefs.show_ccr_sensors && (current_dc->divemode == CCR) && prefs.pp_graphs.po2 && (current_dc->no_o2sensors > 2) && current_dive);
timeAxis->setPos(itemPos.time.pos.on);
timeAxis->setLine(itemPos.time.expanded);
diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h
index 675fa88b3..b4ae8b333 100644
--- a/qt-ui/profile/profilewidget2.h
+++ b/qt-ui/profile/profilewidget2.h
@@ -172,6 +172,9 @@ private:
PartialPressureGasItem *pheGasItem;
PartialPressureGasItem *po2GasItem;
PartialPressureGasItem *o2SetpointGasItem;
+ PartialPressureGasItem *ccrsensor1GasItem;
+ PartialPressureGasItem *ccrsensor2GasItem;
+ PartialPressureGasItem *ccrsensor3GasItem;
DiveCartesianAxis *heartBeatAxis;
DiveHeartrateItem *heartBeatItem;
DiveCartesianAxis *percentageAxis;