Warning, /pim/merkuro/src/calendar/qml/Controls/DateControls/DateCombo.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 
0009 import "dateutils.js" as DateUtils
0010 
0011 QQC2.ComboBox {
0012     id: root
0013 
0014     signal newDateChosen(int day, int month, int year)
0015 
0016     property int timeZoneOffset: 0
0017     property string display: dateTime.toLocaleDateString(Qt.locale(), Locale.NarrowFormat) // Can override for better C++ time strings
0018     property date dateTime: new Date()
0019     property date dateFromText: DateUtils.parseDateString(editText)
0020     property bool validDate: !isNaN(dateFromText.getTime())
0021 
0022     onDateTimeChanged: {
0023         datePicker.selectedDate = dateTime;
0024         datePicker.clickedDate = dateTime;
0025     }
0026 
0027     editable: true
0028     editText: activeFocus ? editText : display
0029 
0030     onActiveFocusChanged: {
0031         // Set date from text here because it otherwise updates after this handler
0032         // Also make sure to only update after we switch from this field's focus to something else
0033         if(!activeFocus) {
0034             dateFromText = DateUtils.parseDateString(editText);
0035 
0036             if (validDate) {
0037                 datePicker.selectedDate = dateFromText;
0038                 datePicker.clickedDate = dateFromText;
0039                 newDateChosen(dateFromText.getDate(), dateFromText.getMonth() + 1, dateFromText.getFullYear());
0040             }
0041         }
0042     }
0043 
0044     popup: QQC2.Popup {
0045         id: datePopup
0046 
0047         width: Kirigami.Units.gridUnit * 18
0048         height: Kirigami.Units.gridUnit * 18
0049         y: parent.y + parent.height
0050         z: 1000
0051         padding: 0
0052 
0053         contentItem: DatePicker {
0054             id: datePicker
0055 
0056             clickedDate: root.dateTime
0057             selectedDate: root.dateTime
0058             onDatePicked: {
0059                 datePopup.close();
0060                 newDateChosen(pickedDate.getDate(), pickedDate.getMonth() + 1, pickedDate.getFullYear());
0061             }
0062         }
0063     }
0064 }