subsurface/mobile-widgets/qml/DivePlannerSetup.qml
Dirk Hohndel 9f8d593a15 Mobile UI: fix typo in disabled planner setup
While this is disabled and is unlikely to be completed, the typo caused
confusion with translators.

This shows one of the weaknesses of the way we set up our translations, in that
always both desktop and mobile are translated together, and disabled code is
also included in those translations, causing unnecessary work for the
translators.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2020-03-04 08:03:44 -08:00

517 lines
11 KiB
QML

// SPDX-License-Identifier: GPL-2.0
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.12
import QtQuick.Dialogs 1.3
import org.subsurfacedivelog.mobile 1.0
import org.kde.kirigami 2.4 as Kirigami
TemplatePage {
title: qsTr("Dive planner setup")
property string speedUnit: (Backend.length === Enums.METERS) ? qsTr(" m/min") : qsTr(" ft/min")
property string volumeUnit: (Backend.volume === Enums.LITER) ? qsTr(" l/min") : qsTr(" cuft/min")
property string pressureUnit: (Backend.pressure === Enums.BAR) ? qsTr(" BAR") : qsTr(" PSI")
Connections {
target: Backend
onLengthChanged: {
spinAscrate75.value = Backend.ascrate75
spinAscrate50.value = Backend.ascrate50
spinAscratestops.value = Backend.ascratestops
spinAscratelast6m.value = Backend.ascratelast6m
spinDescrate.value = Backend.descrate
spinBestmixend.value = Backend.bestmixend
}
onVolumeChanged: {
spinBottomsac.value = Backend.bottomsac
spinDecosac.value = Backend.decosac
}
onPressureChanged: {
}
}
Column {
width: parent.width
spacing: 1
Layout.margins: Kirigami.Units.gridUnit
TemplateSection {
id: rates
title: qsTr("Rates")
GridLayout {
columns: 2
rowSpacing: Kirigami.Units.smallSpacing * 2
columnSpacing: Kirigami.Units.smallSpacing
visible: rates.isExpanded
TemplateLabel {
Layout.columnSpan: 2
text: qsTr("Ascent")
font.bold: true
}
TemplateLabel {
text: qsTr("below 75% avg. depth")
}
TemplateSpinBox {
id: spinAscrate75
from: 1
to: 99
stepSize: 1
value: Backend.ascrate75
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.ascrate75 = value
}
}
TemplateLabel {
text: qsTr("75% to 50% avg. depth")
}
TemplateSpinBox {
id: spinAscrate50
from: 1
to: 99
stepSize: 1
value: Backend.ascrate50
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.ascrate50 = value
}
}
TemplateLabel {
text: qsTr("50% avg. depth to 6m")
}
TemplateSpinBox {
id: spinAscratestops
from: 1
to: 99
stepSize: 1
value: Backend.ascratestops
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.ascratestops = value
}
}
TemplateLabel {
text: qsTr("6m to surface")
}
TemplateSpinBox {
id: spinAscratelast6m
from: 1
to: 99
stepSize: 1
value: Backend.ascratelast6m
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.ascratelast6m = value
}
}
TemplateLabel {
Layout.columnSpan: 2
text: qsTr("Descent")
font.bold: true
}
TemplateLabel {
text: qsTr("Surface to the bottom")
}
TemplateSpinBox {
id: spinDescrate
from: 1
to: 99
stepSize: 1
value: Backend.descrate
enabled: !Backend.drop_stone_mode
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.descrate = value
}
}
TemplateCheckBox {
text: qsTr("Drop to first depth")
checked: Backend.drop_stone_mode
onClicked: {
Backend.drop_stone_mode = checked
}
}
}
}
TemplateSection {
id: planning
title: qsTr("Planning")
GridLayout {
columns: 2
rowSpacing: Kirigami.Units.smallSpacing * 2
columnSpacing: Kirigami.Units.smallSpacing
visible: planning.isExpanded
TemplateLabel {
text: qsTr("Dive mode")
}
TemplateComboBox {
editable: false
currentIndex: Backend.dive_mode
model: ListModel {
ListElement {text: qsTr("Open circuit")}
ListElement {text: qsTr("CCR")}
ListElement {text: qsTr("pSCR")}
}
onActivated: {
Backend.dive_mode = currentIndex
}
}
TemplateCheckBox {
text: qsTr("Bailout: Deco on OC")
Layout.columnSpan: 2
checked: Backend.dobailout
}
TemplateRadioButton {
text: qsTr("Recreational mode")
Layout.columnSpan: 2
checked: Backend.planner_deco_mode === Enums.RECREATIONAL
onClicked: {
Backend.planner_deco_mode = Enums.RECREATIONAL
}
}
TemplateLabel {
text: qsTr("Reserve gas")
leftPadding: Kirigami.Units.smallSpacing * 2
enabled: Backend.planner_deco_mode === Enums.RECREATIONAL
}
TemplateSpinBox {
from: 1
to: 99
stepSize: 1
value: Backend.reserve_gas
textFromValue: function (value, locale) {
return value + volumeUnit
}
onValueModified: {
Backend.reserve_gas = value
}
}
TemplateCheckBox {
text: qsTr("Safety stop")
Layout.columnSpan: 2
leftPadding: Kirigami.Units.smallSpacing * 6
checked: Backend.safetystop
onClicked: {
Backend.safetystop = checked
}
}
TemplateRadioButton {
text: qsTr("Bühlmann deco")
Layout.columnSpan: 2
checked: Backend.planner_deco_mode === Enums.BUEHLMANN
onClicked: {
Backend.planner_deco_mode = Enums.BUEHLMANN
}
}
TemplateLabel {
text: qsTr("GFLow")
leftPadding: Kirigami.Units.smallSpacing * 2
}
TemplateSpinBox {
from: 1
to: 99
stepSize: 1
value: Backend.gflow
textFromValue: function (value, locale) {
return value + volumeUnit
}
onValueModified: {
Backend.gflow = value
}
}
TemplateLabel {
text: qsTr("GFHigh")
leftPadding: Kirigami.Units.smallSpacing * 2
}
TemplateSpinBox {
from: 1
to: 99
stepSize: 1
value: Backend.gfhigh
textFromValue: function (value, locale) {
return value + volumeUnit
}
onValueModified: {
Backend.gfhigh = value
}
}
TemplateRadioButton {
text: qsTr("VPM-B deco")
Layout.columnSpan: 2
checked: Backend.planner_deco_mode === Enums.VPMB
onClicked: {
Backend.planner_deco_mode = Enums.VPMB
}
}
TemplateLabel {
text: qsTr("Conservatism level")
leftPadding: 20
}
TemplateSpinBox {
from: 0
to: 4
stepSize: 1
value: Backend.vpmb_conservatism
textFromValue: function (value, locale) {
return qsTr("+") + value
}
onValueModified: {
Backend.vpmb_conservatism = value
}
}
TemplateCheckBox {
text: qsTr("Last stop at ??")
Layout.columnSpan: 2
}
TemplateCheckBox {
text: qsTr("Plan backgas breaks")
Layout.columnSpan: 2
checked: Backend.last_stop6m
onClicked: {
Backend.last_stop6m = checked
}
}
TemplateCheckBox {
text: qsTr("Only switch at required stops")
Layout.columnSpan: 2
checked: Backend.switch_at_req_stop
onClicked: {
Backend.switch_at_req_stop = checked
}
}
TemplateLabel {
text: qsTr("Min switch time")
}
TemplateSpinBox {
from: 0
to: 4
stepSize: 1
value: Backend.min_switch_duration
textFromValue: function (value, locale) {
return qsTr("+") + value
}
onValueModified: {
Backend.min_switch_duration = value
}
}
TemplateLabel {
text: qsTr("Surface segment")
}
TemplateSpinBox {
from: 0
to: 4
stepSize: 1
value: Backend.surface_segment
textFromValue: function (value, locale) {
return qsTr("+") + value
}
onValueModified: {
Backend.surface_segment = value
}
}
}
}
TemplateSection {
id: gasoptions
title: qsTr("Gas options")
GridLayout {
columns: 2
rowSpacing: Kirigami.Units.smallSpacing * 2
columnSpacing: Kirigami.Units.smallSpacing
visible: gasoptions.isExpanded
TemplateLabel {
text: qsTr("Bottom SAC")
}
TemplateSpinBox {
id: spinBottomsac
from: 1
to: (Backend.volume === Enums.LITER) ? 85 : 300
stepSize: 1
value: Backend.bottomsac
textFromValue: function (value, locale) {
return (Backend.volume === Enums.LITER) ?
value + volumeUnit :
(value / 100).toFixed(2) + volumeUnit
}
onValueModified: {
Backend.bottomsac = value
}
}
TemplateLabel {
text: qsTr("Deco SAC")
}
TemplateSpinBox {
id: spinDecosac
from: 1
to: (Backend.volume === Enums.LITER) ? 85 : 300
stepSize: 1
value: Backend.decosac
textFromValue: function (value, locale) {
return (Backend.volume === Enums.LITER) ?
value + volumeUnit :
(value / 100).toFixed(2) + volumeUnit
}
onValueModified: {
Backend.decosac = value
}
}
TemplateLabel {
text: qsTr("SAC factor")
}
TemplateSpinBox {
from: 10
to: 99
stepSize: 1
value: Backend.sacfactor
textFromValue: function (value, locale) {
return (value / 10).toFixed(1)
}
onValueModified: {
Backend.sacfactor = value
}
}
TemplateLabel {
text: qsTr("Problem solving time")
}
TemplateSpinBox {
from: 1
to: 9
stepSize: 1
value: Backend.problemsolvingtime
textFromValue: function (value, locale) {
return value + qsTr(" min")
}
onValueModified: {
Backend.problemsolvingtime = value
}
}
TemplateLabel {
text: qsTr("Bottom pO2")
}
TemplateSpinBox {
from: 0
to: 250
stepSize: 1
value: Backend.bottompo2
textFromValue: function (value, locale) {
return (value / 100).toFixed(2) + "bar"
}
onValueModified: {
Backend.bottompo2 = value
}
}
TemplateLabel {
text: qsTr("Deco pO2")
}
TemplateSpinBox {
from: 0
to: 250
stepSize: 1
value: Backend.decopo2
textFromValue: function (value, locale) {
return (value / 100).toFixed(2) + "bar"
}
onValueModified: {
Backend.decopo2 = value
}
}
TemplateLabel {
text: qsTr("Best mix END")
}
TemplateSpinBox {
id: spinBestmixend
from: 1
to: 99
stepSize: 1
value: Backend.bestmixend
textFromValue: function (value, locale) {
return value + speedUnit
}
onValueModified: {
Backend.bestmixend = value
}
}
TemplateCheckBox {
text: qsTr("O2 narcotic")
checked: Backend.o2narcotic
onClicked: {
Backend.o2narcotic = checked
}
}
}
}
TemplateSection {
id: notes
title: qsTr("Notes")
ColumnLayout {
visible: notes.isExpanded
TemplateCheckBox {
text: qsTr("Display runtime")
checked: Backend.display_runtime
onClicked: {
Backend.display_runtime = checked
}
}
TemplateCheckBox {
text: qsTr("Display segment duration")
checked: Backend.display_duration
onClicked: {
Backend.display_duration = checked
}
}
TemplateCheckBox {
text: qsTr("Display transitions in deco")
checked: Backend.display_transitions
onClicked: {
Backend.display_transitions = checked
}
}
TemplateCheckBox {
text: qsTr("Verbatim dive plan")
checked: Backend.verbatim_plan
onClicked: {
Backend.verbatim_plan = checked
}
}
TemplateCheckBox {
text: qsTr("Display plan variations")
checked: Backend.display_variations
onClicked: {
Backend.display_variations = checked
}
}
}
}
}
}