[SWT.Tree] Austauschbare Trees, native SWT

S

SWTTree

Gast
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).

Java:
this.tree = lastTree;
tree.update();


Wisst ihr, wie ich den Baum austauschen kann?
 

Wildcard

Top Contributor
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.
 
S

SWTTree

Gast
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.
 
S

SWTTree

Gast
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.
 

Wildcard

Top Contributor
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.
 

Ähnliche Java Themen


Oben