### **Projektplan: Transformation des AST-Visualisierers zum Interaktiven Editor** * **Datum:** 08.09.2025 11:20 * **Motivation** * Der aktuelle AST-Visualisierer ist ein leistungsfähiges Anzeigetool. Um ihn zu einem interaktiven Werkzeug für die Skript-Entwicklung, \-Analyse und \-Modifikation weiterzuentwickeln, muss eine robuste Architektur für Zustandsverwaltung, Bearbeitung und Persistenz geschaffen werden. * **Ziel** * Die Entwicklung einer flexiblen Editor-Architektur, die eine klare Trennung zwischen dem logischen AST-Modell und seiner visuellen Repräsentation gewährleistet. Das System muss komplexe Anforderungen erfüllen: Es soll optionale Darstellungsmodi (Baum- vs. Graphen-Ansicht), zwei Arten von Metadaten (logisch vs. instanzspezifisch) und eine hohe Datenintegrität bei internen (z.B. Umsortieren) und externen (z.B. Einfügen von LLM-Code) Bearbeitungen sicherstellen. * **Ergebnis** * Ein interaktiver, visueller AST-Editor mit einem hochentwickelten Zustandsmanagement. Die Architektur bietet eine nahtlose Benutzererfahrung, bei der Layout-Anpassungen und Zustände (z.B. eingeklappte Knoten) auch bei komplexen Operationen wie Refactoring oder dem Mergen von extern modifiziertem Code intelligent erhalten bleiben. Das System ist durch ein flexibles JSON-Format persistent und interoperabel. --- ### **TODO: Nächste Schritte** 1. **Fundament: ViewModel-Schicht und Stabile IDs einführen** * **Beschreibung:** Das Kernstück der neuen Architektur schaffen. Eine TVisualNodeViewModel-Klasse wird als Vermittler zwischen dem IAstNode-Modell und der TAuraNode-Ansicht eingeführt. * **Umsetzung:** * Jede TVisualNodeViewModel-Instanz erhält beim Erstellen eine einzigartige, permanente und strukturunabhängige TViewModelID (z.B. Int64). * Der TAstToAuraNodeVisitor wird so umgebaut, dass er primär einen Baum aus ViewModel-Objekten erzeugt, welcher die Hierarchie des AST widerspiegelt. 2. **Zustandsverwaltung: Metadaten-System implementieren** * **Beschreibung:** Die getrennte Speicherung von logischen und instanzspezifischen Metadaten implementieren. * **Umsetzung:** * **Logische Metadaten:** Eine zentrale TDictionary\ für Eigenschaften erstellen, die für alle Instanzen eines Knotens gelten (z.B. Farbkodierung). * **Instanz-Metadaten:** Eine TDictionary\ für Eigenschaften erstellen, die nur für eine bestimmte visuelle Instanz gelten (z.B. IsCollapsed, Position auf der Leinwand). * Die Rendering-Logik anpassen, um beide Metadatentypen beim Zeichnen eines TAuraNode zu berücksichtigen. 3. **Persistenz: JSON-Serialisierung erweitern** * **Beschreibung:** Das Speichern und Laden des gesamten Editor-Zustands ermöglichen. * **Umsetzung:** * Einen Serialisierungsprozess entwerfen, der drei getrennte Bereiche in der JSON-Datei ablegt: 1. Den reinen IAstNode-Baum. 2. Die logischen Metadaten, verknüpft über eine temporäre ID des IAstNode. 3. Die instanzspezifischen Metadaten, verknüpft über die stabile TViewModelID. 4. **Interaktion: Grundlegende Editierbarkeit herstellen** * **Beschreibung:** Dem Benutzer erlauben, den AST-Graphen zu verändern (Knoten hinzufügen, löschen, umsortieren). * **Umsetzung:** * Das **Command Pattern** implementieren, bei dem jede Änderung eine Execute- und Unexecute-Methode hat (für Undo/Redo). * Jeder Command ist dafür verantwortlich, sowohl das IAstNode-Modell als auch den TVisualNodeViewModel-Baum konsistent zu halten. Da die Metadaten an die stabilen IDs gekoppelt sind, bleiben sie bei diesen Operationen automatisch erhalten. 5. **Fortgeschrittene Interaktion: "Smart Paste" / Abgleich-Algorithmus** * **Beschreibung:** Das intelligente Einfügen von extern veränderten AST-Teilbäumen ermöglichen. * **Umsetzung:** * Einen "Diff & Merge"-Algorithmus entwickeln. Beim Einfügen vergleicht dieser den neuen AST-Teilbaum mit dem alten. * Bei äquivalenten Knoten werden die bestehenden TVisualNodeViewModel-Instanzen (samt ihrer IDs und Metadaten) wiederverwendet, um den visuellen Zustand zu erhalten. Nur bei echten Änderungen oder neuen Knoten werden neue ViewModels mit neuen IDs erzeugt. 6. **Optionale Ansicht: Eindeutige Knoten-Visualisierung ("Graph"-Modus)** * **Beschreibung:** Den optionalen Modus implementieren, in dem jeder IAstNode nur einmal dargestellt wird. * **Umsetzung:** * Den TAstToAuraNodeVisitor um einen Modus erweitern. In diesem Modus führt er eine TDictionary\, um bereits erstellte ViewModels für einen IAstNode zu finden und wiederzuverwenden, anstatt neue zu erstellen. Stattdessen wird nur eine neue Verbindungslinie gezeichnet.