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()
{
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)
{
#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.
DivePlannerPointsModel::instance()->setBottomSac(value);
}
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)
{
#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.
DivePlannerPointsModel::instance()->setDecoSac(value);
}

View file

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

View file

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

View file

@ -65,6 +65,10 @@ void QMLInterface::setup(QQmlContext *ct)
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::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,
instance(), &QMLInterface::display_runtimeChanged);
connect(qPrefDivePlanner::instance(), &qPrefDivePlanner::display_durationChanged,

View file

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

View file

@ -145,9 +145,9 @@ void TestPlannerShared::test_gas()
// Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_bottomsac(2830);
QCOMPARE(plannerShared::bottomsac(), 2.83);
QCOMPARE(int(plannerShared::bottomsac() * 1000), 99);
qPrefDivePlanner::set_bottomsac(16000);
QCOMPARE(plannerShared::bottomsac(), 16);
QCOMPARE(int(plannerShared::bottomsac() * 1000), 565);
plannerShared::set_decosac(0.9);
QCOMPARE(qPrefDivePlanner::decosac(), 25485);
@ -156,9 +156,9 @@ void TestPlannerShared::test_gas()
// Remark return will from qPref is in m / 1000.
qPrefDivePlanner::set_decosac(11500);
QCOMPARE(plannerShared::decosac(), 11.5);
QCOMPARE(int(plannerShared::decosac() * 1000), 406);
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
// Imperial, the desktop version is like that.