Warning, /plasma-mobile/calindori/src/contents/ui/IncidenceListView.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.12 as Kirigami 0011 import org.kde.calindori 0.1 as Calindori 0012 0013 Kirigami.ScrollablePage { 0014 id: root 0015 0016 property date incidenceStartDt 0017 property var calendar 0018 property int incidenceType : -1 0019 property int filterMode: 0 0020 0021 /** 0022 * @brief Remove the editor page from the stack. If an incidence page exists in the page stack, remove it as well 0023 * 0024 */ 0025 function removeEditorPage() { 0026 pageStack.pop(); 0027 if(pageStack.lastItem && pageStack.lastItem.hasOwnProperty("isIncidencePage")) { 0028 pageStack.pop(incidencePage); 0029 } 0030 } 0031 0032 title: incidenceType == 0 ? i18n("Events") : i18n("Tasks") 0033 leftPadding: 0 0034 rightPadding: 0 0035 0036 actions.main: Kirigami.Action { 0037 id: mainAction 0038 0039 icon.name: "resource-calendar-insert" 0040 text: (incidenceType === 0) ? i18n("Create Event") : i18n("Create Task") 0041 onTriggered: { 0042 var currentDt = Calindori.CalendarController.localSystemDateTime(); 0043 var lStartDt = (incidenceType == 0 && (incidenceStartDt == null || isNaN(incidenceStartDt))) ? new Date(currentDt.getTime() - currentDt.getMinutes()*60000 + 3600000) : incidenceStartDt; 0044 pageStack.push(incidenceType == 0 ? eventEditor : todoEditor, { startDt: lStartDt } ); 0045 } 0046 } 0047 0048 contextualActions: [ 0049 Kirigami.Action { 0050 property alias hide: incidenceModel.filterHideCompleted 0051 icon.name: hide ? "show_table_row" : "hide_table_row" 0052 visible: incidenceType == 1 0053 text: hide ? i18n("Show Completed") : i18n("Hide Completed") 0054 onTriggered: hide = !(hide) 0055 } 0056 ] 0057 0058 Kirigami.PlaceholderMessage { 0059 anchors.centerIn: parent 0060 icon.name: incidenceType == 0 ? "tag-events" : "view-calendar-tasks" 0061 width: parent.width - (Kirigami.Units.largeSpacing * 4) 0062 visible: listView.count == 0 0063 text: !isNaN(incidenceStartDt) ? i18n("Nothing scheduled for %1", incidenceStartDt.toLocaleDateString(_appLocale, Locale.ShortFormat)) : i18n("Nothing scheduled") 0064 helpfulAction: mainAction 0065 } 0066 0067 ListView { 0068 id: listView 0069 0070 anchors.fill: parent 0071 model: incidenceModel 0072 enabled: count > 0 0073 spacing: Kirigami.Units.largeSpacing 0074 0075 section { 0076 property: incidenceType == 0 ? "displayStartDate" : "displayDueDate" 0077 criteria: ViewSection.FullString 0078 delegate: Kirigami.ListSectionHeader { 0079 label: section 0080 } 0081 } 0082 0083 delegate: Kirigami.BasicListItem { 0084 id: itemDelegate 0085 0086 reserveSpaceForIcon: false 0087 label: "%1\t%2".arg(model.allday ? i18n("All day") : (incidenceType == 0 ? model.displayStartTime : model.displayDueTime)).arg(model.summary) 0088 topPadding: Kirigami.Units.gridUnit 0089 bottomPadding: Kirigami.Units.gridUnit 0090 0091 onClicked: { 0092 if(pageStack.lastItem && pageStack.lastItem.hasOwnProperty("isIncidencePage")) { 0093 pageStack.pop(incidencePage); 0094 } 0095 0096 pageStack.push(incidencePage, { incidence: model }) 0097 } 0098 } 0099 } 0100 0101 Calindori.IncidenceModel { 0102 id: incidenceModel 0103 0104 filterMode: root.filterMode 0105 filterHideCompleted: true 0106 appLocale: _appLocale 0107 } 0108 0109 Component { 0110 id: incidencePage 0111 0112 IncidencePage { 0113 calendar: root.calendar 0114 } 0115 } 0116 0117 Component { 0118 id: eventEditor 0119 0120 EventEditorPage { 0121 calendar: Calindori.CalendarController.activeCalendar 0122 0123 onEditcompleted: removeEditorPage() 0124 } 0125 } 0126 0127 Component { 0128 id: todoEditor 0129 0130 TodoEditorPage { 0131 onEditcompleted: removeEditorPage() 0132 } 0133 } 0134 } 0135