Warning, /plasma-mobile/calindori/src/contents/ui/CalindoriGlobalDrawer.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Dimitris Kardarakos <dimkard@posteo.net> 0003 * SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 import QtQuick 2.15 0009 import QtQuick.Controls 2.15 0010 import QtQml.Models 2.14 0011 import QtQuick.Layouts 1.14 0012 import org.kde.kirigami 2.6 as Kirigami 0013 import org.kde.calindori 0.1 as Calindori 0014 0015 Kirigami.OverlayDrawer { 0016 id: drawer 0017 0018 property var monthView 0019 property var calendar 0020 property bool wideScreen: false 0021 property var applicationFooter 0022 0023 modal: !wideScreen 0024 width: 200 0025 height: applicationWindow().height 0026 0027 Kirigami.Theme.colorSet: Kirigami.Theme.Window 0028 Kirigami.Theme.inherit: false 0029 0030 leftPadding: 0 0031 rightPadding: 0 0032 topPadding: 0 0033 bottomPadding: 0 0034 0035 handleClosedIcon.source: modal ? null : "sidebar-expand-left" 0036 handleOpenIcon.source: modal ? null : "sidebar-collapse-left" 0037 handleVisible: applicationWindow().pageStack.depth <= 1 && applicationWindow().pageStack.layers.depth <= 1 0038 0039 property var checkedSidebarItem: monthViewButton 0040 0041 contentItem: ColumnLayout { 0042 spacing: 0 0043 0044 // sidebar header 0045 ToolBar { 0046 visible: !drawer.modal 0047 Layout.fillWidth: true 0048 implicitHeight: applicationWindow().pageStack.globalToolBar.preferredHeight 0049 0050 Item { 0051 anchors.fill: parent 0052 Kirigami.Heading { 0053 level: 1 0054 text: i18n("Calendar") 0055 anchors.left: parent.left 0056 anchors.leftMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing 0057 anchors.verticalCenter: parent.verticalCenter 0058 } 0059 } 0060 } 0061 0062 Kirigami.Heading { 0063 visible: drawer.modal 0064 text: i18n("Calendar") 0065 type: Kirigami.Heading.Secondary 0066 Layout.margins: Kirigami.Units.gridUnit 0067 } 0068 0069 // sidebar content 0070 ColumnLayout { 0071 id: column 0072 spacing: 0 0073 Layout.margins: Kirigami.Units.smallSpacing 0074 0075 SidebarButton { 0076 id: monthViewButton 0077 Layout.fillWidth: true 0078 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0079 Layout.bottomMargin: Kirigami.Units.smallSpacing 0080 0081 text: i18n("Month View") 0082 icon.name: "view-calendar-month" 0083 checked: pageActive 0084 property bool pageActive: checkedSidebarItem === monthViewButton 0085 0086 onClicked: { 0087 popExtraLayers(); 0088 pageStack.clear(); 0089 pageStack.push(monthView); 0090 0091 checkedSidebarItem = monthViewButton; 0092 checked = Qt.binding(() => pageActive); 0093 0094 if (drawer.modal) drawer.close(); 0095 } 0096 } 0097 0098 SidebarButton { 0099 id: weekViewButton 0100 Layout.fillWidth: true 0101 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0102 Layout.bottomMargin: Kirigami.Units.smallSpacing 0103 0104 text: i18n("Week View") 0105 icon.name: "view-calendar-week" 0106 checked: pageActive 0107 property bool pageActive: checkedSidebarItem === weekViewButton 0108 0109 onClicked: { 0110 popExtraLayers(); 0111 pageStack.clear(); 0112 pageStack.push(weekView, { startDate: Calindori.CalendarController.localSystemDateTime() } ); 0113 0114 checkedSidebarItem = weekViewButton; 0115 checked = Qt.binding(() => pageActive); 0116 0117 if (drawer.modal) drawer.close(); 0118 } 0119 } 0120 0121 SidebarButton { 0122 id: dayViewButton 0123 Layout.fillWidth: true 0124 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0125 Layout.bottomMargin: Kirigami.Units.smallSpacing 0126 0127 text: i18n("Day View") 0128 icon.name: "view-calendar-day" 0129 checked: pageActive 0130 property bool pageActive: checkedSidebarItem === dayViewButton 0131 0132 onClicked: { 0133 popExtraLayers(); 0134 pageStack.clear(); 0135 pageStack.push(dayView); 0136 0137 checkedSidebarItem = dayViewButton; 0138 checked = Qt.binding(() => pageActive); 0139 0140 if (drawer.modal) drawer.close(); 0141 } 0142 } 0143 0144 SidebarButton { 0145 id: tasksListButton 0146 Layout.fillWidth: true 0147 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0148 Layout.bottomMargin: Kirigami.Units.smallSpacing 0149 0150 text: i18n("Tasks List") 0151 icon.name: "view-calendar-list" 0152 checked: pageActive 0153 property bool pageActive: checkedSidebarItem === tasksListButton 0154 0155 onClicked: { 0156 popExtraLayers(); 0157 pageStack.clear(); 0158 pageStack.push(incidenceView, { incidenceType: 1, filterMode: 9 }); 0159 0160 checkedSidebarItem = tasksListButton; 0161 checked = Qt.binding(() => pageActive); 0162 0163 if (drawer.modal) drawer.close(); 0164 } 0165 } 0166 0167 SidebarButton { 0168 id: eventsListButton 0169 Layout.fillWidth: true 0170 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0171 0172 text: i18n("Events List") 0173 icon.name: "view-calendar-agenda" 0174 checked: pageActive 0175 property bool pageActive: checkedSidebarItem === eventsListButton 0176 0177 onClicked: { 0178 popExtraLayers(); 0179 pageStack.clear(); 0180 pageStack.push(incidenceView, { incidenceType: 0, filterMode: 8 }); 0181 0182 checkedSidebarItem = eventsListButton; 0183 checked = Qt.binding(() => pageActive); 0184 0185 if (drawer.modal) drawer.close(); 0186 } 0187 } 0188 0189 Kirigami.Separator { 0190 Layout.fillWidth: true 0191 Layout.margins: Kirigami.Units.smallSpacing 0192 } 0193 0194 Kirigami.Heading { 0195 Layout.fillWidth: true 0196 Layout.margins: Kirigami.Units.smallSpacing 0197 Layout.leftMargin: Kirigami.Units.largeSpacing 0198 text: i18n("Calendars") 0199 level: 3 0200 type: Kirigami.Heading.Secondary 0201 } 0202 0203 // calendar selection 0204 Repeater { 0205 model: Calindori.CalindoriConfig && Calindori.CalindoriConfig.internalCalendars 0206 delegate: calendarButton 0207 } 0208 Repeater { 0209 model: Calindori.CalindoriConfig && Calindori.CalindoriConfig.externalCalendars 0210 delegate: calendarButton 0211 } 0212 0213 Component { 0214 id: calendarButton 0215 SidebarButton { 0216 Layout.fillWidth: true 0217 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0218 property string calendarName: modelData 0219 property bool calendarActive: Calindori.CalindoriConfig !== null ? (Calindori.CalindoriConfig.activeCalendar === calendarName) : false 0220 0221 text: calendarName 0222 icon.name: calendarActive ? "checkmark" : "view-calendar" 0223 checked: false 0224 0225 onClicked: { 0226 if (!checked) { 0227 Calindori.CalindoriConfig.activeCalendar = calendarName; 0228 popExtraLayers(); 0229 showPassiveNotification(i18n("Calendar %1 has been activated", calendarName)); 0230 checked = false; 0231 } 0232 } 0233 } 0234 } 0235 0236 Item { Layout.fillHeight: true } 0237 Kirigami.Separator { 0238 Layout.fillWidth: true 0239 Layout.margins: Kirigami.Units.smallSpacing 0240 } 0241 0242 SidebarButton { 0243 id: settingsButton 0244 Layout.fillWidth: true 0245 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0246 0247 text: i18n("Settings") 0248 icon.name: "settings-configure" 0249 checked: pageActive 0250 property bool pageActive: checkedSidebarItem === settingsButton 0251 0252 onClicked: { 0253 popExtraLayers(); 0254 pageStack.clear(); 0255 pageStack.push(settingsPage); 0256 0257 checkedSidebarItem = settingsButton; 0258 checked = Qt.binding(() => pageActive); 0259 0260 if (drawer.modal) drawer.close(); 0261 } 0262 } 0263 } 0264 } 0265 0266 Component { 0267 id: dayView 0268 DayPage { 0269 wideScreen: root.wideScreen 0270 } 0271 } 0272 0273 Component { 0274 id: weekView 0275 WeekPage { 0276 wideScreen: root.wideScreen 0277 } 0278 } 0279 0280 Component { 0281 id: incidenceView 0282 IncidenceListView { 0283 calendar: root.calendar 0284 } 0285 } 0286 0287 Component { 0288 id: settingsPage 0289 SettingsPage { 0290 applicationFooter: drawer.applicationFooter 0291 } 0292 } 0293 }