# [SWT.Tree] Austauschbare Trees, native SWT



## SWTTree (25. Mai 2011)

Hallo,

ich benutze in einem eigens erstellten Editor einen SWT.Tree, keinen TreeViewer.

Momentan implementiere ich eine Redo / Undo Funktion. Die Organisation der Stacks funktioniert. Die Stacks speichern die alten Tree's.

Führt der User ein Undo aus, so wird der alte Baum aus dem Stack geholt. Nun weiß ich nicht, wie ich den aktuellen Baum mit dem Alten ersetze.

Ich habe es mit update() und redraw() probiert (auf dem alten Baum).


```
this.tree = lastTree;
tree.update();
```


Wisst ihr, wie ich den Baum austauschen kann?


----------



## Wildcard (25. Mai 2011)

Dir ist klar das du ein unglaublich teures (=speicherintensives) Undo implementierst und es auch noch viel Aufwändiger als eine Standardlösung ist?
Wenn du tatsächlich zwischen n Bäumen hin und herschalten möchtest, dann brauchst du ein Composite mit Stacklayout das dann den aktiven Baum austauscht.

Falls du alternativen Lösungen gegenüber aufgeschlossen bist:
Undo/Redo sollte immer auf Modellebene, und nicht auf UI Ebene behandelt werden. Wenn du ein Modell hast, nimm lieber einen TreeViewer, die sind viel eleganter als Low-Level Widgets.
Am einfachsten wird alles wenn du ein EMF Modell verwendest, dann bekommst du nicht nur die Modellklassen generiert, sondern auch direkt einen Content- und LabelProvider für den TreeViewer und voll funktionierenden Undo/Redo Support. Anders gesagt, du bekommst die gleiche Funktionalität (aber resourcenschonender implementiert) die du gerade entwickeln möchtest ohne eine einzige Zeile Code zu schreiben.


----------



## SWTTree (26. Mai 2011)

Hallo,

vielen Dank für die Informationen. Bin erst seit 2 Monaten bei RCP und EMF sagte mir bis dato nichts. Ein Model liegt nicht unter meiner GUI, daher auch kein JFace, da ich erst aus dem fertigen Baum Modelle in XML abbilde.Stacklayout klingt aber tatsächlich seeeehr interessant. Das schaue ich mir einmal an. Einziges Problem was ich mir dabei überlege (gerade, ohne nachgesehen zu haben), dass ich die Bäume erst zur Laufzeit generieren lasse. Kann ich dem StackLayout diese dann auch erst zur Laufzeit zuordnen und tauschen? Werde ich mir ansehen, vielen Dank soweit für die Hinweise.


----------



## SWTTree (26. Mai 2011)

Habe ein Snippet geschrieben, welches zur Laufzeit Trees erzeugt und deren Composites auf dem contentPanel, welches das StackLayout besitzt, wechselt. Das erfüllt bravurös seinen Zweck, danke für den Tipp.

Dann kann ich das nun in der Hauptanwendung implementieren.

Solltest Du Verbesserungsvorschläge haben, jederzeit gern.


----------



## Gast2 (26. Mai 2011)

SWTTree hat gesagt.:


> Solltest Du Verbesserungsvorschläge haben, jederzeit gern.



Verbesserungsvorschläge hat wildcard oben genannt. Und das lohnt sich anzuschauen weil EMF Undo/Redo Support wunderbar funktioniert.


----------



## Wildcard (26. Mai 2011)

> Ein Model liegt nicht unter meiner GUI, daher auch kein JFace, da ich erst aus dem fertigen Baum Modelle in XML abbilde


Ein Modell solltest du immer haben, das ist der Kern deiner Anwendung.
Wenn du EMF dafür verwendest sparst du dir nicht nur die Arbeit mit dem Tree und Undo/Redo, sondern EMF kann das Modell anschließend auch direkt als XML speichern (wieder ohne eine einzige Zeile Code dafür zu schreiben). Du sparst dir also wirklich jede Menge Arbeit.


----------

