Three things the graph view did differently from the scene view, or not at all: Panning moves to the middle button, which works from anywhere – a node under the pointer included, since NodeView now lets that one button bubble up. Shift-drag on empty canvas pans too. The left button pulls a rubber band instead and no longer pans. Nodes can be selected several at a time: by band, by ctrl/shift-click, moved together, deleted together, each as one undo step. The selection model gains `nodeIds` alongside the objects' `objectIds`. Fit really fits. It used to pin the zoom at 1 and merely centre, so a graph larger than the view always left nodes hanging out, and it sized every node with one guessed height although real ones vary with their port count. Both sums now live in editor/graph/framing.ts as pure functions, which is what made the defect testable at all. The band selects any node it overlaps rather than one whose position it contains, unlike the scene view: nodes are large rectangles, and a band drawn visibly across one has to catch it.
2.2 KiB
2.2 KiB
- panning per linksklick drag soll raus, dafür beim mittelklick (aber egal ob man ins leere klick oder sich über einem node befindet) = wie bei scene view
- mehrere nodes gleichzeitig auswählbar um dadurch mehrere zu bewegen oder zu löschen. auch mit rect-auswahl selektierbar = auch wie bei scene view
- was anderes: wenn ich in der graph view auf "fit" klicke, dann fittet es nicht wirklich (es befinden sich nodes halb außerhalb)
Umgesetzt (2026-09-09), alle drei Punkte.
- Panning nur noch mit der mittleren Taste — und zwar von ueberall, auch wenn der Zeiger ueber einem Node steht: der NodeView laesst den Mittelklick bewusst durchblubbern, statt ihn wie jeden anderen Klick zu schlucken. Shift+Links auf leerer Flaeche pannt zusaetzlich, genau wie im Scene-View. Die linke Taste pannt gar nicht mehr.
- Mehrfachauswahl: Ziehen auf leerer Flaeche spannt ein Gummiband auf, das jeden beruehrten
Node auswaehlt; Ctrl/Shift-Klick nimmt einzelne dazu oder raus; das Ziehen eines Nodes der
Auswahl bewegt alle;
Delete(und das Kontextmenue) loescht alle — jeweils als ein Undo-Schritt (CompoundCommand). Bewusster Unterschied zum Scene-View: dort entscheidet die Position eines Objekts, hier die Ueberschneidung mit dem Rechteck. Nodes sind grosse Kaesten — ein Band, das sichtbar quer durch einen Node geht, muss ihn fangen. - Fit fittet wirklich. Die alte Fassung setzte den Zoom hart auf
1und zentrierte nur — war der Graph groesser als die Ansicht, hingen Nodes danach zwangslaeufig heraus. Ausserdem rechnete sie mit einer geschaetzten Node-Hoehe (80) fuer alle, obwohl echte Nodes je nach Portzahl deutlich hoeher sind. Jetzt wird jeder Node mit seiner gezeichneten Groesse gemessen und der Zoom so gewaehlt, dass alles hineinpasst (nie ueber 1 hinaus vergroessert).
Die Geometrie dahinter liegt als reine Funktion in src/editor/graph/framing.ts
(boxesInBand, frameBoxes), nicht im Panel — genau diese Rechnung war der Bug aus Punkt 3 und
war vorher von keinem Test erreichbar. Die Mehrfachauswahl selbst sitzt im Selektionsmodell
(nodeSelection/toggleNode, symmetrisch zu den Szenenobjekten), nicht im Canvas.