Warning, /plasma/plasma-mobile/kcms/time/ui/TimePicker.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2021-2023 Devin Lin <devin@kde.org>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 import QtQuick
0005 import QtQuick.Controls
0006 import QtQuick.Layouts
0007 
0008 import org.kde.kcmutils
0009 import org.kde.kirigami as Kirigami
0010 
0011 RowLayout {
0012     id: root
0013     
0014     property int hours: 0
0015     property int minutes: 0
0016     readonly property bool twelveHourTime: !kcm.twentyFour // am/pm
0017     
0018     onHoursChanged: updateHours()
0019     onMinutesChanged: minutesSpinbox.value = minutes
0020     onTwelveHourTimeChanged: updateHours()
0021 
0022     Component.onCompleted: {
0023         // needs to manually be triggered because onHoursChanged doesn't emit when set to 0
0024         updateHours();
0025     }
0026 
0027     function updateHours() {
0028         // manually do this instead of a binding so we can set the value without worrying about binding eval order
0029         hoursSpinbox.from = root.twelveHourTime ? 1 : 0;
0030         hoursSpinbox.to = root.twelveHourTime ? 12 : 23;
0031 
0032         if (twelveHourTime) {
0033             hoursSpinbox.value = ((hours % 12) == 0) ? 12 : hours % 12;
0034         } else {
0035             hoursSpinbox.value = hours;
0036         }
0037     }
0038     
0039     RowLayout {
0040         spacing: Kirigami.Units.largeSpacing
0041         Layout.alignment: Qt.AlignHCenter
0042 
0043         // note: for 12-hour time, we have hours from 1-12 (0'o clock displays as 12)
0044         //       for 24-hour time, we have hours from 0-23
0045         TimePickerSpinBox {
0046             id: hoursSpinbox
0047             
0048             onValueModified: {
0049                 if (root.twelveHourTime) {
0050                     if (root.hours >= 12) {
0051                         root.hours = value % 12 + 12;
0052                     } else {
0053                         root.hours = value % 12;
0054                     }
0055                 } else {
0056                     root.hours = value;
0057                 }
0058             }
0059         }
0060         
0061         Kirigami.Heading {
0062             level: 1
0063             text: ":"
0064         }
0065         
0066         TimePickerSpinBox {
0067             id: minutesSpinbox
0068             from: 0
0069             to: 59
0070             
0071             onValueModified: {
0072                 root.minutes = value;
0073             }
0074         }
0075         
0076         Button {
0077             id: amPmToggle
0078             visible: root.twelveHourTime
0079             leftPadding: Kirigami.Units.largeSpacing
0080             rightPadding: Kirigami.Units.largeSpacing
0081             topPadding: Kirigami.Units.largeSpacing
0082             bottomPadding: Kirigami.Units.largeSpacing
0083             Layout.alignment: Qt.AlignVCenter
0084 
0085             contentItem: Item {
0086                 implicitWidth: label.implicitWidth
0087                 implicitHeight: label.implicitHeight
0088                 Label {
0089                     id: label
0090                     anchors.centerIn: parent
0091                     font.weight: Font.Light
0092                     font.pointSize: Kirigami.Theme.defaultFont.pointSize * 1.3
0093                     text: i18n(hours < 12 ? i18n("AM") : i18n("PM"))
0094                 }
0095             }
0096 
0097             background: Rectangle {
0098                 radius: Kirigami.Units.smallSpacing
0099                 border.color: {
0100                     if (amPmToggle.enabled && (amPmToggle.visualFocus || amPmToggle.hovered || amPmToggle.down)) {
0101                         return Kirigami.Theme.focusColor
0102                     } else {
0103                         return Kirigami.ColorUtils.linearInterpolation(Kirigami.Theme.backgroundColor, Kirigami.Theme.textColor, 0.15)
0104                     }
0105                 }
0106                 border.width: 1
0107                 color: amPmToggle.down ? Kirigami.Theme.alternateBackgroundColor : Kirigami.Theme.backgroundColor
0108             }
0109 
0110             onClicked: {
0111                 if (root.hours >= 12) {
0112                     root.hours -= 12;
0113                 } else {
0114                     root.hours += 12;
0115                 }
0116             }
0117         }
0118     }
0119 }