[PATCH] While parsing weight and pressure we should not change the users settings.

Joakim Bygdell j.bygdell at gmail.com
Fri Feb 12 12:12:23 PST 2016


Now it is possible to enter a specific unit that is different from the
unit stored in the preferences. If only numbers are inputed the unit will
be the same as specified by the users preferences.

Signed-off-by: Joakim Bygdell <j.bygdell at gmail.com>
---
 qt-mobile/qmlmanager.cpp     |  8 --------
 subsurface-core/qthelper.cpp | 42 ++++++++++++++++++++++++++++--------------
 2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/qt-mobile/qmlmanager.cpp b/qt-mobile/qmlmanager.cpp
index 69ba51a..ff11bbb 100644
--- a/qt-mobile/qmlmanager.cpp
+++ b/qt-mobile/qmlmanager.cpp
@@ -502,20 +502,12 @@ QString QMLManager::commitChanges(QString diveId, QString date, QString location
 	if (weightsystem_none((void *)&d->weightsystem[1])) {
 		if (get_weight_string(d->weightsystem[0].weight, true) != weight) {
 			diveChanged = true;
-			if (weight.contains(tr("kg")))
-				prefs.units.weight = units::KG;
-			else if (weight.contains(tr("lbs")))
-				prefs.units.weight = units::LBS;
 			d->weightsystem[0].weight.grams = parseWeightToGrams(weight);
 		}
 	}
 // start and end pressures for first cylinder only
 	if (get_pressure_string(d->cylinder[0].start, true) != startpressure || get_pressure_string(d->cylinder[0].end, true) != endpressure) {
 		diveChanged = true;
-		if (startpressure.contains(tr("bar")) || endpressure.contains(tr("bar")))
-			prefs.units.pressure = units::BAR;
-		else if (startpressure.contains(tr("psi")) || endpressure.contains(tr("psi")))
-			prefs.units.pressure = units::PSI;
 		d->cylinder[0].start.mbar = parsePressureToMbar(startpressure);
 		d->cylinder[0].end.mbar = parsePressureToMbar(endpressure);
 	}
diff --git a/subsurface-core/qthelper.cpp b/subsurface-core/qthelper.cpp
index f2fc7e8..07ec194 100644
--- a/subsurface-core/qthelper.cpp
+++ b/subsurface-core/qthelper.cpp
@@ -832,20 +832,27 @@ int parseTemperatureToMkelvin(const QString &text)
 int parseWeightToGrams(const QString &text)
 {
 	int grams;
+	QString kg_or_lbs = text;
 	QString numOnly = text;
 	numOnly.replace(",", ".").remove(QRegExp("[^0-9.]"));
 	if (numOnly.isEmpty())
 		return 0;
 	double number = numOnly.toDouble();
-	switch (prefs.units.weight) {
-	case units::KG:
+	if (kg_or_lbs.contains(QObject::tr("kg")))
 		grams = rint(number * 1000);
-		break;
-	case units::LBS:
+	else if (kg_or_lbs.contains(QObject::tr("lbs")))
 		grams = lbs_to_grams(number);
-		break;
-	default:
-		grams = 0;
+	else {
+		switch (prefs.units.weight) {
+		case units::KG:
+			grams = rint(number * 1000);
+			break;
+		case units::LBS:
+			grams = lbs_to_grams(number);
+			break;
+		default:
+			grams = 0;
+		}
 	}
 	return grams;
 }
@@ -853,20 +860,27 @@ int parseWeightToGrams(const QString &text)
 int parsePressureToMbar(const QString &text)
 {
 	int mbar;
+	QString psi_or_bar = text;
 	QString numOnly = text;
 	numOnly.replace(",", ".").remove(QRegExp("[^0-9.]"));
 	if (numOnly.isEmpty())
 		return 0;
 	double number = numOnly.toDouble();
-	switch (prefs.units.pressure) {
-	case units::BAR:
+	if (psi_or_bar.contains(QObject::tr("bar")))
 		mbar = rint(number * 1000);
-		break;
-	case units::PSI:
+	else if (psi_or_bar.contains(QObject::tr("psi")))
 		mbar = psi_to_mbar(number);
-		break;
-	default:
-		mbar = 0;
+	else {
+		switch (prefs.units.pressure) {
+		case units::BAR:
+			mbar = rint(number * 1000);
+			break;
+		case units::PSI:
+			mbar = psi_to_mbar(number);
+			break;
+		default:
+			mbar = 0;
+		}
 	}
 	return mbar;
 }
-- 
2.4.9 (Apple Git-60)



More information about the subsurface mailing list