Warning, /plasma/plasma-mobile/kcms/time/ui/main.qml is written in an unsupported language. File is not indexed.
0001 // -*- coding: iso-8859-1 -*-
0002 /*
0003 * SPDX-FileCopyrightText: 2011 Sebastian Kügler <sebas@kde.org>
0004 * SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0005 *
0006 * SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008
0009 import QtQuick
0010 import QtQuick.Layouts
0011 import QtQuick.Controls as Controls
0012
0013 import org.kde.kirigami as Kirigami
0014 import org.kde.kcmutils
0015 import org.kde.timesettings
0016 import org.kde.kirigamiaddons.formcard 1 as FormCard
0017 import org.kde.kirigamiaddons.delegates 1 as Delegates
0018
0019 SimpleKCM {
0020 id: timeModule
0021
0022 leftPadding: 0
0023 rightPadding: 0
0024 topPadding: 0
0025 bottomPadding: 0
0026
0027 ColumnLayout {
0028 spacing: 0
0029
0030 FormCard.FormHeader {
0031 title: i18n("Display")
0032 }
0033
0034 FormCard.FormCard {
0035 FormCard.FormSwitchDelegate {
0036 id: hourFormatSwitch
0037 text: i18n("24-Hour Format")
0038 description: i18n("Whether to use a 24-hour format for clocks.")
0039 checked: kcm.twentyFour
0040 onCheckedChanged: {
0041 kcm.twentyFour = checked
0042 }
0043 }
0044
0045 FormCard.FormDelegateSeparator { above: hourFormatSwitch; below: timeZoneSelect }
0046
0047 FormCard.FormButtonDelegate {
0048 id: timeZoneSelect
0049 text: i18n("Timezone")
0050 description: kcm.timeZone
0051 onClicked: timeZonePickerDialog.open()
0052 }
0053 }
0054
0055 FormCard.FormHeader {
0056 title: i18n("Time and Date")
0057 }
0058
0059 FormCard.FormCard {
0060 FormCard.FormSwitchDelegate {
0061 id: ntpCheckBox
0062 text: i18n("Automatic Time Synchronization")
0063 description: i18n("Whether to set the time automatically.")
0064 checked: kcm.useNtp
0065 onCheckedChanged: {
0066 kcm.useNtp = checked
0067 if (!checked) {
0068 kcm.ntpServer = "";
0069 kcm.saveTime();
0070 }
0071 }
0072 }
0073
0074 FormCard.FormDelegateSeparator { above: ntpCheckBox; below: timeSelect }
0075
0076 FormCard.FormButtonDelegate {
0077 id: timeSelect
0078 enabled: !ntpCheckBox.checked
0079 icon.name: "clock"
0080 text: i18n("System Time")
0081 description: Qt.formatTime(kcm.currentTime, kcm.twentyFour ? 'hh:mm' : 'hh:mm ap')
0082 onClicked: timePickerDialog.open()
0083 }
0084
0085 FormCard.FormDelegateSeparator { above: timeSelect; below: dateSelect }
0086
0087 FormCard.FormButtonDelegate {
0088 id: dateSelect
0089 text: i18n("System Date")
0090 description: Qt.formatDate(kcm.currentDate, Locale.LongFormat)
0091 icon.name: "view-calendar"
0092 enabled: !ntpCheckBox.checked
0093 onClicked: datePickerDialog.open()
0094 }
0095 }
0096 }
0097
0098 data: [
0099 Kirigami.Dialog {
0100 id: timeZonePickerDialog
0101 title: i18nc("@title:window", "Pick Timezone")
0102 standardButtons: Kirigami.Dialog.Ok | Kirigami.Dialog.Cancel
0103
0104 property string selectedTimeZoneId
0105
0106 onOpened: {
0107 selectedTimeZoneId = kcm.timeZone;
0108 }
0109
0110 onAccepted: {
0111 kcm.saveTimeZone(selectedTimeZoneId)
0112 }
0113
0114 ListView {
0115 id: listView
0116 headerPositioning: ListView.OverlayHeader
0117 implicitWidth: 18 * Kirigami.Units.gridUnit
0118 implicitHeight: 18 * Kirigami.Units.gridUnit
0119
0120 header: Controls.Control {
0121 z: 1
0122
0123 topPadding: Kirigami.Units.smallSpacing
0124 bottomPadding: 0
0125 leftPadding: Kirigami.Units.smallSpacing
0126 rightPadding: Kirigami.Units.smallSpacing
0127
0128 background: Rectangle {
0129 color: Kirigami.Theme.backgroundColor
0130 }
0131
0132 contentItem: ColumnLayout {
0133 spacing: Kirigami.Units.smallSpacing
0134 Kirigami.SearchField {
0135 Layout.fillWidth: true
0136 onTextChanged: kcm.timeZonesModel.filterString = text
0137 }
0138 Kirigami.Separator { Layout.fillWidth: true }
0139 }
0140 }
0141
0142 model: kcm.timeZonesModel
0143 delegate: Controls.RadioDelegate {
0144 z: -1
0145 width: ListView.view.width
0146 checked: timeZonePickerDialog.selectedTimeZoneId == model.timeZoneId
0147
0148 text: {
0149 if (model.region) {
0150 return "%1 / %2".arg(model.region).arg(model.city);
0151 } else {
0152 return model.city;
0153 }
0154 }
0155
0156 onClicked: {
0157 timeZonePickerDialog.selectedTimeZoneId = model.timeZoneId;
0158 checked = Qt.binding(() => timeZonePickerDialog.selectedTimeZoneId == model.timeZoneId);
0159 console.log(timeZonePickerDialog.selectedTimeZoneId + ' ' + model.timeZoneId + ' ' + (timeZonePickerDialog.selectedTimeZoneId == model.timeZoneId));
0160 }
0161 }
0162 }
0163 },
0164
0165 Kirigami.PromptDialog {
0166 id: datePickerDialog
0167 title: i18n("Pick System Date")
0168 topPadding: Kirigami.Units.largeSpacing
0169 bottomPadding: Kirigami.Units.largeSpacing
0170 preferredWidth: Kirigami.Units.gridUnit * 15
0171 preferredHeight: Kirigami.Units.gridUnit * 13
0172
0173 standardButtons: Kirigami.Dialog.Save | Kirigami.Dialog.Cancel
0174
0175 onAccepted: {
0176 kcm.currentDate = datePicker.isoDate;
0177 kcm.saveTime();
0178 }
0179
0180 onOpened: {
0181 let date = new Date(kcm.currentDate)
0182 datePicker.day = date.getDate();
0183 datePicker.month = date.getMonth() + 1;
0184 datePicker.year = date.getFullYear();
0185 }
0186
0187 DatePicker {
0188 id: datePicker
0189 implicitHeight: Kirigami.Units.gridUnit * 6
0190
0191 Connections {
0192 target: kcm
0193 function onCurrentDateChanged() {
0194 if (datePickerDialog.visible) {
0195 return;
0196 }
0197
0198 let date = new Date(kcm.currentDate);
0199 datePicker.day = date.getDate();
0200 datePicker.month = date.getMonth() + 1;
0201 datePicker.year = date.getFullYear();
0202 }
0203 }
0204 }
0205 },
0206
0207 Kirigami.PromptDialog {
0208 id: timePickerDialog
0209 title: i18n("Pick System Time")
0210 preferredWidth: Kirigami.Units.gridUnit * 15
0211 topPadding: Kirigami.Units.largeSpacing
0212 bottomPadding: Kirigami.Units.largeSpacing
0213
0214 standardButtons: Kirigami.Dialog.Save | Kirigami.Dialog.Cancel
0215
0216 onAccepted: {
0217 kcm.currentTime = String(timePicker.hours).padStart(2, '0')
0218 + ':'
0219 + String(timePicker.minutes).padStart(2, '0')
0220 + ':00';
0221 kcm.saveTime();
0222 }
0223
0224 onOpened: {
0225 var date = new Date(kcm.currentTime);
0226 timePicker.hours = date.getHours();
0227 timePicker.minutes = date.getMinutes();
0228 console.log(date + ' ' + date.getHours() + date.getMinutes())
0229 }
0230
0231 TimePicker {
0232 id: timePicker
0233
0234 Connections {
0235 target: kcm
0236 function onCurrentTimeChanged() {
0237 if (timePicker.userConfiguring) {
0238 return;
0239 }
0240
0241 var date = new Date(kcm.currentTime);
0242 timePicker.hours = date.getHours();
0243 timePicker.minutes = date.getMinutes();
0244 }
0245 }
0246 }
0247 }
0248 ]
0249 }