Warning, /plasma-mobile/calindori/src/contents/ui/CalendarMonthView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net>
0003 *
0004 * SPDX-License-Identifier: GPL-3.0-or-later
0005 */
0006
0007 import QtQuick 2.7
0008 import QtQuick.Controls 2.0 as Controls2
0009 import QtQuick.Layouts 1.3
0010 import org.kde.kirigami 2.0 as Kirigami
0011 import org.kde.calindori 0.1 as Calindori
0012
0013 /**
0014 * Calendar component that displays:
0015 * - a header with current day's information
0016 * - a table (grid) with the days of the current month
0017 * - a set of actions to navigate between months
0018 * It offers vertical swiping
0019 */
0020 Controls2.SwipeView {
0021 id: root
0022
0023 property alias selectedDate: monthView.selectedDate
0024 property alias displayedMonthName: monthView.displayedMonthName
0025 property alias displayedYear: monthView.displayedYear
0026 property alias showHeader: monthView.showHeader
0027 property alias showMonthName: monthView.showMonthName
0028 property alias showYear: monthView.showYear
0029 property alias dayRectangleWidth: monthView.dayRectWidth
0030 property int previousIndex
0031 property var cal
0032 /**
0033 * @brief When set, we take over the handling of the container items indexes programmatically
0034 *
0035 */
0036 property bool manualIndexing: false
0037
0038 signal nextMonth
0039 signal previousMonth
0040 signal goToday
0041 /**
0042 * @brief It should be emitted when the SwipeView currentIndex is set to the first or the last one
0043 *
0044 * @param lastDate p_lastDate:...
0045 */
0046 signal viewEnd(var lastDate)
0047
0048 signal dayPressed(date dayOfPress)
0049 signal dayLongPressed(date dayOfLongPress)
0050 signal dayReleased(date dayOfRelease)
0051
0052 onNextMonth: {
0053 mm.goNextMonth();
0054 root.selectedDate = new Date(mm.year, mm.month-1, 1, root.selectedDate.getHours(), root.selectedDate.getMinutes());
0055 }
0056
0057 onPreviousMonth: {
0058 mm.goPreviousMonth();
0059 root.selectedDate = new Date(mm.year, mm.month-1, 1, root.selectedDate.getHours(), root.selectedDate.getMinutes());
0060 }
0061
0062 onGoToday: {
0063 mm.goCurrentMonth();
0064 root.selectedDate = Calindori.CalendarController.localSystemDateTime();
0065 }
0066
0067 onCurrentItemChanged: manageIndex()
0068
0069 function manageIndex ()
0070 {
0071 if(!manualIndexing)
0072 {
0073 return;
0074 }
0075
0076 var returnDate = root.selectedDate;
0077
0078 if (currentIndex > previousIndex)
0079 {
0080 returnDate = (returnDate.getMonth() == 11) ? new Date(returnDate.getFullYear() + 1, 0, 1) : new Date(returnDate.getFullYear(), returnDate.getMonth() + 1, 1);
0081 }
0082 else
0083 {
0084 returnDate = (returnDate.getMonth() == 0) ? new Date(returnDate.getFullYear() - 1, 11, 1) : new Date(returnDate.getFullYear(), returnDate.getMonth() - 1, 1);
0085 }
0086
0087 previousIndex = currentIndex;
0088
0089 if(currentIndex != 1)
0090 {
0091 viewEnd(returnDate) //Inform parents about the date to set as selected when re-pushing this page
0092 }
0093 }
0094
0095 Connections {
0096 target: cal
0097
0098 function onTodosChanged () { monthView.reloadSelectedDate(); }
0099 function onEventsChanged () { monthView.reloadSelectedDate(); }
0100 }
0101
0102 Component.onCompleted: {
0103 currentIndex = 1;
0104 previousIndex = currentIndex;
0105 manualIndexing = true;
0106 orientation = Qt.Horizontal //Change orientation after the object has been instantiated. Otherwise, we get a non-intuitive animation when swiping upwards
0107 }
0108
0109 orientation: Qt.Vertical
0110
0111 Calindori.DaysOfMonthIncidenceModel {
0112 id: mm
0113
0114 year: monthView.selectedDate.getFullYear()
0115 month: monthView.selectedDate.getMonth() + 1
0116 calendar: cal
0117 }
0118
0119 Item {}
0120
0121 Item {
0122 MonthView {
0123 id: monthView
0124
0125 anchors.centerIn: parent
0126
0127 applicationLocale: _appLocale
0128 displayedYear: mm.year
0129 displayedMonthName: _appLocale.standaloneMonthName(mm.month-1)
0130 selectedDayTodosCount: cal.todosCount(selectedDate)
0131 selectedDayEventsCount: cal.eventsCount(selectedDate)
0132 daysModel: mm
0133 selectedDate: Calindori.CalendarController.localSystemDateTime()
0134 currentDate: Calindori.CalendarController.localSystemDateTime()
0135 loadAsync: true
0136
0137 reloadSelectedDate: function() {
0138 selectedDayTodosCount = cal.todosCount(root.selectedDate)
0139 selectedDayEventsCount = cal.eventsCount(root.selectedDate)
0140 }
0141
0142 onDatePressed: root.dayPressed(dateOfPress)
0143 onDateLongPressed: root.dayLongPressed(dateOfLongPress)
0144 onDateReleased: root.dayReleased(dateOfRelease)
0145 }
0146 }
0147
0148 Item {}
0149 }