dive planner: correct bottomsac/decosac calc.

Move conversion cuft <-> liter from desktop-widget/diveplanner.cpp
to plannerShared, to facilitate the same results in mobile
diveplanner

Use Backend for bottomsac/decosac and update to check
for switch LITER <-> CUFT

Add bottomsac/decosac to QMLinterface.

Signed-off-by: jan Iversen <jan@casacondor.com>
This commit is contained in:
jan Iversen 2020-01-08 12:06:23 +01:00 committed by Dirk Hohndel
parent 5548376776
commit cd3c2266f9
6 changed files with 49 additions and 18 deletions

View file

@ -63,20 +63,42 @@ void plannerShared::set_min_switch_duration(int value)
double plannerShared::bottomsac() double plannerShared::bottomsac()
{ {
return qPrefDivePlanner::bottomsac() / 1000.0; return (qPrefUnits::volume() == units::LITER) ?
qPrefDivePlanner::bottomsac() / 1000.0 :
ml_to_cuft(qPrefDivePlanner::bottomsac()
#ifdef SUBSURFACE_MOBILE
* 100 // cuft without decimals (0 - 300)
#endif
);
} }
void plannerShared::set_bottomsac(double value) void plannerShared::set_bottomsac(double value)
{ {
#ifdef SUBSURFACE_MOBILE
if (qPrefUnits::volume() == units::CUFT)
value /= 100; // cuft without decimals (0 - 300)
#endif
// NO conversion, this is done in the planner model. // NO conversion, this is done in the planner model.
DivePlannerPointsModel::instance()->setBottomSac(value); DivePlannerPointsModel::instance()->setBottomSac(value);
} }
double plannerShared::decosac() double plannerShared::decosac()
{ {
return qPrefDivePlanner::decosac() / 1000.0; return (qPrefUnits::volume() == units::LITER) ?
qPrefDivePlanner::decosac() / 1000.0 :
ml_to_cuft(qPrefDivePlanner::decosac()
#ifdef SUBSURFACE_MOBILE
* 100 // cuft without decimals (0 - 300)
#endif
);
} }
void plannerShared::set_decosac(double value) void plannerShared::set_decosac(double value)
{ {
#ifdef SUBSURFACE_MOBILE
if (qPrefUnits::volume() == units::CUFT)
value /= 100; // cuft without decimals (0 - 300)
#endif
// NO conversion, this is done in the planner model. // NO conversion, this is done in the planner model.
DivePlannerPointsModel::instance()->setDecoSac(value); DivePlannerPointsModel::instance()->setDecoSac(value);
} }

View file

@ -554,8 +554,8 @@ void PlannerSettingsWidget::settingsChanged()
ui.bottomSAC->setSingleStep(0.1); ui.bottomSAC->setSingleStep(0.1);
ui.decoStopSAC->setDecimals(2); ui.decoStopSAC->setDecimals(2);
ui.decoStopSAC->setSingleStep(0.1); ui.decoStopSAC->setSingleStep(0.1);
ui.bottomSAC->setValue(ml_to_cuft(prefs.bottomsac)); ui.bottomSAC->setValue(plannerShared::bottomsac());
ui.decoStopSAC->setValue(ml_to_cuft(prefs.decosac)); ui.decoStopSAC->setValue(plannerShared::decosac());
} else { } else {
ui.bottomSAC->setSuffix(tr("/min")); ui.bottomSAC->setSuffix(tr("/min"));
ui.decoStopSAC->setSuffix(tr("/min")); ui.decoStopSAC->setSuffix(tr("/min"));

View file

@ -22,8 +22,8 @@ Kirigami.ScrollablePage {
spinDescrate.value = Backend.descrate spinDescrate.value = Backend.descrate
} }
onVolumeChanged: { onVolumeChanged: {
spinBottomsac.value = Planner.bottomsac spinBottomsac.value = Backend.bottomsac
spinDecosac.value = Planner.decosac spinDecosac.value = Backend.decosac
} }
} }
Column { Column {
@ -227,14 +227,16 @@ Kirigami.ScrollablePage {
TemplateSpinBox { TemplateSpinBox {
id: spinBottomsac id: spinBottomsac
from: 1 from: 1
to: 99 to: (Backend.volume === Enums.LITER) ? 85 : 300
stepSize: 1 stepSize: 1
value: Planner.bottomsac value: Backend.bottomsac
textFromValue: function (value, locale) { textFromValue: function (value, locale) {
return value + volumeUnit return (Backend.volume === Enums.LITER) ?
value + volumeUnit :
(value / 100).toFixed(2) + volumeUnit
} }
onValueModified: { onValueModified: {
Planner.bottomsac = value Backend.bottomsac = value
} }
} }
TemplateLabel { TemplateLabel {
@ -243,14 +245,16 @@ Kirigami.ScrollablePage {
TemplateSpinBox { TemplateSpinBox {
id: spinDecosac id: spinDecosac
from: 1 from: 1
to: 99 to: (Backend.volume === Enums.LITER) ? 85 : 300
stepSize: 1 stepSize: 1
value: Planner.decosac value: Backend.decosac
textFromValue: function (value, locale) { textFromValue: function (value, locale) {
return value + volumeUnit return (Backend.volume === Enums.LITER) ?
value + volumeUnit :
(value / 100).toFixed(2) + volumeUnit
} }
onValueModified: { onValueModified: {
Planner.decosac = value Backend.decosac = value
} }
} }
TemplateLabel { TemplateLabel {

View file

@ -65,6 +65,10 @@ void QMLInterface::setup(QQmlContext *ct)
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::problemsolvingtimeChanged, connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::problemsolvingtimeChanged,
instance(), &QMLInterface::problemsolvingtimeChanged); instance(), &QMLInterface::problemsolvingtimeChanged);
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::bottomsacChanged,
instance(), &QMLInterface::bottomsacChanged);
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::decosacChanged,
instance(), &QMLInterface::decosacChanged);
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::display_runtimeChanged, connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::display_runtimeChanged,
instance(), &QMLInterface::display_runtimeChanged); instance(), &QMLInterface::display_runtimeChanged);
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::display_durationChanged, connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::display_durationChanged,

View file

@ -6,6 +6,7 @@
#include "core/settings/qPrefDivePlanner.h" #include "core/settings/qPrefDivePlanner.h"
#include "core/settings/qPrefTechnicalDetails.h" #include "core/settings/qPrefTechnicalDetails.h"
#include "qt-models/diveplannermodel.h" #include "qt-models/diveplannermodel.h"
#include "backend-shared/plannershared.h"
#include <QObject> #include <QObject>
#include <QQmlContext> #include <QQmlContext>

View file

@ -145,9 +145,9 @@ void TestPlannerShared::test_gas()
// Remark return will from qPref is in m / 1000. // Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_bottomsac(2830); qPrefDivePlanner::set_bottomsac(2830);
QCOMPARE(plannerShared::bottomsac(), 2.83); QCOMPARE(int(plannerShared::bottomsac() * 1000), 99);
qPrefDivePlanner::set_bottomsac(16000); qPrefDivePlanner::set_bottomsac(16000);
QCOMPARE(plannerShared::bottomsac(), 16); QCOMPARE(int(plannerShared::bottomsac() * 1000), 565);
plannerShared::set_decosac(0.9); plannerShared::set_decosac(0.9);
QCOMPARE(qPrefDivePlanner::decosac(), 25485); QCOMPARE(qPrefDivePlanner::decosac(), 25485);
@ -156,9 +156,9 @@ void TestPlannerShared::test_gas()
// Remark return will from qPref is in m / 1000. // Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_decosac(11500); qPrefDivePlanner::set_decosac(11500);
QCOMPARE(plannerShared::decosac(), 11.5); QCOMPARE(int(plannerShared::decosac() * 1000), 406);
qPrefDivePlanner::set_decosac(19800); qPrefDivePlanner::set_decosac(19800);
QCOMPARE(plannerShared::decosac(), 19.8); QCOMPARE(int(plannerShared::decosac() * 1000), 699);
// Remark bottompo2 is in BAR, even though unit system is // Remark bottompo2 is in BAR, even though unit system is
// Imperial, the desktop version is like that. // Imperial, the desktop version is like that.