2017-04-27 18:30:36 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2020-01-15 10:19:53 +00:00
|
|
|
import QtQuick 2.12
|
|
|
|
import QtQuick.Layouts 1.12
|
2020-01-22 19:20:14 +00:00
|
|
|
import QtQuick.Controls 2.12
|
2018-09-27 20:09:26 +00:00
|
|
|
import org.kde.kirigami 2.4 as Kirigami
|
2015-07-10 07:48:28 +00:00
|
|
|
import org.subsurfacedivelog.mobile 1.0
|
|
|
|
|
2020-01-27 21:20:27 +00:00
|
|
|
TemplatePage {
|
2017-07-20 17:39:55 +00:00
|
|
|
objectName: "Settings"
|
2020-03-21 05:54:32 +00:00
|
|
|
title: qsTr("Settings")
|
|
|
|
width: rootItem.colWidth - Kirigami.Units.gridUnit
|
2018-08-20 18:02:54 +00:00
|
|
|
property alias defaultCylinderModel: defaultCylinderBox.model
|
|
|
|
property alias defaultCylinderIndex: defaultCylinderBox.currentIndex
|
2020-03-21 05:54:32 +00:00
|
|
|
property real contentColumeWidth: width - 2 * Kirigami.Units.gridUnit
|
2017-09-27 16:56:24 +00:00
|
|
|
property var describe: [qsTr("Undefined"),
|
|
|
|
qsTr("Incorrect username/password combination"),
|
|
|
|
qsTr("Credentials need to be verified"),
|
|
|
|
qsTr("Credentials verified"),
|
|
|
|
qsTr("No cloud mode")]
|
2020-01-15 18:08:40 +00:00
|
|
|
Column {
|
2020-03-21 05:54:32 +00:00
|
|
|
width: contentColumeWidth
|
2020-01-15 18:08:40 +00:00
|
|
|
TemplateSection {
|
|
|
|
id: sectionGeneral
|
|
|
|
title: qsTr("General settings")
|
|
|
|
isExpanded: true
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:08:40 +00:00
|
|
|
|
2020-01-15 18:26:56 +00:00
|
|
|
GridLayout {
|
|
|
|
id: cloudSetting
|
|
|
|
visible: sectionGeneral.isExpanded
|
|
|
|
columns: 3
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:26:56 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Cloud status")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 3
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Email")
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: Backend.cloud_verification_status === Enums.CS_NOCLOUD ? qsTr("Not applicable") : PrefCloudStorage.cloud_storage_email
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-15 18:26:56 +00:00
|
|
|
}
|
2019-02-11 16:09:51 +00:00
|
|
|
TemplateButton {
|
2020-01-15 18:26:56 +00:00
|
|
|
id: changeCloudSettings
|
|
|
|
text: qsTr("Change")
|
|
|
|
onClicked: {
|
|
|
|
Backend.cloud_verification_status = Enums.CS_UNKNOWN
|
|
|
|
manager.startPageText = qsTr("Starting...");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Status")
|
|
|
|
Layout.preferredHeight: Kirigami.Units.gridUnit * 1.5
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: describe[Backend.cloud_verification_status]
|
|
|
|
Layout.preferredHeight: Kirigami.Units.gridUnit * 1.5
|
2017-09-27 16:56:24 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-15 18:34:13 +00:00
|
|
|
TemplateLine {
|
|
|
|
visible: sectionGeneral.isExpanded
|
|
|
|
}
|
|
|
|
GridLayout {
|
|
|
|
id: defaultCylinder
|
|
|
|
visible: sectionGeneral.isExpanded
|
|
|
|
columns: 2
|
2020-02-07 00:09:47 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:34:13 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Default Cylinder")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Cylinder:")
|
|
|
|
}
|
2021-01-11 17:59:43 +00:00
|
|
|
TemplateSlimComboBox {
|
2020-01-15 18:34:13 +00:00
|
|
|
id: defaultCylinderBox
|
2020-02-07 00:09:47 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-15 18:34:13 +00:00
|
|
|
onActivated: {
|
2020-01-20 17:29:05 +00:00
|
|
|
// the entry for 'no default cylinder' is known to be the top, but its text
|
|
|
|
// is possibly translated so check against the index
|
|
|
|
if (currentIndex === 0)
|
|
|
|
PrefEquipment.default_cylinder = ""
|
|
|
|
else
|
|
|
|
PrefEquipment.default_cylinder = defaultCylinderBox.currentText
|
2020-01-15 18:34:13 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-01-15 18:36:38 +00:00
|
|
|
TemplateLine {
|
|
|
|
visible: sectionGeneral.isExpanded
|
|
|
|
}
|
|
|
|
GridLayout {
|
|
|
|
id: divecomputers
|
|
|
|
visible: sectionGeneral.isExpanded
|
|
|
|
columns: 2
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:36:38 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Dive computers")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Forget remembered dive computers")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-15 18:36:38 +00:00
|
|
|
}
|
2019-02-11 16:09:51 +00:00
|
|
|
TemplateButton {
|
2020-01-15 18:36:38 +00:00
|
|
|
id: forgetDCButton
|
|
|
|
text: qsTr("Forget")
|
|
|
|
enabled: PrefDiveComputer.vendor1 !== ""
|
|
|
|
onClicked: {
|
|
|
|
PrefDiveComputer.vendor1 = PrefDiveComputer.product1 = PrefDiveComputer.device1 = ""
|
|
|
|
PrefDiveComputer.vendor2 = PrefDiveComputer.product2 = PrefDiveComputer.device2 = ""
|
|
|
|
PrefDiveComputer.vendor3 = PrefDiveComputer.product3 = PrefDiveComputer.device3 = ""
|
|
|
|
PrefDiveComputer.vendor4 = PrefDiveComputer.product4 = PrefDiveComputer.device4 = ""
|
|
|
|
PrefDiveComputer.vendor = PrefDiveComputer.product = PrefDiveComputer.device = ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-09-27 16:56:24 +00:00
|
|
|
|
2020-03-21 05:54:32 +00:00
|
|
|
}
|
2020-01-15 18:42:16 +00:00
|
|
|
TemplateSection {
|
|
|
|
id: sectionTheme
|
|
|
|
title: qsTr("Theme")
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:42:16 +00:00
|
|
|
GridLayout {
|
|
|
|
visible: sectionTheme.isExpanded
|
2020-01-27 22:12:40 +00:00
|
|
|
columns: 2
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Color theme")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2021-01-11 17:59:43 +00:00
|
|
|
TemplateSlimComboBox {
|
2020-01-27 22:12:40 +00:00
|
|
|
editable: false
|
|
|
|
Layout.columnSpan: 2
|
2020-01-15 08:40:54 +00:00
|
|
|
currentIndex: (subsurfaceTheme.currentTheme === "Blue") ? 0 :
|
|
|
|
(subsurfaceTheme.currentTheme === "Pink") ? 1 : 2
|
2020-01-27 22:12:40 +00:00
|
|
|
model: ListModel {
|
|
|
|
ListElement {text: qsTr("Blue")}
|
|
|
|
ListElement {text: qsTr("Pink")}
|
|
|
|
ListElement {text: qsTr("Dark")}
|
|
|
|
}
|
|
|
|
onActivated: {
|
2020-02-06 16:29:37 +00:00
|
|
|
subsurfaceTheme.currentTheme = currentIndex === 0 ? "Blue" : currentIndex === 1 ? "Pink" : "Dark"
|
2020-01-27 22:12:40 +00:00
|
|
|
}
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
color: subsurfaceTheme.backgroundColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("background")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.textColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2017-07-10 03:53:16 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
}
|
|
|
|
Rectangle {
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.backgroundColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("text")
|
|
|
|
color: subsurfaceTheme.textColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2017-06-24 01:08:47 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
|
|
|
color: subsurfaceTheme.primaryColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("primary")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.primaryTextColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2017-07-10 03:53:16 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.primaryTextColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
2020-02-06 16:28:27 +00:00
|
|
|
text: qsTr("primary text")
|
|
|
|
color: subsurfaceTheme.primaryColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
|
|
|
color: subsurfaceTheme.darkerPrimaryColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("darker primary")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.darkerPrimaryTextColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2017-06-24 01:08:47 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.darkerPrimaryTextColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
2020-02-06 16:28:27 +00:00
|
|
|
text: qsTr("darker primary text")
|
|
|
|
color: subsurfaceTheme.darkerPrimaryColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2017-06-24 01:08:47 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
|
|
|
color: subsurfaceTheme.lightPrimaryColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("light primary")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.lightPrimaryTextColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.lightPrimaryTextColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
2020-02-06 16:28:27 +00:00
|
|
|
text: qsTr("light primary text")
|
|
|
|
color: subsurfaceTheme.lightPrimaryColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2017-07-10 03:53:16 +00:00
|
|
|
}
|
2020-01-15 18:42:16 +00:00
|
|
|
TemplateLabel {
|
2020-01-27 22:12:40 +00:00
|
|
|
text: ""
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.secondaryTextColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("secondary text")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.primaryColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2017-06-24 01:08:47 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-27 22:12:40 +00:00
|
|
|
Rectangle {
|
|
|
|
border.width: 2
|
|
|
|
border.color: "black"
|
|
|
|
color: subsurfaceTheme.drawerColor
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.preferredHeight: 2 * Kirigami.Units.gridUnit
|
2020-01-27 22:12:40 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("drawer")
|
2020-02-06 16:28:27 +00:00
|
|
|
color: subsurfaceTheme.textColor
|
2020-02-06 16:17:54 +00:00
|
|
|
colorBackground: parent.color
|
2020-01-27 22:12:40 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
2018-09-23 01:01:45 +00:00
|
|
|
}
|
|
|
|
}
|
2020-01-15 18:42:16 +00:00
|
|
|
TemplateLabel {
|
2020-01-27 22:12:40 +00:00
|
|
|
text: ""
|
2018-09-23 01:01:45 +00:00
|
|
|
}
|
2020-03-21 05:54:32 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Font size")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2021-01-15 19:50:12 +00:00
|
|
|
Flow {
|
2020-02-06 16:31:23 +00:00
|
|
|
Layout.columnSpan: 2
|
2020-01-15 18:42:16 +00:00
|
|
|
spacing: Kirigami.Units.largeSpacing
|
2019-02-11 16:09:51 +00:00
|
|
|
TemplateButton {
|
2021-01-15 19:50:12 +00:00
|
|
|
text: qsTr("very small")
|
|
|
|
fontSize: subsurfaceTheme.regularPointSize / subsurfaceTheme.currentScale * 0.75
|
|
|
|
enabled: subsurfaceTheme.currentScale !== 0.75
|
|
|
|
onClicked: {
|
|
|
|
subsurfaceTheme.currentScale = 0.75
|
|
|
|
rootItem.setupUnits()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateButton {
|
|
|
|
text: qsTr("small")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2021-01-15 19:50:12 +00:00
|
|
|
fontSize: subsurfaceTheme.regularPointSize / subsurfaceTheme.currentScale * 0.85
|
2020-02-06 16:30:39 +00:00
|
|
|
enabled: subsurfaceTheme.currentScale !== 0.85
|
2020-01-15 18:42:16 +00:00
|
|
|
onClicked: {
|
2020-02-06 16:30:39 +00:00
|
|
|
subsurfaceTheme.currentScale = 0.85
|
mobile/UI: correctly scale UI without restart
The fact that the rescaling in the settings gave different results from
what we got after a restart really should have been a dead giveaway that
the code was fundamentally flawed.
With this, if the user picks smaller, regular, or larger they now always
get the same, consistent values for gridUnit and font sizes.
This also gives up on the idea that we can just force the gridUnit to be
smaller to make things work if the font (which drives the gridUnit) is
too big for a screen. That fundamentally cannot work and gives a
horrible UI experience. So instead simply warn the user and continue
with matching font / gridUnit, which will still give a bad experience,
but at least we told the user about it and didn't pretend this was ok or
fixable.
Finally, this gets the factors right when switching from smaller to
larger or back, without stopping at regular on the way.
One odd side effect of this code is that under certain conditions
(number of columns changes) the display window when running mobile on
desktop will resize. That's kind of odd, but as that is not /really/ our
target platform, for now I'd consider it acceptable. But it does deserve
more investigation.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-14 12:08:48 +00:00
|
|
|
rootItem.setupUnits()
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
|
|
|
}
|
2019-02-11 16:09:51 +00:00
|
|
|
TemplateButton {
|
2020-01-15 18:42:16 +00:00
|
|
|
text: qsTr("regular")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2021-01-15 19:50:12 +00:00
|
|
|
fontSize: subsurfaceTheme.regularPointSize / subsurfaceTheme.currentScale * 0.85
|
2020-02-06 16:30:39 +00:00
|
|
|
enabled: subsurfaceTheme.currentScale !== 1.0
|
2020-01-15 18:42:16 +00:00
|
|
|
onClicked: {
|
2020-02-06 16:30:39 +00:00
|
|
|
subsurfaceTheme.currentScale = 1.0
|
mobile/UI: correctly scale UI without restart
The fact that the rescaling in the settings gave different results from
what we got after a restart really should have been a dead giveaway that
the code was fundamentally flawed.
With this, if the user picks smaller, regular, or larger they now always
get the same, consistent values for gridUnit and font sizes.
This also gives up on the idea that we can just force the gridUnit to be
smaller to make things work if the font (which drives the gridUnit) is
too big for a screen. That fundamentally cannot work and gives a
horrible UI experience. So instead simply warn the user and continue
with matching font / gridUnit, which will still give a bad experience,
but at least we told the user about it and didn't pretend this was ok or
fixable.
Finally, this gets the factors right when switching from smaller to
larger or back, without stopping at regular on the way.
One odd side effect of this code is that under certain conditions
(number of columns changes) the display window when running mobile on
desktop will resize. That's kind of odd, but as that is not /really/ our
target platform, for now I'd consider it acceptable. But it does deserve
more investigation.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-14 12:08:48 +00:00
|
|
|
rootItem.setupUnits()
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
|
|
|
}
|
2019-02-11 16:09:51 +00:00
|
|
|
TemplateButton {
|
2021-01-15 19:50:12 +00:00
|
|
|
text: qsTr("large")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2021-01-15 19:50:12 +00:00
|
|
|
fontSize: subsurfaceTheme.regularPointSize / subsurfaceTheme.currentScale * 1.15
|
2020-02-06 16:30:39 +00:00
|
|
|
enabled: subsurfaceTheme.currentScale !== 1.15
|
2020-01-15 18:42:16 +00:00
|
|
|
onClicked: {
|
2020-02-06 16:30:39 +00:00
|
|
|
subsurfaceTheme.currentScale = 1.15
|
mobile/UI: correctly scale UI without restart
The fact that the rescaling in the settings gave different results from
what we got after a restart really should have been a dead giveaway that
the code was fundamentally flawed.
With this, if the user picks smaller, regular, or larger they now always
get the same, consistent values for gridUnit and font sizes.
This also gives up on the idea that we can just force the gridUnit to be
smaller to make things work if the font (which drives the gridUnit) is
too big for a screen. That fundamentally cannot work and gives a
horrible UI experience. So instead simply warn the user and continue
with matching font / gridUnit, which will still give a bad experience,
but at least we told the user about it and didn't pretend this was ok or
fixable.
Finally, this gets the factors right when switching from smaller to
larger or back, without stopping at regular on the way.
One odd side effect of this code is that under certain conditions
(number of columns changes) the display window when running mobile on
desktop will resize. That's kind of odd, but as that is not /really/ our
target platform, for now I'd consider it acceptable. But it does deserve
more investigation.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2021-01-14 12:08:48 +00:00
|
|
|
rootItem.setupUnits()
|
2020-01-15 18:42:16 +00:00
|
|
|
}
|
2018-09-23 01:01:45 +00:00
|
|
|
}
|
2021-01-15 19:50:12 +00:00
|
|
|
TemplateButton {
|
|
|
|
text: qsTr("very large")
|
|
|
|
Layout.fillWidth: true
|
|
|
|
fontSize: subsurfaceTheme.regularPointSize / subsurfaceTheme.currentScale * 1.3
|
|
|
|
enabled: subsurfaceTheme.currentScale !== 1.3
|
|
|
|
onClicked: {
|
|
|
|
subsurfaceTheme.currentScale = 1.3
|
|
|
|
rootItem.setupUnits()
|
|
|
|
}
|
|
|
|
}
|
2018-09-23 01:01:45 +00:00
|
|
|
}
|
|
|
|
}
|
2017-06-24 01:08:47 +00:00
|
|
|
}
|
2020-01-15 18:46:48 +00:00
|
|
|
TemplateSection {
|
|
|
|
id: sectionUnits
|
|
|
|
title: qsTr("Units")
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
|
|
|
RowLayout {
|
2020-01-22 19:20:14 +00:00
|
|
|
visible: sectionUnits.isExpanded
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-22 17:35:20 +00:00
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("Metric")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-22 17:35:20 +00:00
|
|
|
checked: (Backend.unit_system === Enums.METRIC)
|
|
|
|
onClicked: {
|
|
|
|
Backend.unit_system = Enums.METRIC
|
|
|
|
manager.changesNeedSaving()
|
|
|
|
manager.refreshDiveList()
|
|
|
|
}
|
2020-01-15 18:46:48 +00:00
|
|
|
}
|
2020-01-22 17:35:20 +00:00
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("Imperial")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-22 17:35:20 +00:00
|
|
|
checked: (Backend.unit_system === Enums.IMPERIAL)
|
2020-01-15 18:46:48 +00:00
|
|
|
onClicked: {
|
2020-01-19 09:06:51 +00:00
|
|
|
Backend.unit_system = Enums.IMPERIAL
|
2020-01-15 18:46:48 +00:00
|
|
|
manager.changesNeedSaving()
|
|
|
|
manager.refreshDiveList()
|
|
|
|
}
|
|
|
|
}
|
2020-01-22 17:35:20 +00:00
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("Personalize")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-22 17:35:20 +00:00
|
|
|
checked: (Backend.unit_system === Enums.PERSONALIZE)
|
2020-01-15 18:46:48 +00:00
|
|
|
onClicked: {
|
2020-01-22 17:35:20 +00:00
|
|
|
Backend.unit_system = Enums.PERSONALIZE
|
2020-01-15 18:46:48 +00:00
|
|
|
manager.changesNeedSaving()
|
|
|
|
manager.refreshDiveList()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-01-22 19:20:14 +00:00
|
|
|
|
|
|
|
GridLayout {
|
|
|
|
visible: sectionUnits.isExpanded
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width - 2 * Kirigami.Units.gridUnit
|
2020-01-22 19:20:14 +00:00
|
|
|
enabled: (Backend.unit_system === Enums.PERSONALIZE)
|
2020-03-21 05:54:32 +00:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
2020-01-22 19:20:14 +00:00
|
|
|
columns: 3
|
|
|
|
|
|
|
|
ButtonGroup { id: unitDepth }
|
|
|
|
ButtonGroup { id: unitPressure }
|
|
|
|
ButtonGroup { id: unitVolume }
|
|
|
|
ButtonGroup { id: unitTemperature }
|
|
|
|
ButtonGroup { id: unitWeight }
|
|
|
|
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Depth")
|
|
|
|
font.bold: (Backend.unit_system === Enums.PERSONALIZE)
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("meters")
|
|
|
|
checked: (Backend.length === Enums.METERS)
|
|
|
|
ButtonGroup.group: unitDepth
|
|
|
|
onClicked: {
|
|
|
|
Backend.length = Enums.METERS
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("feet")
|
|
|
|
checked: (Backend.length === Enums.FEET)
|
|
|
|
ButtonGroup.group: unitDepth
|
|
|
|
onClicked: {
|
|
|
|
Backend.length = Enums.FEET
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Pressure")
|
|
|
|
font.bold: (Backend.unit_system === Enums.PERSONALIZE)
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("bar")
|
|
|
|
checked: (Backend.pressure === Enums.BAR)
|
|
|
|
ButtonGroup.group: unitPressure
|
|
|
|
onClicked: {
|
|
|
|
Backend.pressure = Enums.BAR
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("psi")
|
|
|
|
checked: (Backend.pressure === Enums.PSI)
|
|
|
|
ButtonGroup.group: unitPressure
|
|
|
|
onClicked: {
|
|
|
|
Backend.pressure = Enums.PSI
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Volume")
|
|
|
|
font.bold: (Backend.unit_system === Enums.PERSONALIZE)
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("liter")
|
|
|
|
checked: (Backend.volume === Enums.LITER)
|
|
|
|
ButtonGroup.group: unitVolume
|
|
|
|
onClicked: {
|
|
|
|
Backend.volume = Enums.LITER
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("cuft")
|
|
|
|
checked: (Backend.volume === Enums.CUFT)
|
|
|
|
ButtonGroup.group: unitVolume
|
|
|
|
onClicked: {
|
|
|
|
Backend.volume = Enums.CUFT
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Temperature")
|
|
|
|
font.bold: (Backend.unit_system === Enums.PERSONALIZE)
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
2020-02-09 14:36:58 +00:00
|
|
|
text: qsTr("celsius")
|
2020-01-22 19:20:14 +00:00
|
|
|
checked: (Backend.temperature === Enums.CELSIUS)
|
|
|
|
ButtonGroup.group: unitTemperature
|
|
|
|
onClicked: {
|
|
|
|
Backend.temperature = Enums.CELSIUS
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("fahrenheit")
|
|
|
|
checked: (Backend.temperature === Enums.FAHRENHEIT)
|
|
|
|
ButtonGroup.group: unitTemperature
|
|
|
|
onClicked: {
|
|
|
|
Backend.temperature = Enums.FAHRENHEIT
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Weight")
|
|
|
|
font.bold: (Backend.unit_system === Enums.PERSONALIZE)
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("kg")
|
|
|
|
checked: (Backend.weight === Enums.KG)
|
|
|
|
ButtonGroup.group: unitWeight
|
|
|
|
onClicked: {
|
|
|
|
Backend.weight = Enums.KG
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateRadioButton {
|
|
|
|
text: qsTr("lbs")
|
|
|
|
checked: (Backend.weight === Enums.LBS)
|
|
|
|
ButtonGroup.group: unitWeight
|
|
|
|
onClicked: {
|
|
|
|
Backend.weight = Enums.LBS
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-07-20 17:39:55 +00:00
|
|
|
}
|
2020-01-15 18:46:48 +00:00
|
|
|
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateSection {
|
|
|
|
id: sectionAdvanced
|
|
|
|
title: qsTr("Advanced")
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2015-11-14 01:14:22 +00:00
|
|
|
|
2020-01-15 18:55:16 +00:00
|
|
|
GridLayout {
|
|
|
|
id: gpsPrefs
|
|
|
|
visible: sectionAdvanced.isExpanded
|
2020-03-21 05:54:32 +00:00
|
|
|
width: parent.width
|
2020-01-15 18:55:16 +00:00
|
|
|
columns: 2
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("GPS location service")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
2017-07-20 19:53:42 +00:00
|
|
|
}
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Distance threshold (meters)")
|
2017-07-20 19:53:42 +00:00
|
|
|
}
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateTextField {
|
|
|
|
id: distanceThreshold
|
2021-01-16 01:14:07 +00:00
|
|
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 2
|
2020-01-15 18:55:16 +00:00
|
|
|
text: PrefLocationService.distance_threshold
|
|
|
|
onEditingFinished: {
|
|
|
|
PrefLocationService.distance_threshold = distanceThreshold.text
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Time threshold (minutes)")
|
|
|
|
}
|
|
|
|
TemplateTextField {
|
|
|
|
id: timeThreshold
|
2021-01-16 01:14:07 +00:00
|
|
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 2
|
2020-01-15 18:55:16 +00:00
|
|
|
text: PrefLocationService.time_threshold / 60
|
|
|
|
onEditingFinished: {
|
|
|
|
PrefLocationService.time_threshold = timeThreshold.text * 60
|
|
|
|
}
|
2018-10-20 01:15:00 +00:00
|
|
|
}
|
2021-01-16 01:14:07 +00:00
|
|
|
|
|
|
|
TemplateLine {
|
|
|
|
visible: sectionAdvanced.isExpanded
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Bluetooth")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
2019-02-14 06:48:50 +00:00
|
|
|
}
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Temporarily show all bluetooth devices \neven if not recognized as dive computers.\nPlease report DCs that need this setting")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-15 18:55:16 +00:00
|
|
|
}
|
|
|
|
SsrfSwitch {
|
|
|
|
id: nonDCButton
|
|
|
|
checked: manager.showNonDiveComputers
|
|
|
|
onClicked: {
|
|
|
|
manager.showNonDiveComputers = checked
|
|
|
|
}
|
|
|
|
}
|
2021-01-16 01:14:07 +00:00
|
|
|
|
|
|
|
TemplateLine {
|
|
|
|
visible: sectionAdvanced.isExpanded
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2020-02-08 19:09:30 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Display")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Show only one column in Portrait mode")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-02-08 19:09:30 +00:00
|
|
|
}
|
|
|
|
SsrfSwitch {
|
|
|
|
id: singleColumnButton
|
|
|
|
checked: PrefDisplay.singleColumnPortrait
|
|
|
|
onClicked: {
|
|
|
|
PrefDisplay.singleColumnPortrait = checked
|
|
|
|
}
|
|
|
|
}
|
2021-01-16 01:14:07 +00:00
|
|
|
TemplateLine {
|
|
|
|
visible: sectionAdvanced.isExpanded
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2021-01-10 23:50:17 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Profile deco ceiling")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Show DC reported ceiling")
|
|
|
|
}
|
|
|
|
SsrfSwitch {
|
|
|
|
checked: PrefTechnicalDetails.dcceiling
|
|
|
|
onClicked: {
|
|
|
|
PrefTechnicalDetails.dcceiling = checked
|
2021-01-19 15:50:08 +00:00
|
|
|
rootItem.settingsChanged()
|
2021-01-10 23:50:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Show calculated ceiling")
|
|
|
|
}
|
|
|
|
SsrfSwitch {
|
|
|
|
checked: PrefTechnicalDetails.calcceiling
|
|
|
|
onClicked: {
|
|
|
|
PrefTechnicalDetails.calcceiling = checked
|
|
|
|
rootItem.settingsChanged()
|
|
|
|
}
|
|
|
|
}
|
2021-01-19 15:50:08 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("GFLow")
|
|
|
|
}
|
|
|
|
TemplateTextField {
|
|
|
|
id: gfLow
|
2021-01-16 01:14:07 +00:00
|
|
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 2
|
2021-01-19 15:50:08 +00:00
|
|
|
text: PrefTechnicalDetails.gflow
|
|
|
|
inputMask: "99"
|
|
|
|
onEditingFinished: {
|
|
|
|
PrefTechnicalDetails.gflow = gfLow.text
|
|
|
|
rootItem.settingsChanged()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("GFHigh")
|
|
|
|
}
|
|
|
|
TemplateTextField {
|
|
|
|
id: gfHigh
|
2021-01-16 01:14:07 +00:00
|
|
|
Layout.preferredWidth: Kirigami.Units.gridUnit * 2
|
2021-01-19 15:50:08 +00:00
|
|
|
text: PrefTechnicalDetails.gfhigh
|
|
|
|
inputMask: "99"
|
|
|
|
onEditingFinished: {
|
|
|
|
PrefTechnicalDetails.gfhigh = gfHigh.text
|
|
|
|
rootItem.settingsChanged()
|
|
|
|
}
|
|
|
|
}
|
2021-01-16 01:14:07 +00:00
|
|
|
TemplateLine {
|
|
|
|
visible: sectionAdvanced.isExpanded
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
2020-01-15 18:55:16 +00:00
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Developer")
|
|
|
|
font.pointSize: subsurfaceTheme.headingPointSize
|
|
|
|
font.weight: Font.Light
|
|
|
|
Layout.topMargin: Kirigami.Units.largeSpacing
|
|
|
|
Layout.bottomMargin: Kirigami.Units.largeSpacing / 2
|
|
|
|
Layout.columnSpan: 2
|
|
|
|
}
|
|
|
|
TemplateLabel {
|
|
|
|
text: qsTr("Display Developer menu")
|
2020-03-21 05:54:32 +00:00
|
|
|
Layout.fillWidth: true
|
2020-01-15 18:55:16 +00:00
|
|
|
}
|
|
|
|
SsrfSwitch {
|
|
|
|
id: developerButton
|
|
|
|
checked: PrefDisplay.show_developer
|
|
|
|
onClicked: {
|
|
|
|
PrefDisplay.show_developer = checked
|
|
|
|
}
|
2017-08-03 22:30:32 +00:00
|
|
|
}
|
2017-07-19 14:35:46 +00:00
|
|
|
}
|
|
|
|
}
|
2017-07-10 01:47:18 +00:00
|
|
|
}
|
2015-07-10 07:48:28 +00:00
|
|
|
}
|