mirror of
https://github.com/celesrenata/end-4-flakes.git
synced 2026-06-07 02:59:26 -05:00
ac6d3adeb9
BREAKING CHANGE: Remove external dots-hyprland dependency - Imported all essential configs from dots-hyprland/installer-replication - Added complete configs/ directory with: - hypr/ - Hyprland configuration - quickshell/ - Quickshell widgets and config - applications/ - Application configurations - scripts/ - Utility scripts - matugen/ - Material You theming - Updated flake.nix to use local ./configs instead of external repo - Simplified update-flake script (removed external repo management) - Updated README to reflect self-contained architecture - All builds pass with local configurations Benefits: - No external repository dependencies - Faster builds (no network dependencies) - Version controlled configs in single repo - Easier maintenance and development - Complete installer replication in one place
88 lines
2.2 KiB
QML
88 lines
2.2 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import qs.modules.common
|
|
import Quickshell;
|
|
import Quickshell.Io;
|
|
import QtQuick;
|
|
|
|
/**
|
|
* Simple to-do list manager.
|
|
* Each item is an object with "content" and "done" properties.
|
|
*/
|
|
Singleton {
|
|
id: root
|
|
property var filePath: Directories.todoPath
|
|
property var list: []
|
|
|
|
function addItem(item) {
|
|
list.push(item)
|
|
// Reassign to trigger onListChanged
|
|
root.list = list.slice(0)
|
|
todoFileView.setText(JSON.stringify(root.list))
|
|
}
|
|
|
|
function addTask(desc) {
|
|
const item = {
|
|
"content": desc,
|
|
"done": false,
|
|
}
|
|
addItem(item)
|
|
}
|
|
|
|
function markDone(index) {
|
|
if (index >= 0 && index < list.length) {
|
|
list[index].done = true
|
|
// Reassign to trigger onListChanged
|
|
root.list = list.slice(0)
|
|
todoFileView.setText(JSON.stringify(root.list))
|
|
}
|
|
}
|
|
|
|
function markUnfinished(index) {
|
|
if (index >= 0 && index < list.length) {
|
|
list[index].done = false
|
|
// Reassign to trigger onListChanged
|
|
root.list = list.slice(0)
|
|
todoFileView.setText(JSON.stringify(root.list))
|
|
}
|
|
}
|
|
|
|
function deleteItem(index) {
|
|
if (index >= 0 && index < list.length) {
|
|
list.splice(index, 1)
|
|
// Reassign to trigger onListChanged
|
|
root.list = list.slice(0)
|
|
todoFileView.setText(JSON.stringify(root.list))
|
|
}
|
|
}
|
|
|
|
function refresh() {
|
|
todoFileView.reload()
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
refresh()
|
|
}
|
|
|
|
FileView {
|
|
id: todoFileView
|
|
path: Qt.resolvedUrl(root.filePath)
|
|
onLoaded: {
|
|
const fileContents = todoFileView.text()
|
|
root.list = JSON.parse(fileContents)
|
|
console.log("[To Do] File loaded")
|
|
}
|
|
onLoadFailed: (error) => {
|
|
if(error == FileViewError.FileNotFound) {
|
|
console.log("[To Do] File not found, creating new file.")
|
|
root.list = []
|
|
todoFileView.setText(JSON.stringify(root.list))
|
|
} else {
|
|
console.log("[To Do] Error loading file: " + error)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|