Don't use "get_volume_string()" for cylinder size string

We had two totally different usage cases for "get_volume_string()": one
that did the obvious "show this volume as a string", and one that tried
to show a cylinder size.

The function used a magic third argument (the working pressure of the
cylinder) to distinguish between the two cases, but it still got it
wrong.

A metric cylinder doesn't necessarily have a working pressure at all,
and the size is a wet size in liters.  We'd pass in zero as the working
pressure, and if the volume units were set to cubic feet, the logic in
"get_volume_string()" would happily convert the metric wet size into the
wet size in cubic feet.

But that's completely wrong.  An imperial cylinder size simply isn't a
wet size.  If you don't have a working pressure, you cannot convert the
cylinder size to cubic feet.  End of story.

So instead of having "get_volume_string()" have magical behavior
depending on working pressure, and getting it wrong anyway, just make
get_volume_string do a pure volume conversion, and create a whole new
function for showing the size of a cylinder.

Now, if the cylinder doesn't have a working pressure, we just show the
metric size, even if the user had asked for cubic feet.

[Dirk Hohndel: added call to translation functions for the units]

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Linus Torvalds 2016-02-24 14:42:56 -08:00 committed by Dirk Hohndel
parent 7ebc31c1ec
commit 288aff9dbb
4 changed files with 30 additions and 12 deletions

View file

@ -19,7 +19,7 @@ QString get_weight_unit();
QString get_cylinder_used_gas_string(cylinder_t *cyl, bool showunit = false);
QString get_temperature_string(temperature_t temp, bool showunit = false);
QString get_temp_unit();
QString get_volume_string(volume_t volume, bool showunit = false, int mbar = 0);
QString get_volume_string(volume_t volume, bool showunit = false);
QString get_volume_unit();
QString get_pressure_string(pressure_t pressure, bool showunit = false);
QString get_pressure_unit();

View file

@ -678,19 +678,11 @@ QString get_temp_unit()
return QString(UTF8_DEGREE "F");
}
QString get_volume_string(volume_t volume, bool showunit, int mbar)
QString get_volume_string(volume_t volume, bool showunit)
{
const char *unit;
int decimals;
double value = get_volume_units(volume.mliter, &decimals, &unit);
if (mbar) {
// we are showing a tank size
// fix the weird imperial way of denominating size and provide
// reasonable number of decimals
if (prefs.units.volume == units::CUFT)
value *= bar_to_atm(mbar / 1000.0);
decimals = (value > 20.0) ? 0 : (value > 2.0) ? 1 : 2;
}
return QString("%1%2").arg(value, 0, 'f', decimals).arg(showunit ? unit : "");
}

View file

@ -26,7 +26,7 @@ static QString getFormattedCylinder(struct dive *dive, unsigned int idx)
if (!desc && idx > 0)
return QString(EMPTY_DIVE_STRING);
QString fmt = desc ? QString(desc) : QObject::tr("unknown");
fmt += ", " + get_volume_string(cyl->type.size, true, 0);
fmt += ", " + get_volume_string(cyl->type.size, true);
fmt += ", " + get_pressure_string(cyl->type.workingpressure, true);
fmt += ", " + get_pressure_string(cyl->start, false) + " - " + get_pressure_string(cyl->end, true);
fmt += ", " + get_gas_string(cyl->gasmix);