aboutsummaryrefslogtreecommitdiffstats
path: root/profile-widget
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2017-07-22 08:36:58 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-07-22 10:38:32 -0700
commit342391e0d189032e127d64d60f2b827be5a0412e (patch)
treeb2bf4c65ce4b9f39c1b2cc83ad3b78ef64fa5a0e /profile-widget
parent92ecbc8c83d8039cb1b16e3ab6adbb3acbef581c (diff)
downloadsubsurface-342391e0d189032e127d64d60f2b827be5a0412e.tar.gz
Show multiple gas pressures in the profile even if the dive isn't CCR
Now that the cylinder pressures are more generalized, we should show them even for non-CCR dives if we have them. The most notable example would be having separate pressure transmitters for both cylinders in a sidemount setup. The code no longer really depends on any CCR logic. NOTE! This is still preparatory work, in that this is one part of supporting multiple simulataneous cylinder pressures, but we are still lacking in other departments (eg properly filling those fields in when a dive computer exports multiple pressure sensors etc). Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'profile-widget')
-rw-r--r--profile-widget/diveprofileitem.cpp29
1 files changed, 12 insertions, 17 deletions
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index 096acd898..fcaca3a88 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -684,18 +684,14 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
if (!shouldCalculateStuff(topLeft, bottomRight))
return;
int last_index = -1;
- int o2mbar;
QPolygonF boundingPoly, o2Poly; // This is the "Whole Item", but a pressure can be divided in N Polygons.
polygons.clear();
- if (displayed_dive.dc.divemode == CCR)
- polygons.append(o2Poly);
+ polygons.append(o2Poly);
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
- o2mbar = 0;
plot_data *entry = dataModel->data().entry + i;
int mbar = GET_PRESSURE(entry, 0);
- if (displayed_dive.dc.divemode == CCR)
- o2mbar = GET_PRESSURE(entry, 1);
+ int o2mbar = GET_PRESSURE(entry, 1);
if ((int)entry->sensor[0] != last_index) {
polygons.append(QPolygonF()); // this is the polygon that will be actually drawn on screen.
@@ -717,14 +713,15 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
setPolygon(boundingPoly);
qDeleteAll(texts);
texts.clear();
- int mbar, cyl;
+ int mbar, cyl, lastcyl;
+ int o2mbar, o2cyl;
int seen_cyl[MAX_CYLINDERS] = { false, };
int last_pressure[MAX_CYLINDERS] = { 0, };
int last_time[MAX_CYLINDERS] = { 0, };
struct plot_data *entry;
- cyl = -1;
- o2mbar = 0;
+ cyl = o2cyl = lastcyl = -1;
+ mbar = o2mbar = 0;
double print_y_offset[8][2] = { { 0, -0.5 }, { 0, -0.5 }, { 0, -0.5 }, { 0, -0.5 }, { 0, -0.5 } ,{ 0, -0.5 }, { 0, -0.5 }, { 0, -0.5 } };
// CCR dives: These are offset values used to print the gas lables and pressures on a CCR dive profile at
@@ -733,28 +730,26 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
// The array is initialised with default values that apply to non-CCR dives.
bool offsets_initialised = false;
- int o2cyl = -1, dilcyl = -1;
QFlags<Qt::AlignmentFlag> alignVar= Qt::AlignTop, align_dil = Qt::AlignBottom, align_o2 = Qt::AlignTop;
double axisRange = (vAxis->maximum() - vAxis->minimum())/1000; // Convert axis pressure range to bar
double axisLog = log10(log10(axisRange));
for (int i = 0, count = dataModel->rowCount(); i < count; i++) {
entry = dataModel->data().entry + i;
- dilcyl = entry->sensor[0];
+ cyl = entry->sensor[0];
o2cyl = entry->sensor[1];
mbar = GET_PRESSURE(entry, 0);
- if (o2cyl >= 0)
- o2mbar = GET_PRESSURE(entry, 1);
+ o2mbar = GET_PRESSURE(entry, 1);
if (o2mbar) { // Do we have a second cylinder pressure? If so, do
// The first time an o2 value is detected, see if the oxygen cyl pressure graph starts above or below the dil graph
if (!offsets_initialised) { // Initialise the parameters for placing the text correctly near the graph line:
if ((o2mbar > mbar)) { // If above, write o2 start cyl pressure above graph and diluent pressure below graph:
print_y_offset[o2cyl][0] = -7 * axisLog; // y offset for oxygen gas lable (above); pressure offsets=-0.5, already initialised
- print_y_offset[dilcyl][0] = 5 * axisLog; // y offset for diluent gas lable (below)
+ print_y_offset[cyl][0] = 5 * axisLog; // y offset for diluent gas lable (below)
} else { // ... else write o2 start cyl pressure below graph:
print_y_offset[o2cyl][0] = 5 * axisLog; // o2 lable & pressure below graph; pressure offsets=-0.5, already initialised
- print_y_offset[dilcyl][0] = -7.8 * axisLog; // and diluent lable above graph.
+ print_y_offset[cyl][0] = -7.8 * axisLog; // and diluent lable above graph.
align_dil = Qt::AlignTop;
align_o2 = Qt::AlignBottom;
}
@@ -774,8 +769,8 @@ void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QMo
if (!mbar)
continue;
- if (cyl != dilcyl) { // Pressure value near the left hand edge of the profile - other cylinders:
- cyl = dilcyl; // For each other cylinder, write the gas lable and pressure
+ if (cyl != lastcyl) { // Pressure value near the left hand edge of the profile - other cylinders:
+ lastcyl = cyl; // For each other cylinder, write the gas lable and pressure
if (!seen_cyl[cyl]) {
plotPressureValue(mbar, entry->sec, alignVar, print_y_offset[cyl][1]);
plotGasValue(mbar, entry->sec, displayed_dive.cylinder[cyl].gasmix, align_dil, print_y_offset[cyl][0]);