Warning, /utilities/daykountdown/src/contents/ui/main.qml is written in an unsupported language. File is not indexed.

0001 /*
0002 * SPDX-FileCopyrightText: (C) 2021 Carl Schwan <carl@carlschwan.eu>
0003 * SPDX-FileCopyrightText: (C) 2021 Claudio Cambra <claudio.cambra@gmail.com>
0004 * 
0005 * SPDX-LicenseRef: GPL-3.0-or-later
0006 */
0007 
0008 // Includes relevant modules used by the QML
0009 import QtQuick 2.6
0010 import QtQuick.Controls 2.15 as Controls
0011 import QtQuick.Layouts 1.2
0012 import QtQuick.Dialogs 1.3
0013 import org.kde.kirigami 2.13 as Kirigami
0014 import org.kde.kirigamiaddons.formcard 1.0 as FormCard
0015 import org.kde.daykountdown.private 1.0
0016 
0017 // Base element, provides basic features needed for all kirigami applications
0018 Kirigami.ApplicationWindow {
0019         // ID provides unique identifier to reference this element
0020         id: root
0021 
0022         // Window title
0023         title: i18nc("@title:window", "Day Kountdown")
0024         
0025         property date nowDate: new Date()
0026         property bool calPageOpen: false
0027         
0028         Timer {
0029                 interval: 60000
0030                 running: true
0031                 repeat: true
0032                 onTriggered: nowDate = new Date()
0033         }
0034         
0035         // Global drawer element with app-wide actions
0036         globalDrawer: Kirigami.GlobalDrawer {
0037                 // Makes drawer a small menu rather than sliding pane
0038                 isMenu: true
0039                 actions: [
0040                         Kirigami.Action {
0041                                 text: i18n("Import")
0042                                 icon.name: "document-open"
0043                                 shortcut: StandardKey.Open
0044                                 onTriggered: {
0045                                         ImportExport.fetchKountdowns();
0046                                         for(var i in ImportExport.Kountdowns) {
0047                                                 KountdownModel.addKountdown(
0048                                                         ImportExport.Kountdowns[i].name,
0049                                                         ImportExport.Kountdowns[i].description,
0050                                                         new Date(ImportExport.Kountdowns[i].date),
0051                                                         ImportExport.Kountdowns[i].colour
0052                                                 );
0053                                         }
0054                                 }
0055                         },
0056                         Kirigami.Action {
0057                                 text: i18n("Export")
0058                                 icon.name: "document-save"
0059                                 shortcut: StandardKey.Save
0060                                 onTriggered: ImportExport.exportFile()
0061                         },
0062                         Kirigami.Action {
0063                                 text: i18n("Clear all kountdowns")
0064                                 icon.name: "edit-clear"
0065                                 onTriggered: removeAllDialog.open()
0066                         },
0067                         Kirigami.Action {
0068                                 text: i18n("Settings")
0069                                 icon.name: "settings-configure"
0070                                 onTriggered: pageStack.layers.push("SettingsPage.qml")
0071                                 enabled: pageStack.layers.currentItem.title !== i18n("Settings")
0072                         },
0073                         Kirigami.Action {
0074                                 text: i18n("About DayKountdown")
0075                                 icon.name: "help-about"
0076                                 onTriggered: pageStack.layers.push(aboutPage)
0077                                 enabled: pageStack.layers.currentItem.title !== i18n("About")
0078                         },
0079                         Kirigami.Action {
0080                                 text: i18n("Quit")
0081                                 icon.name: "application-exit"
0082                                 shortcut: StandardKey.Quit
0083                                 onTriggered: Qt.quit()
0084                         }
0085                 ]
0086         }
0087         
0088         Component {
0089         id: aboutPage
0090         FormCard.AboutPage {
0091             aboutData: AboutData.aboutData
0092         }
0093     }
0094         
0095     MessageDialog {
0096                 id: removeAllDialog
0097                 title: i18nc("@title:window", "Remove all kountdowns")
0098                 icon: StandardIcon.Warning
0099                 text: i18n("Are you sure you want to delete all your kountdowns?")
0100                 standardButtons: Dialog.Yes | Dialog.Cancel
0101                 onAccepted: KountdownModel.removeAllKountdowns()
0102         }
0103         
0104         // Fetches item from addEditSheet.qml and does action on signal
0105         // Cool thing about signals: they expose the variables defined in them to the function that is listening to them
0106         AddEditSheet { 
0107                 id: addEditSheet
0108                 onEdited: KountdownModel.editKountdown(
0109                         index, 
0110                         name, 
0111                         description, 
0112                         kdate, 
0113                         colour
0114                 );
0115                 onAdded: KountdownModel.addKountdown(
0116                         name, 
0117                         description, 
0118                         kdate, 
0119                         colour
0120                 );
0121                 onRemoved: KountdownModel.removeKountdown(index)
0122         }
0123 
0124         SystemPalette { id: palette; colorGroup: SystemPalette.Active }
0125         // Function called by 'edit' button on card
0126         function openPopulateSheet(mode, index = -1, listName = "", listDesc = "", listDate = nowDate, colour = palette.text) {
0127                 addEditSheet.mode = mode
0128                 addEditSheet.colour = colour;
0129                 addEditSheet.index = index;
0130                 addEditSheet.name = listName
0131                 addEditSheet.description = listDesc
0132                 addEditSheet.kdate = listDate
0133                 addEditSheet.open()
0134         }
0135 
0136         // Initial page to be loaded on app load
0137         pageStack.initialPage: KountdownsPage {}
0138         
0139         Kirigami.Page {
0140                 id: calPage
0141                 visible: false
0142 
0143                 Loader {
0144                         id: calPageLoader
0145                         anchors.fill: parent
0146                         asynchronous: true
0147                         active: false
0148                         visible: calPage.visible
0149                         source: Qt.resolvedUrl("EventsCalendarPage.qml")
0150                         onLoaded: {
0151                                 applicationWindow().pageStack.pop() // Pop out the loadingPage
0152                                 root.pageStack.push(calPage)
0153                                 calPage.visible = true
0154                         }
0155                 }
0156         }
0157 
0158         Kirigami.Page {
0159                 id: loadingPage
0160                 visible: calPageOpen
0161                 Controls.BusyIndicator {
0162                         anchors.fill: parent
0163                         running: loadingPage.visible
0164                 }
0165         }
0166 
0167         function showCalendar() {
0168                 calPageOpen = !calPageOpen
0169                 if (calPageOpen == false) {
0170                         calPageLoader.active = false
0171                         applicationWindow().pageStack.pop() // Pop out calPage
0172                 } else {
0173                         calPageLoader.active = true
0174                         root.pageStack.push(loadingPage)
0175                 }
0176         }
0177 }