Warning, /pim/kube/views/calendar/qml/DateRangeChooser.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright (C) 2019 Christian Mollekopf, <mollekopf@kolabsys.com> 0003 * 0004 * This program is free software; you can redistribute it and/or modify 0005 * it under the terms of the GNU General Public License as published by 0006 * the Free Software Foundation; either version 2 of the License, or 0007 * (at your option) any later version. 0008 * 0009 * This program is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 * GNU General Public License for more details. 0013 * 0014 * You should have received a copy of the GNU General Public License along 0015 * with this program; if not, write to the Free Software Foundation, Inc., 0016 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0017 */ 0018 0019 import QtQuick 2 0020 import QtQuick.Layouts 1 0021 import QtQuick.Controls 2 0022 import org.kube.framework 1.0 as Kube 0023 0024 0025 import "dateutils.js" as DateUtils 0026 0027 ColumnLayout { 0028 id: root 0029 0030 property date initialStart 0031 onInitialStartChanged: { 0032 startDate.dateTime = initialStart 0033 } 0034 property date initialEnd 0035 onInitialEndChanged: { 0036 endDate.dateTime = initialEnd 0037 } 0038 property alias allDay: checkBox.checked 0039 property date start: initialStart 0040 property date end: initialEnd 0041 0042 function setAllDay() { 0043 if (DateUtils.sameDay(start, end)) { 0044 // Default to true when switching to multiday 0045 root.allDay = false 0046 } else { 0047 root.allDay = true 0048 } 0049 } 0050 0051 property var notBefore: new Date(0) 0052 spacing: Kube.Units.smallSpacing 0053 0054 Kube.Button { 0055 id: button 0056 0057 Layout.preferredWidth: implicitWidth 0058 0059 function formatString(start, end, allDay) { 0060 var startDate = start.toLocaleDateString(); 0061 if (allDay) { 0062 if (DateUtils.sameDay(start, end)) { 0063 // Tuesday, April 4, 2023 0064 return startDate; 0065 } else { 0066 // Tuesday, April 4, 2023 - Wednesday, April 12, 2023 0067 return startDate + " " + 0068 " - " + 0069 end.toLocaleDateString(); 0070 } 0071 } 0072 if (DateUtils.sameDay(start, end)) { 0073 // Tuesday, April 4, 2023 12:30 - 13:00 0074 return startDate + " " + 0075 start.toLocaleTimeString(Qt.locale(), "hh:mm") + 0076 " - " + 0077 end.toLocaleTimeString(Qt.locale(), "hh:mm"); 0078 } 0079 // Tuesday, April 4, 2023 12:30 - Wednesday, April 12, 2023 13:00 0080 return startDate + " " + 0081 start.toLocaleTimeString(Qt.locale(), "hh:mm") + 0082 " - " + 0083 end.toLocaleDateString() + " " + 0084 end.toLocaleTimeString(Qt.locale(), "hh:mm"); 0085 } 0086 0087 text: formatString(root.start, root.end, root.allDay) 0088 0089 onClicked: { 0090 popup.open() 0091 } 0092 0093 Kube.Popup { 0094 id: popup 0095 0096 x: button.x 0097 y: button.y 0098 width: Math.max(selector.implicitWidth + Kube.Units.largeSpacing * 7, button.width) 0099 height: buttonOverlay.height + layout.implicitHeight + 2 * Kube.Units.smallSpacing 0100 modal: false 0101 focus: true 0102 padding: 0 0103 background: Rectangle { 0104 anchors.fill: parent 0105 color: Kube.Colors.viewBackgroundColor 0106 border.color: Kube.Colors.buttonColor 0107 border.width: 1 0108 } 0109 Kube.Button { 0110 id: buttonOverlay 0111 anchors { 0112 top: parent.top 0113 left: parent.left 0114 right: parent.right 0115 } 0116 height: button.height 0117 text: button.formatString(root.start, root.end, root.allDay) 0118 onClicked: popup.close() 0119 } 0120 0121 ColumnLayout { 0122 id: layout 0123 anchors { 0124 top: buttonOverlay.bottom 0125 bottom: parent.bottom 0126 left: parent.left 0127 right: parent.right 0128 topMargin: Kube.Units.smallSpacing 0129 leftMargin: Kube.Units.smallSpacing 0130 rightMargin: Kube.Units.smallSpacing 0131 bottomMargin: Kube.Units.smallSpacing 0132 } 0133 0134 DateSelector { 0135 id: selector 0136 notBefore: root.notBefore 0137 backgroundColor: Kube.Colors.backgroundColor 0138 textColor: Kube.Colors.textColor 0139 invertIcons: false 0140 rangeSelection: true 0141 selectedDate: root.start 0142 selectedEnd: root.end 0143 onSelected: { 0144 root.start = DateUtils.applyTimeFromDate(date, root.start) 0145 root.setAllDay() 0146 } 0147 onEndSelected: { 0148 root.end = DateUtils.applyTimeFromDate(date, root.end) 0149 root.setAllDay() 0150 } 0151 } 0152 0153 RowLayout { 0154 spacing: Kube.Units.smallSpacing 0155 Kube.CheckBox { 0156 id: checkBox 0157 } 0158 Kube.Label { 0159 text: qsTr("All day") 0160 } 0161 } 0162 0163 RowLayout { 0164 visible: !root.allDay 0165 Kube.Label { 0166 text: qsTr("begins") 0167 } 0168 TimeSelector { 0169 id: startDate 0170 Layout.preferredWidth: Kube.Units.gridUnit * 3 0171 objectName: "startDate" 0172 dateTime: root.start 0173 onDateTimeChanged: { 0174 root.start = dateTime 0175 } 0176 } 0177 Kube.Label { 0178 text: qsTr("ends") 0179 } 0180 TimeSelector { 0181 id: endDate 0182 Layout.preferredWidth: Kube.Units.gridUnit * 3 0183 objectName: "endDate" 0184 dateTime: root.end 0185 notBefore: root.start 0186 onDateTimeChanged: { 0187 root.end = dateTime 0188 } 0189 } 0190 } 0191 } 0192 } 0193 } 0194 }