Warning, /pim/kube/views/calendar/qml/TimeSelector.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright (C) 2017 Michael Bohlender, <bohlender@kolabsys.com>
0003 * Copyright (C) 2018 Christian Mollekopf, <mollekopf@kolabsys.com>
0004 *
0005 * This program is free software; you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation; either version 2 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License along
0016 * with this program; if not, write to the Free Software Foundation, Inc.,
0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0018 */
0019
0020 import QtQuick 2.7
0021 import QtQuick.Layouts 1.2
0022 import org.kube.framework 1.0 as Kube
0023 import Qt.labs.calendar 1.0
0024
0025 import "dateutils.js" as DateUtils
0026
0027 Kube.ComboBox {
0028 id: root
0029
0030 property int delta: 15
0031 property date dateTime
0032 property var notBefore: new Date(0)
0033 property var notBeforeRounded: DateUtils.roundToMinutes(notBefore, delta)
0034
0035
0036 onNotBeforeRoundedChanged: {
0037 root.setNotBefore(notBeforeRounded)
0038 }
0039
0040 function generateTimes(start, delta) {
0041 var d = new Date(2000, 1, 1, start.getHours(), start.getMinutes(), start.getSeconds())
0042 var list = []
0043 while (d.getDate() == 1) {
0044 list.push(dateToString(d))
0045 d = DateUtils.addMinutesToDate(d, delta)
0046 }
0047 return list
0048 }
0049
0050 function setNotBefore(notBefore) {
0051 availableTimes = generateTimes(DateUtils.sameDay(notBefore, root.dateTime) ? notBefore : new Date(2000, 1, 1, 0, 0, 0), root.delta)
0052 model = availableTimes
0053 currentIndex = findCurrentIndex(root.dateTime, root.delta)
0054 if (currentIndex >= 0) {
0055 setTimeFromIndex(currentIndex)
0056 } else {
0057 currentIndex = 0
0058 setTimeFromIndex(currentIndex)
0059 }
0060 }
0061
0062 property var availableTimes: null
0063
0064 function dateToString(date) {
0065 return date.toLocaleTimeString(Qt.locale(), "hh:mm")
0066 }
0067
0068 function findCurrentIndex(date, delta) {
0069 var s = dateToString(DateUtils.roundToMinutes(date, delta))
0070 //Find does not reliably work if we just reset the model
0071 return availableTimes.indexOf(s)
0072 // return find(s)
0073 }
0074
0075 function setTimeFromIndex(index) {
0076 var date = Date.fromLocaleTimeString(Qt.locale(), availableTimes[index], "hh:mm")
0077 //Intermediate variable is necessary for binding to be updated
0078 var newDate = root.dateTime
0079 newDate.setHours(date.getHours(), date.getMinutes())
0080 root.dateTime = newDate
0081 }
0082
0083 Component.onCompleted: {
0084 setNotBefore(root.notBeforeRounded)
0085 }
0086
0087 onActivated: {
0088 setTimeFromIndex(index)
0089 }
0090
0091 model: availableTimes
0092 }