diff options
-rw-r--r-- | profile-widget/diveprofileitem.cpp | 29 |
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]); |