Warning, /pim/merkuro/src/calendar/qml/Controls/DateControls/TimeCombo.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 import QtQuick 2.15 0005 import QtQuick.Controls 2.15 as QQC2 0006 import QtQuick.Layouts 1.15 0007 import org.kde.kirigami 2.15 as Kirigami 0008 import "dateutils.js" as DateUtils 0009 0010 QQC2.ComboBox { 0011 id: root 0012 0013 signal newTimeChosen(int hours, int minutes) 0014 0015 property int timeZoneOffset: 0 0016 property string display 0017 property date dateTime 0018 property alias timePicker: popupTimePicker 0019 0020 editable: true 0021 editText: activeFocus && !popupTimePicker.visible ? editText : display 0022 0023 inputMethodHints: Qt.ImhTime 0024 0025 onEditTextChanged: { 0026 if (activeFocus && !popupTimePicker.visible) { 0027 if (editText.length === 4 && editText[1] === ":") { 0028 editText = "0" + editText; 0029 } 0030 const dateFromTime = Date.fromLocaleTimeString(Qt.locale(), editText, Locale.NarrowFormat); 0031 if(!isNaN(dateFromTime.getTime())) { 0032 newTimeChosen(dateFromTime.getHours(), dateFromTime.getMinutes()); 0033 } 0034 } 0035 } 0036 0037 popup: QQC2.Popup { 0038 id: timePopup 0039 width: Kirigami.Units.gridUnit * 10 0040 height: Kirigami.Units.gridUnit * 14 0041 x: parent.width - width 0042 y: parent.y + parent.height 0043 z: 1000 0044 padding: 0 0045 0046 TimePicker { 0047 id: popupTimePicker 0048 0049 Component.onCompleted: minuteMultiples = 5 0050 Connections { 0051 target: root 0052 0053 function timeChangeHandler() { 0054 if(!popupTimePicker.visible) { 0055 // JS for some insane reason always tries to give you a datetime in the local timezone, even though 0056 // we want the hours in the datetime's timezone, not our local timezone 0057 const adjusted = DateUtils.adjustDateTimeToLocalTimeZone(root.dateTime, root.timeZoneOffset) 0058 0059 popupTimePicker.hours = adjusted.getHours(); 0060 popupTimePicker.minutes = adjusted.getMinutes(); 0061 } 0062 } 0063 0064 function onDateTimeChanged() { 0065 timeChangeHandler(); 0066 } 0067 0068 function onTimeZoneOffsetChanged() { 0069 timeChangeHandler(); 0070 } 0071 } 0072 0073 function valuesChangedHandler() { 0074 if(visible) { 0075 root.newTimeChosen(hours, minutes); 0076 } 0077 } 0078 0079 onHoursChanged: valuesChangedHandler() 0080 onMinutesChanged: valuesChangedHandler() 0081 } 0082 } 0083 }