This commit is contained in:
team3
2026-09-19 22:50:49 +02:00
parent 9bb3a30783
commit e0c615c73a
9 changed files with 98 additions and 92 deletions

View File

@@ -79,7 +79,7 @@ class NotesPanel extends St.BoxLayout {
_addChildren(folder, depth) {
for (const sub of folder.folders) {
const open = this._expanded.has(sub.path);
this._treeRow(`${open ? '▾' : '▸'} ${sub.name}`, depth, 'folder', sub, () => {
this._treeRow(sub.name, depth, 'folder', sub, () => {
if (open)
this._expanded.delete(sub.path);
else
@@ -89,23 +89,20 @@ class NotesPanel extends St.BoxLayout {
if (open)
this._addChildren(sub, depth + 1);
}
// Dünne Linie trennt Ordner von Notizen
if (folder.folders.length && folder.notes.length) {
const separator = new St.Widget({style_class: 'tree-separator'});
separator.set_style(`margin-left: ${8 + depth * 16}px`);
this._tree.add_child(separator);
}
for (const note of folder.notes)
this._treeRow(note.name, depth, 'note', note, () => this._select({type: 'note', path: note.path, name: note.name}));
}
// Links wählt aus, Mitte benennt um, rechts öffnet das Menü.
_treeRow(text, depth, type, node, onClick) {
const row = textButton(text, (b, mouseButton) => {
if (mouseButton === 3)
this._rowMenu(type, node, b);
const row = textButton(text, (_b, mouseButton) => {
if (mouseButton === 2)
this._rename(type, node);
else if (mouseButton === 3)
this._rowMenu(type, node);
else
onClick();
}, `tree-row ${type}`, type === 'folder' ? 'folder-symbolic' : 'text-x-generic-symbolic');
}, `tree-row ${type}`, type === 'folder' ? (this._expanded.has(node.path) ? 'folder-open-symbolic' : 'folder-symbolic') : 'text-x-generic-symbolic');
row.set_style(`padding-left: ${8 + depth * 16}px`);
if (this._selected?.path === node.path)
row.add_style_class_name('selected');
@@ -202,8 +199,9 @@ class NotesPanel extends St.BoxLayout {
// ---- Anlegen, Umbenennen, Löschen ----
_namePopover(anchor, title, value, onSave) {
const popover = new Popover(anchor);
// Popover am Mauszeiger mit einem Namensfeld.
_namePopover(title, value, onSave) {
const popover = new Popover();
popover.addLabel(title, 'popover-title');
const entry = popover.addEntry(value, 'Name');
popover.setSave(() => onSave(entry.get_text().trim()));
@@ -212,9 +210,9 @@ class NotesPanel extends St.BoxLayout {
return popover;
}
_newNote(anchor, folder) {
_newNote(folder) {
let created = false;
const popover = this._namePopover(anchor, 'Neue Notiz', '', name => {
const popover = this._namePopover('Neue Notiz', '', name => {
const path = this._store.createNote(folder, name);
this._expanded.add(folder);
this._select({type: 'note', path, name});
@@ -227,8 +225,8 @@ class NotesPanel extends St.BoxLayout {
};
}
_newFolder(anchor, parent) {
this._namePopover(anchor, 'Neuer Ordner', '', name => {
_newFolder(parent) {
this._namePopover('Neuer Ordner', '', name => {
const path = this._store.createFolder(parent, name);
this._expanded.add(parent);
this._expanded.add(path);
@@ -237,10 +235,9 @@ class NotesPanel extends St.BoxLayout {
}
_createItems(folder) {
const [x, y] = global.get_pointer();
return [
{label: 'Notiz erstellen', onSelect: () => this._newNote({x, y}, folder)},
{label: 'Ordner erstellen', onSelect: () => this._newFolder({x, y}, folder)},
{label: 'Notiz erstellen', onSelect: () => this._newNote(folder)},
{label: 'Ordner erstellen', onSelect: () => this._newFolder(folder)},
];
}
@@ -248,18 +245,18 @@ class NotesPanel extends St.BoxLayout {
contextMenu(this._createItems(folder));
}
_rowMenu(type, node, anchor) {
_rowMenu(type, node) {
const isFolder = type === 'folder';
const empty = isFolder ? this._store.folderEmpty(node.path) : true;
contextMenu([
...isFolder ? this._createItems(node.path) : [],
{label: 'Umbenennen', onSelect: () => this._rename(type, node, anchor)},
{label: 'Umbenennen', onSelect: () => this._rename(type, node)},
{label: empty ? 'Löschen' : 'Löschen (Ordner ist nicht leer)', sensitive: empty, onSelect: () => this._delete(type, node)},
]);
}
_rename(type, node, anchor) {
this._namePopover(anchor, 'Umbenennen', node.name, name => {
_rename(type, node) {
this._namePopover('Umbenennen', node.name, name => {
if (name === node.name)
return;
const path = type === 'note' ? this._store.renameNote(node.path, name) : this._store.renameFolder(node.path, name);