Warning, /office/klevernotes/src/contents/ui/todoEditor/ToDoView.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2023 Louis Schul <schul9louis@gmail.com>
0003
0004 import QtQuick 2.15
0005 import QtQuick.Layouts 1.15
0006 import QtQuick.Controls 2.15 as Controls
0007
0008 import org.kde.kirigami 2.19 as Kirigami
0009 import org.kde.kirigamiaddons.formcard 1.0 as FormCard
0010
0011 import org.kde.Klever 1.0
0012
0013 import "qrc:/contents/ui/dialogs/todoDialog"
0014
0015 ColumnLayout {
0016 id: root
0017
0018 property list<Kirigami.Action> actions: [
0019 Kirigami.Action {
0020 id: clearTodosAction
0021
0022 icon.name: "edit-clear-history"
0023 text: i18nc("@label:button, checked as in 'the todos that are checked'", "Clear checked")
0024
0025 onTriggered: clearCheckedTodos()
0026 }
0027 ]
0028 property string path
0029 property int alreadySavedCount: 0
0030
0031 onPathChanged: {
0032 todoModel.clear()
0033 setTodos()
0034 }
0035
0036 ToDoDialog {
0037 id: todoDialog
0038
0039 onAccepted: {
0040 if (name.length > 0) {
0041 if (callerModelIndex < 0) {
0042 todoModel.append({
0043 "todoTitle": name,
0044 "todoDesc": description.trim(),
0045 "todoChecked": false
0046 })
0047 } else {
0048 todoModel.setProperty(callerModelIndex, "todoTitle", name)
0049 todoModel.setProperty(callerModelIndex, "todoDesc", description)
0050 }
0051 }
0052 saveTodos()
0053 name = ""
0054 description = ""
0055 callerModelIndex = -1
0056 }
0057 }
0058
0059 Kirigami.Card {
0060 Layout.fillWidth: true
0061 Layout.fillHeight: true
0062
0063 Kirigami.CardsListView {
0064 id: cardsView
0065
0066 anchors.fill: parent
0067
0068 model: todoModel
0069 delegate: TodoDelegate {}
0070 }
0071
0072 ListModel {
0073 id: todoModel
0074 }
0075 }
0076
0077 FormCard.AbstractFormDelegate {
0078 Layout.fillWidth: true
0079
0080 contentItem: RowLayout {
0081 spacing: 0
0082
0083 Kirigami.Icon {
0084 width: Kirigami.Units.iconSizes.medium
0085 height: Kirigami.Units.iconSizes.medium
0086
0087 source: "list-add-symbolic"
0088
0089 Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0090 }
0091 }
0092
0093 onClicked: {
0094 todoDialog.open()
0095 }
0096 }
0097
0098 function clearCheckedTodos() {
0099 for (var idx = todoModel.count-1 ; idx >= 0 ; idx--){
0100 const model = todoModel.get(idx)
0101 if (model.todoChecked) {
0102 todoModel.remove(idx,1)
0103 }
0104 }
0105 saveTodos()
0106 }
0107
0108 function setTodos() {
0109 const todos = DocumentHandler.getJson(root.path).todos
0110 if (!todos) return
0111 root.alreadySavedCount = todos.length
0112
0113 todos.forEach(todo => todoModel.append(todo))
0114 }
0115
0116 function saveTodos() {
0117 let json = {"todos":[]}
0118
0119 for (var idx = 0 ; idx < todoModel.count ; idx++){
0120 const model = todoModel.get(idx)
0121 json.todos.push(model)
0122 }
0123 DocumentHandler.saveJson(json, root.path)
0124 }
0125 }