M15: Übersicht-Tab — Diagramm-Fixes + Direktes Bearbeiten

Diagramm-Fixes: echter Geometrie-Bug behoben (VLAN-/Bridge-Port-Kanten
laufen innerhalb derselben Spalte, eine Firewall/NAT-Kante rückwärts —
die Kurven-Berechnung nahm immer "rechts raus, links rein" an und schoss
dabei über den Canvas hinaus, links abgeschnitten). Hover-Flackern durch
Trägheit + Beschränkung auf hervorgehobene Kanten behoben. Klick-vs-
Hover-Priorität vertauscht (Klick gewinnt jetzt über Hover, vorher
verdrängte das Streifen fremder Karten beim Nachfahren einer Linie die
Auswahl). Linien-Klick zeigt jetzt volle Erklärung im rechten Panel
(EdgeDetailView) statt nur Hover-Tooltip. Ein Auto-Fit-Versuch
(GeometryReader) brach das Scroll-Verhalten und wurde wieder
zurückgezogen.

Neue Fähigkeit: ein Knoten (IP-Adresse, Pool, DHCP-Server/-Netzwerk/
-Client, Route, Firewall-Filter-/NAT-Regel, WireGuard-Peer) lässt sich
direkt über denselben Dialog wie im Experte-Tab bearbeiten und
zurückschreiben (OverviewNode.EditTarget + wiederverwendete
ExpertItemEditView). Live bestätigt: Kommentar-Änderung an einer
Firewall-Regel. 59 Unit-Tests grün.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YDmUd93KxsYGr2kLTotWnG
This commit is contained in:
Kay
2026-09-15 12:50:13 +02:00
co-authored by Claude Sonnet 5
parent bf2ae58a20
commit 216206b29f
8 changed files with 608 additions and 64 deletions
+89 -5
View File
@@ -752,6 +752,70 @@ beim Ändern die RouterOS-Suffix-Form zurück) — angewendet auf DHCP-Server
"Lease-Zeit" und Adress-Listen "Ablaufzeit". Nutzer bestätigte danach:
"funktioniert".
## M15: Übersicht-Tab — Diagramm-Fixes + Direktes Bearbeiten
Auf Nutzerwunsch zwei Themen in einer Session: erst mehrere echte Bugs im
bestehenden Übersicht-Diagramm gefunden und gefixt, danach eine neue
Fähigkeit ergänzt — ein Knoten direkt anklicken und bearbeiten, statt nur
anzusehen.
**Diagramm-Fixes** (alle live an "Verbindungslinien werden links
abgeschnitten" / "Hover springt ständig" diagnostiziert):
- Erst versucht, das Diagramm beim Öffnen automatisch ans Fenster
anzupassen (`GeometryReader` + einmalig gesetzter Scale) — hat den
ScrollView-Scrollzustand durcheinandergebracht (Inhalt verschob sich
nach dem ersten Layout, oberer Teil nicht mehr erreichbar). **Wieder
komplett zurückgezogen**, zurück zur ursprünglichen manuellen
Zoom-Steuerung (`-`/`100%`/`+`).
- **Echter Geometrie-Bug in `EdgesCanvas`:** VLAN-/Bridge-Port-Kanten
laufen innerhalb derselben Spalte (Interface → Interface), eine
Firewall/NAT-Kante läuft rückwärts (rechts nach links) — die
Kurven-Berechnung nahm aber immer "rechts aus dem Start-, links in den
Zielknoten" an, wodurch die Kontrollpunkte bei diesen Fällen weit über
den Canvas hinausschossen (auch ins Negative) und am linken Rand
abgeschnitten wurden. Fix: Kurvenaufbau jetzt richtungsabhängig
(gleiche Spalte → kleine Ausbuchtung rechts, rückwärts → gespiegelte
S-Kurve).
- **Hover-Instabilität:** Mehrere Kanten verlassen denselben Knotenpunkt
am selben Punkt — dort sind sie fast gleich nah am Cursor, kleinste
Mausbewegung ließ die Auswahl ständig springen. Fix in zwei Schritten:
(1) Trägheit — einmal gehoverte Kante bleibt aktiv, solange der Cursor
nah genug bleibt, statt bei jedem Event neu die global nächste zu
wählen; (2) Hover-Kandidaten auf die gerade hervorgehobenen
(verbundenen) Kanten beschränkt, statt gegen alle Kanten im Diagramm zu
prüfen.
- **Klick-vs-Hover-Priorität vertauscht:** `highlightNodeID` ließ Hover
über Klick gewinnen — beim Nachfahren einer Linie zu ihrem Ziel
streifte der Cursor oft andere, unbeteiligte Karten, deren Hover dann
die Hervorhebung des angeklickten Knotens verdrängte. Fix: Klick-
Auswahl gewinnt jetzt über Hover (Hover dient nur noch als Vorschau,
solange nichts ausgewählt ist).
- Verbindungslinie anklicken zeigt jetzt ausführliche, verständliche
Infos im rechten Panel (`EdgeDetailView`: Klartext-Erklärung pro
Verbindungsart, "Von"/"Nach" mit Sprung zum jeweiligen Knoten) — vorher
gab es nur den kleinen Hover-Tooltip mit den bloßen Rohdaten.
**Direktes Bearbeiten:** `OverviewNode.EditTarget` (Menüpfad, REST-Pfad,
RouterOS-eigene `.id`) an jedem Knoten, der sich sauber auf genau ein
Router-Item abbildet — IP-Adressen, Pools, DHCP-Server/-Netzwerke/
-Clients, Routen, Firewall-Filter-/NAT-Regeln, WireGuard-Peers. Klick auf
"Bearbeiten" im Detailpanel öffnet dieselbe `ExpertItemEditView`-Sheet
wie der Experte-Tab (dafür `private` entfernt, jetzt modulweit
sichtbar), über eine eigene `ExpertViewModel`-Instanz — gleiche Felder/
Tooltips, gleicher Bestätigungsdialog, gleicher Schreibpfad, keine
Duplikation der Schema-/Write-Logik. Nach dem Speichern lädt die
Übersicht automatisch neu. Bewusst nicht abgedeckt: physische/VLAN/
Bridge-Interfaces (Felder über mehrere typ-spezifische Menüs verteilt)
und Adress-Listen-Knoten (fassen mehrere Einträge zusammen, kein 1:1-
Bezug zu einem Router-Item).
**Live gegen Hardware verifiziert** — Nutzer bestätigte Kommentar-
Änderung an einer Firewall-Regel über den neuen Bearbeiten-Weg
("funktioniert"). Alle 59 Unit-Tests grün, inkl. neuer Tests für
`editTarget` (`OverviewGraphTests.
testEditableNodesCarryTheirRouterOSMenuAndItemID`).
## Stand der Milestones
- ✅ M1M4: Projektgerüst, Connect, Backup, WAN/LAN/DHCP, VLAN — gegen
@@ -795,11 +859,12 @@ beim Ändern die RouterOS-Suffix-Form zurück) — angewendet auf DHCP-Server
WAN-Ausfall).
- ✅ M11: Übersicht-Tab (Diagramm: Interfaces→IP→DHCP/Pools→Routen→
Firewall/NAT, echte Referenz-Kanten, nach Verbindungsart eingefärbt,
Hover/Klick-Hervorhebung) — **live gegen Hardware verifiziert**, rein
lesend (kein `apply()`), vom Nutzer bestätigt ("das gefällt mir schon
sehr gut"). Deckt bewusst nicht ab: VPN/WLAN-Sicherheitsprofile/Queues/
System/Werkzeuge/Mangle/Raw (siehe `OverviewGraph.unmappedAreas`),
weiterhin nur über den Experte-Tab erreichbar.
Hover/Klick-Hervorhebung) — **live gegen Hardware verifiziert**, vom
Nutzer bestätigt ("das gefällt mir schon sehr gut"). War anfangs rein
lesend, seit M15 kann ein Knoten direkt bearbeitet werden (siehe
unten) — deckt weiterhin bewusst nicht ab: VPN/WLAN-Sicherheitsprofile/
Queues/System/Werkzeuge/Mangle/Raw (siehe `OverviewGraph.
unmappedAreas`), weiterhin nur über den Experte-Tab erreichbar.
- ✅ M12: Geräte-Tab (LAN-Scanner: DHCP-Leases+ARP+Bridge-Host, eine
Tabelle pro physischem Port, "Feste IP zuweisen" für dynamische Leases,
"Feste Zuweisung entfernen" für den Rückweg) — **live gegen Hardware
@@ -844,6 +909,15 @@ beim Ändern die RouterOS-Suffix-Form zurück) — angewendet auf DHCP-Server
Wizard/Experte-Tab. Dark Mode auf Nachfrage geprüft und ohne
Codeänderung bestätigt funktionierend (keine feste Farbwerte/
Appearance-Überschreibung im Code).
- ✅ M15: Übersicht-Tab — mehrere Diagramm-Bugs gefixt (Verbindungslinien
am linken Rand abgeschnitten bei gleicher-Spalte-/Rückwärts-Kanten,
nervöses Hover, Klick-Auswahl wurde von Hover unbeteiligter Karten
verdrängt) plus neue Fähigkeit: Knoten (IP-Adresse, Pool, DHCP-Server/
-Netzwerk/-Client, Route, Firewall-Filter-/NAT-Regel, WireGuard-Peer)
direkt über dieselbe Sheet wie im Experte-Tab bearbeiten und
zurückschreiben. **Live gegen Hardware verifiziert** — Nutzer
bestätigte Kommentar-Änderung an einer Firewall-Regel über den neuen
Weg ("funktioniert").
## Nächste Schritte
@@ -912,6 +986,16 @@ beim Ändern die RouterOS-Suffix-Form zurück) — angewendet auf DHCP-Server
Hintergrund direkt am Zeileninhalt (`Text` in `RoundedRectangle`-
Fill) gesetzt. Alles vom Nutzer live in Xcode bestätigt ("passt
gut").
11. **M15-Bearbeiten-Funktion deckt Interfaces und Adress-Listen bewusst
nicht ab** — physische/VLAN/Bridge-Interfaces verteilen ihre Felder
über mehrere typ-spezifische RouterOS-Menüs (`/interface ethernet`,
`/interface bridge`, `/interface vlan`, ...), ein sauberes
`OverviewNode.EditTarget` bräuchte pro Interface-Typ eine eigene
Zuordnung statt der generischen `/interface`. Adress-Listen-Knoten
fassen mehrere Einträge in einem Knoten zusammen, kein 1:1-Bezug zu
einem Router-Item — bräuchte eine andere UI (Liste statt Formular).
Beides bei Bedarf nachrüstbar, für diese Session bewusst
zurückgestellt.
Gitea-Remote `origin` ist eingerichtet und wird laufend gepusht (siehe
oben) — dieser Hinweis war veraltet, korrigiert am 2026-09-15.