Warning, /pim/kube/views/calendar/qml/EventEditor.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright (C) 2018 Michael Bohlender, <bohlender@kolabsys.com> 0003 * Copyright (C) 2019 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.4 0021 import QtQuick.Layouts 1.1 0022 0023 import org.kube.framework 1.0 as Kube 0024 import "dateutils.js" as DateUtils 0025 0026 Item { 0027 id: root 0028 0029 property bool editMode: false 0030 property date start: new Date() 0031 property bool allDay: false 0032 property var controller: Kube.EventController { allDay: root.allDay } 0033 property var accountId: null 0034 0035 signal done() 0036 0037 function discard() { 0038 controller.reload() 0039 root.done() 0040 } 0041 0042 implicitWidth: contentLayout.implicitWidth + 2 * Kube.Units.largeSpacing 0043 implicitHeight: contentLayout.implicitHeight + buttons.implicitHeight + 2 * Kube.Units.largeSpacing 0044 0045 states: [ 0046 State { 0047 name: "edit" 0048 PropertyChanges { target: deleteButton; visible: true } 0049 PropertyChanges { target: abortButton; visible: false } 0050 PropertyChanges { target: saveButton; visible: true } 0051 PropertyChanges { target: discardButton; visible: true } 0052 PropertyChanges { target: createButton; visible: false } 0053 PropertyChanges { target: calendarSelector; visible: false } 0054 }, 0055 State { 0056 name: "new" 0057 PropertyChanges { target: deleteButton; visible: false } 0058 PropertyChanges { target: abortButton; visible: true } 0059 PropertyChanges { target: saveButton; visible: false } 0060 PropertyChanges { target: discardButton; visible: false } 0061 PropertyChanges { target: createButton; visible: true } 0062 PropertyChanges { target: calendarSelector; visible: true } 0063 } 0064 ] 0065 0066 state: editMode ? "edit" : "new" 0067 0068 ColumnLayout { 0069 id: contentLayout 0070 0071 anchors { 0072 fill: parent 0073 margins: Kube.Units.largeSpacing 0074 } 0075 0076 spacing: Kube.Units.largeSpacing 0077 0078 ColumnLayout { 0079 0080 spacing: Kube.Units.largeSpacing 0081 0082 Kube.HeaderField { 0083 id: titleEdit 0084 Layout.fillWidth: true 0085 placeholderText: qsTr("Event Title") 0086 text: controller.summary 0087 onTextChanged: controller.summary = text 0088 } 0089 0090 DateRangeChooser { 0091 id: dateAndTimeChooser 0092 Layout.fillWidth: true 0093 initialStart: root.editMode ? controller.start : root.start 0094 initialEnd: root.editMode ? controller.end : DateUtils.addMinutesToDate(root.start, 30) 0095 allDay: controller.allDay 0096 onStartChanged: controller.start = start 0097 onEndChanged: controller.end = end 0098 onAllDayChanged: controller.allDay = allDay 0099 } 0100 0101 ColumnLayout { 0102 spacing: Kube.Units.smallSpacing 0103 Layout.fillWidth: true 0104 0105 Kube.TextField { 0106 Layout.fillWidth: true 0107 placeholderText: qsTr("Location") 0108 text: controller.location 0109 onTextChanged: controller.location = text 0110 } 0111 0112 RowLayout { 0113 visible: attendees.count 0114 Layout.maximumWidth: parent.width 0115 Layout.fillWidth: true 0116 Kube.Label { 0117 id: fromLabel 0118 text: qsTr("Organizer:") 0119 } 0120 0121 Kube.ComboBox { 0122 id: identityCombo 0123 objectName: "identityCombo" 0124 0125 width: parent.width - Kube.Units.largeSpacing * 2 0126 0127 model: root.controller.identitySelector.model 0128 textRole: "address" 0129 Layout.fillWidth: true 0130 //A regular binding is not enough in this case, we have to use the Binding element 0131 Binding { target: identityCombo; property: "currentIndex"; value: root.controller.identitySelector.currentIndex } 0132 onCurrentIndexChanged: { 0133 root.controller.identitySelector.currentIndex = currentIndex 0134 } 0135 } 0136 } 0137 0138 AttendeeListEditor { 0139 id: attendees 0140 Layout.fillWidth: true 0141 Layout.fillHeight: true 0142 focus: true 0143 activeFocusOnTab: true 0144 controller: root.controller.attendees 0145 completer: root.controller.attendeeCompleter 0146 } 0147 0148 Kube.SeparatorLine { 0149 Layout.fillWidth: true 0150 } 0151 0152 Kube.TextEditor { 0153 Layout.fillWidth: true 0154 Layout.fillHeight: true 0155 Layout.minimumHeight: Kube.Units.gridUnit * 4 0156 0157 border.width: 0 0158 0159 placeholderText: "Description" 0160 initialText: controller.description 0161 onTextChanged: controller.description = text 0162 0163 Keys.onEscapePressed: calendarSelector.forceActiveFocus(Qt.TabFocusReason) 0164 } 0165 } 0166 } 0167 0168 RowLayout { 0169 id: buttons 0170 0171 spacing: Kube.Units.largeSpacing 0172 0173 Kube.Button { 0174 id: deleteButton 0175 text: qsTr("Delete") 0176 onClicked: { 0177 controller.remove() 0178 root.done() 0179 } 0180 } 0181 0182 Kube.Button { 0183 id: abortButton 0184 text: qsTr("Abort") 0185 onClicked: { 0186 root.done() 0187 } 0188 } 0189 0190 Item { 0191 Layout.fillWidth: true 0192 } 0193 0194 Kube.EntityComboBox { 0195 id: calendarSelector 0196 accountId: root.accountId 0197 type: "calendar" 0198 filter: {"contentTypes": "event", "enabled": true} 0199 onSelected: { 0200 if (!root.editMode) { 0201 controller.calendar = entity 0202 } 0203 } 0204 } 0205 0206 Kube.Button { 0207 id: discardButton 0208 enabled: controller.modified 0209 text: qsTr("Discard Changes") 0210 onClicked: root.discard() 0211 } 0212 0213 Kube.PositiveButton { 0214 id: saveButton 0215 enabled: controller.modified 0216 text: qsTr("Save Changes") 0217 onClicked: { 0218 controller.saveAction.execute() 0219 root.done() 0220 } 0221 } 0222 0223 Kube.PositiveButton { 0224 id: createButton 0225 text: qsTr("Create Event") 0226 onClicked: { 0227 controller.saveAction.execute() 0228 root.done() 0229 } 0230 } 0231 } 0232 } 0233 }