Warning, /pim/kube/views/calendar/qml/View.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.9
0021 import QtQuick.Controls 2
0022 import QtQuick.Layouts 1.2
0023 
0024 import org.kube.framework 1.0 as Kube
0025 import "dateutils.js" as DateUtils
0026 
0027 Kube.View {
0028     id: root
0029 
0030     property date selectedDate: Kube.Context.currentDate
0031 
0032     onRefresh: {
0033         Kube.Fabric.postMessage(Kube.Messages.synchronize, {"type": "calendar"})
0034         Kube.Fabric.postMessage(Kube.Messages.synchronize, {"type": "event"})
0035     }
0036 
0037     helpViewComponent: Kube.HelpPopup {
0038         ListModel {
0039             ListElement { description: qsTr("Jump to next week/month:"); shortcut: "j" }
0040             ListElement { description: qsTr("Jump to previous week/month:"); shortcut: "k" }
0041         }
0042     }
0043 
0044     Shortcut {
0045         enabled: root.isCurrentView
0046         sequences: ['j', StandardKey.Forward, StandardKey.MoveToNextLine, StandardKey.MoveToNextChar]
0047         onActivated: root.goToNext()
0048     }
0049 
0050     Shortcut {
0051         enabled: root.isCurrentView
0052         sequences: ['k', StandardKey.Back, StandardKey.MoveToPreviousLine, StandardKey.MoveToPreviousChar]
0053         onActivated: root.goToPrevious()
0054     }
0055 
0056     function goToNext() {
0057         if (weekViewButton.checked) {
0058             root.selectedDate = DateUtils.nextWeek(root.selectedDate)
0059         } else {
0060             root.selectedDate = DateUtils.nextMonth(root.selectedDate)
0061         }
0062     }
0063     function goToPrevious() {
0064         if (weekViewButton.checked) {
0065             root.selectedDate = DateUtils.previousWeek(root.selectedDate)
0066         } else {
0067             root.selectedDate = DateUtils.previousMonth(root.selectedDate)
0068         }
0069     }
0070     RowLayout {
0071         Kube.LeftSidebar {
0072             Layout.fillHeight: parent.height
0073             buttons: [
0074                Kube.PositiveButton {
0075                    id: newEventButton
0076                    objectName: "newEventButton"
0077 
0078                    Layout.fillWidth: true
0079                    focus: true
0080                    text: qsTr("New Event")
0081                    onClicked: eventPopup.createObject(root, {start: DateUtils.sameDay(Kube.Context.currentDate, root.selectedDate) ? Kube.Context.currentDate : root.selectedDate}).open()
0082                },
0083                RowLayout {
0084                    Layout.fillWidth: true
0085                    spacing: Kube.Units.smallSpacing
0086                    ButtonGroup {
0087                        id: viewButtonGroup
0088                    }
0089                    Kube.TextButton {
0090                        id: weekViewButton
0091                        Layout.fillWidth: true
0092                        text: qsTr("Week")
0093                        textColor: Kube.Colors.highlightedTextColor
0094                        checkable: true
0095                        checked: true
0096                        ButtonGroup.group: viewButtonGroup
0097                    }
0098                    Kube.TextButton {
0099                        id: monthViewButton
0100                        Layout.fillWidth: true
0101                        text: qsTr("Month")
0102                        textColor: Kube.Colors.highlightedTextColor
0103                        checkable: true
0104                        ButtonGroup.group: viewButtonGroup
0105                    }
0106                },
0107                DateView {
0108                    Layout.fillWidth: true
0109                    date: Kube.Context.currentDate
0110                    MouseArea {
0111                        anchors.fill: parent
0112                        onClicked: {
0113                            root.selectedDate = Kube.Context.currentDate
0114                        }
0115                    }
0116                },
0117                DateSelector {
0118                    id: dateSelector
0119                    Layout.fillWidth: true
0120                    selectedDate: root.selectedDate
0121                    onSelected: {
0122                        root.selectedDate = date
0123                    }
0124                    function next() {
0125                         root.goToNext()
0126                    }
0127                    function previous() {
0128                         root.goToPrevious()
0129                    }
0130                }
0131             ]
0132 
0133             Kube.CalendarSelector {
0134                 id: accountSwitcher
0135                 objectName: "calendarSelector"
0136                 Layout.fillWidth: true
0137                 Layout.fillHeight: true
0138                 contentType: "event"
0139             }
0140         }
0141 
0142         WeekView {
0143             visible: weekViewButton.checked
0144             Layout.fillHeight: true
0145             Layout.fillWidth: true
0146             currentDate: Kube.Context.currentDate
0147             startDate: DateUtils.getFirstDayOfWeek(root.selectedDate)
0148             calendarFilter: accountSwitcher.enabledEntities
0149         }
0150 
0151         MonthView {
0152             visible: monthViewButton.checked
0153             Layout.fillHeight: true
0154             Layout.fillWidth: true
0155             currentDate: Kube.Context.currentDate
0156             startDate: DateUtils.getFirstDayOfWeek(DateUtils.getFirstDayOfMonth(root.selectedDate))
0157             month: root.selectedDate.getMonth()
0158             calendarFilter: accountSwitcher.enabledEntities
0159         }
0160     }
0161 
0162     Kube.Listener {
0163         filter: Kube.Messages.eventEditor
0164         onMessageReceived: eventPopup.createObject(root, message).open()
0165     }
0166 
0167     Component {
0168         id: eventPopup
0169         Kube.Popup {
0170             id: popup
0171 
0172             property alias start: editor.start
0173             property alias allDay: editor.allDay
0174 
0175             x: root.width * 0.15
0176             y: root.height * 0.15
0177 
0178             width: root.width * 0.7
0179             height: root.height * 0.7
0180             padding: 0
0181             Rectangle {
0182                 anchors.fill: parent
0183                 color: Kube.Colors.paperWhite
0184                 EventEditor {
0185                     id: editor
0186                     anchors.fill: parent
0187                     onDone: popup.close()
0188                     accountId: Kube.Context.currentAccountId
0189                 }
0190             }
0191         }
0192     }
0193 }