50 lines
1.3 KiB
QML
50 lines
1.3 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
|
|
// Todo page selector wrapper - prepares menu items and handles selection
|
|
QtObject {
|
|
id: root
|
|
|
|
property var pluginApi: null
|
|
property string selectedText: ""
|
|
property var todoPages: []
|
|
property var selectionMenu: null
|
|
|
|
signal pageSelected(int pageId, string pageName)
|
|
|
|
function buildMenuModel() {
|
|
const model = [];
|
|
|
|
// Add existing todo pages only
|
|
for (let i = 0; i < todoPages.length; i++) {
|
|
const page = todoPages[i];
|
|
model.push({
|
|
"label": page.name || pluginApi?.tr("notecards.untitled-placeholder"),
|
|
"action": "page-" + page.id,
|
|
"icon": "list",
|
|
"pageId": page.id
|
|
});
|
|
}
|
|
|
|
return model;
|
|
}
|
|
|
|
function show(text, pages) {
|
|
selectedText = text || "";
|
|
todoPages = pages || [];
|
|
|
|
if (selectionMenu) {
|
|
const menuItems = buildMenuModel();
|
|
selectionMenu.show(menuItems);
|
|
} else {}
|
|
}
|
|
|
|
function handleItemSelected(action) {
|
|
if (action.startsWith("page-")) {
|
|
const pageId = parseInt(action.replace("page-", ""));
|
|
const page = todoPages.find(p => p.id === pageId);
|
|
root.pageSelected(pageId, page ? page.name : pluginApi?.tr("notecards.untitled-placeholder"));
|
|
}
|
|
}
|
|
}
|