Warning, /utilities/kweather/src/qml/settings/SettingsComponent.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Han Young <hanyoung@protonmail.com>
0003  * SPDX-FileCopyrightText: 2020-2022 Devin Lin <espidev@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 import QtQuick
0009 import QtQuick.Controls
0010 import QtQuick.Layouts
0011 
0012 import org.kde.kirigami as Kirigami
0013 import org.kde.kirigamiaddons.formcard as FormCard
0014 
0015 ColumnLayout {
0016     id: root
0017     property var dialog: null // dialog component if this is within a dialog
0018 
0019     spacing: 0
0020     
0021     signal closeRequested()
0022     
0023     // HACK: dialog switching requires some time between closing and opening
0024     Timer {
0025         id: dialogTimer
0026         interval: 1
0027         property var dialog
0028         onTriggered: {
0029             root.dialog.close();
0030             dialog.open();
0031         }
0032     }
0033 
0034     FormCard.FormHeader {
0035         title: i18n("General")
0036     }
0037     
0038     FormCard.FormCard {
0039         FormCard.FormComboBoxDelegate {
0040             id: forecastStyleDropdown
0041             text: i18n("Forecast Style")
0042             currentIndex: indexOfValue(settingsModel.forecastStyle)
0043             model: ListModel {
0044                 // we can't use i18n with ListElement
0045                 Component.onCompleted: {
0046                     append({"name": i18n("Flat"), "value": "Flat"});
0047                     append({"name": i18n("Dynamic"), "value": "Dynamic"});
0048                     
0049                     // indexOfValue doesn't bind to model changes unfortunately, set currentIndex manually here
0050                     forecastStyleDropdown.currentIndex = forecastStyleDropdown.indexOfValue(settingsModel.forecastStyle)
0051                 }
0052             }
0053             
0054             textRole: "name"
0055             valueRole: "value"
0056             onActivated: settingsModel.save()
0057             onCurrentValueChanged: settingsModel.forecastStyle = currentValue;
0058             
0059             onClicked: {
0060                 if (root.dialog && forecastStyleDropdown.mode === FormCard.FormComboBoxDelegate.Dialog) {
0061                     dialogTimer.dialog = forecastStyleDropdown.dialog;
0062                     dialogTimer.restart();
0063                 }
0064             }
0065             
0066             Connections {
0067                 target: forecastStyleDropdown.dialog
0068                 function onClosed() {
0069                     if (root.dialog) {
0070                         root.dialog.open();
0071                     }
0072                 }
0073             }
0074         }
0075         
0076         FormCard.FormDelegateSeparator { above: forecastStyleDropdown; below: aboutButton }
0077         
0078         FormCard.FormButtonDelegate {
0079             id: aboutButton
0080             text: i18n("About")
0081             onClicked: {
0082                 applicationWindow().pageStack.push(getPage("About"));
0083                 
0084                 if (root.dialog) {
0085                     root.dialog.close();
0086                 }
0087             }
0088         }
0089     }
0090 
0091     FormCard.FormHeader {
0092         title: i18n("Units")
0093     }
0094     
0095     FormCard.FormCard {
0096         FormCard.FormComboBoxDelegate {
0097             id: temperatureUnitsDropdown
0098             text: i18n("Temperature Units")
0099             currentIndex: indexOfValue(settingsModel.temperatureUnits)
0100             model: ListModel {
0101                 // we can't use i18n with ListElement
0102                 Component.onCompleted: {
0103                     append({"name": i18n("Use System Default"), "value": "Use System Default"});
0104                     append({"name": i18n("Celsius"), "value": "Celsius"});
0105                     append({"name": i18n("Fahrenheit"), "value": "Fahrenheit"});
0106                     
0107                     // indexOfValue doesn't bind to model changes unfortunately, set currentIndex manually here
0108                     temperatureUnitsDropdown.currentIndex = temperatureUnitsDropdown.indexOfValue(settingsModel.temperatureUnits)
0109                 }
0110             }
0111             
0112             textRole: "name"
0113             valueRole: "value"
0114             onActivated: settingsModel.save()
0115             onCurrentValueChanged: settingsModel.temperatureUnits = currentValue;
0116             
0117             onClicked: {
0118                 if (root.dialog && temperatureUnitsDropdown.mode === FormCard.FormComboBoxDelegate.Dialog) {
0119                     dialogTimer.dialog = temperatureUnitsDropdown.dialog;
0120                     dialogTimer.restart();
0121                 }
0122             }
0123             
0124             Connections {
0125                 target: temperatureUnitsDropdown.dialog
0126                 function onClosed() {
0127                     if (root.dialog) {
0128                         root.dialog.open();
0129                     }
0130                 }
0131             }
0132         }
0133         
0134         FormCard.FormDelegateSeparator { above: temperatureUnitsDropdown; below: speedUnitsDropdown }
0135         
0136         FormCard.FormComboBoxDelegate {
0137             id: speedUnitsDropdown
0138             text: i18n("Speed Units")
0139             currentIndex: indexOfValue(settingsModel.speedUnits)
0140             model: ListModel {
0141                 // we can't use i18n with ListElement
0142                 Component.onCompleted: {
0143                     append({"name": i18nc("kilometers per hour", "kph"), "value": "kph"});
0144                     append({"name": i18nc("miles per hour", "mph"), "value": "mph"});
0145                     append({"name": i18nc("meters per second", "m/s"), "value": "m/s"});
0146                     
0147                     // indexOfValue doesn't bind to model changes unfortunately, set currentIndex manually here
0148                     speedUnitsDropdown.currentIndex = speedUnitsDropdown.indexOfValue(settingsModel.speedUnits)
0149                 }
0150             }
0151             
0152             textRole: "name"
0153             valueRole: "value"
0154             onActivated: settingsModel.save()
0155             onCurrentValueChanged: settingsModel.speedUnits = currentValue;
0156             
0157             onClicked: {
0158                 if (root.dialog && speedUnitsDropdown.mode === FormCard.FormComboBoxDelegate.Dialog) {
0159                     dialogTimer.dialog = speedUnitsDropdown.dialog;
0160                     dialogTimer.restart();
0161                 }
0162             }
0163             
0164             Connections {
0165                 target: speedUnitsDropdown.dialog
0166                 function onClosed() {
0167                     if (root.dialog) {
0168                         root.dialog.open();
0169                     }
0170                 }
0171             }
0172         }
0173         
0174         FormCard.FormDelegateSeparator { above: speedUnitsDropdown; below: pressureUnitsDropdown }
0175         
0176         FormCard.FormComboBoxDelegate {
0177             id: pressureUnitsDropdown
0178             text: i18n("Pressure Units")
0179             currentIndex: indexOfValue(settingsModel.pressureUnits)
0180             model: ListModel {
0181                 // we can't use i18n with ListElement
0182                 Component.onCompleted: {
0183                     append({"name": i18nc("Hectopascal Pressure", "hPa"), "value": "hPa"});
0184                     append({"name": i18nc("Millimetre of mercury", "mmHg"), "value": "mmHg"});
0185                     
0186                     // indexOfValue doesn't bind to model changes unfortunately, set currentIndex manually here
0187                     pressureUnitsDropdown.currentIndex = pressureUnitsDropdown.indexOfValue(settingsModel.pressureUnits)
0188                 }
0189             }
0190             
0191             textRole: "name"
0192             valueRole: "value"
0193             onActivated: settingsModel.save()
0194             onCurrentValueChanged: settingsModel.pressureUnits = currentValue;
0195             
0196             onClicked: {
0197                 if (root.dialog && pressureUnitsDropdown.mode === FormCard.FormComboBoxDelegate.Dialog) {
0198                     dialogTimer.dialog = pressureUnitsDropdown.dialog;
0199                     dialogTimer.restart();
0200                 }
0201             }
0202             
0203             Connections {
0204                 target: pressureUnitsDropdown.dialog
0205                 function onClosed() {
0206                     if (root.dialog) {
0207                         root.dialog.open();
0208                     }
0209                 }
0210             }
0211         }
0212         
0213         FormCard.FormDelegateSeparator { above: pressureUnitsDropdown; below: precipitationUnitsDropdown }
0214 
0215         // Precipitation
0216         FormCard.FormComboBoxDelegate {
0217             id: precipitationUnitsDropdown
0218             text: i18n("Precipitation Units")
0219             currentIndex: indexOfValue(settingsModel.precipitationUnits)
0220             model: ListModel {
0221                 // we can't use i18n with ListElement
0222                 Component.onCompleted: {
0223                     append({"name": i18nc("Millimeters", "mm"), "value": "mm"});
0224                     append({"name": i18nc("Inches", "in"), "value": "in"});
0225                     
0226                     // indexOfValue doesn't bind to model changes unfortunately, set currentIndex manually here
0227                     precipitationUnitsDropdown.currentIndex = precipitationUnitsDropdown.indexOfValue(settingsModel.precipitationUnits)
0228                 }
0229             }
0230             
0231             textRole: "name"
0232             valueRole: "value"
0233             onActivated: settingsModel.save()
0234             onCurrentValueChanged: settingsModel.precipitationUnits = currentValue;
0235             
0236             onClicked: {
0237                 if (root.dialog && precipitationUnitsDropdown.mode === FormCard.FormComboBoxDelegate.Dialog) {
0238                     dialogTimer.dialog = precipitationUnitsDropdown.dialog;
0239                     dialogTimer.restart();
0240                 }
0241             }
0242 
0243             Connections {
0244                 target: precipitationUnitsDropdown.dialog
0245                 function onClosed() {
0246                     if (root.dialog) {
0247                         root.dialog.open();
0248                     }
0249                 }
0250             }
0251         }
0252     }
0253 }