GEF und die Schwierigkeiten beim Erstellen von Objekten

Wenn man in einem GEF-Editor mit Palette ein grafisches Objekt erstellen will, muss man sich erstmal klar werden welche unterschiedlichen Klassen an diesem Prozess beteiligt sind. Jeder GEF-Editor besitzt eine sogenannte EditDomain. Diese verwaltet einen Kommandostack, mit dessen Hilfe Kommandos, die das Modell und die Darstellung im grafischen Editor ändern ausgeführt werden.

Also bei einem GEF-Editor mit Palette klickt man zuerst einmal in der Palette auf das Objekt welches erstellt werden soll. Jeder Eintrag in der Palette wird durch eine Instanz der Klasse PaletteEntry (oder genauer ToolEntry) dargestellt. Für die meisten Einträge in der Palette wird die Klasse CombinedTemplateCreationEntry verwendet, also nehme ich auch diese Klasse. Dieser wird bei der Instanzierung eine CreationFactory übergeben. Die CreationFactory ist wiederum verantwortlich dafür, das neue Objekt zu erstellen. Damit hätten wir schonmal die ersten beiden Objekte, die am Prozess beteiligt sind.

Nachdem ich also das zu erstellende Objekt ausgewählt habe, klicke ich auf eine Stelle in dem GEF-Editor. An dieser Stelle soll dann das neue Objekt angezeigt werden. Welche Klassen sind nun wieder daran beteiligt? Als erstes einmal der Viewer, welcher den Mausklick entgegennimmt und entsprechend umsetzt. Die Position des Mausklicks und noch ein paar weitere Informationen zusammen mit der CreationFactory bilden dabei einen CreationRequest. Mit Hilfe dieses CreationRequest wird das darunterliegende EditPart ermittelt. Das EditPart muss nun basierend auf dem CreationRequest ein passendes Kommando erstellen. Dazu kann entweder das EditPart selbst das Kommando erstellen oder eine der installierten EditPolicies erstellt das Kommando. Damit sind es jetzt schon 6 beteiligte Objekte.

Dieses Kommando kann nun vom Kommandostack ausgeführt werden. Dabei sollte man auf keinen Fall vergessen, dass ein Kommando auch wieder rückgängig gemacht werden kann. Also unbedingt auch die undo-Funktion implementieren.

Alles in allem sind also 6 Objekte beteiligt an einem Prozess zum Erstellen eines neuen Objekts im grafischen Editor. Ob das viel oder wenig ist, muss jeder selbst entscheiden. Ich hab jedenfalls einige Zeit gebraucht, um die einzelnen Schritte mittels Debugging nachzuvollziehen. Dabei hab ich eine Klasse für den Paletteneintrag (ToolEntry) und die spezielle CreationFactory für das Objekt auf Seite der Palette implementiert. Für den GEF-Editor und die grafische Darstellung habe ich das EditPart und die dazugehörige EditPolicy, sowie das Kommando implementiert.

Schlagwörter: , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: