Menus, Commands und Toolbars

Wer sich schon mal ein wenig mit dem Command-Framework, den Menüs etc.. in Eclipse 3.3 beschäftigt hat, der merkt ziemlich schnell, wie cool diese Features eigentlich sind.

Ich habe mich kürzlich mal mit der Frage beschäftigt, wie man am einfachsten eine Toolbar in eine Section bekommt. Es hat erstaunlich lange gedauert, bis ich den Trick raus hatte;-).

Was hierfür zu tun ist, sind prinzipiell folgende Schritte:

1. Defintion eines Menü-Eintrags mit entsprechenden Commands

2. Definition eines ContributionManagers

3. Contributions hinzufügen

DAs ganze funktioniert in ungefähr so (der entscheidende Hinweis hierfür kam übrigens vom meiner Ansicht nach sehr, sehr brauchbaren Blog http://aappddeevv.blogspot.com/feeds/posts/default.

Die Definition einer einfachen Menüstruktur könnte beispielsweise so aussehen (dieses Command wird durch die locationUri innerhalb einer Viewtoolbar angezeigt.

<extension
point=“org.eclipse.ui.menus“>
<menuContribution
locationURI=“toolbar:de.md.contributions.toolbar.view“>
<command
commandId=“de.md.contributions.toolbar.mycommand“
style=“push“>
</command>
</menuContribution>
</extension>

Die DEfinition des entsprechenden Commands könnte so aussehen:

<extension
point=“org.eclipse.ui.commands“>
<command
defaultHandler=“de.md.contributions.menu.MyDefaultHandler“
id=“de.md.contributions.toolbar.mycommand“
name=“MyCommand“>
</command>
</extension>

Das ganze könnte dann ungefähr so aussehen, die command sieht man rechts oben.

Das ganze ist sehr einfach, etwas komplizierter wird das ganze, wenn man eine Menüstruktur in einer Section anzeigen möchte. Hierfür definiert man erneut eine Menüstruktur, wir nehmen nochmal genau die gleiche wie gerade eben her und ändern nur die locationUri. Der String den wir hierfür auswählen ist beliebig, muss aber mit dem Prefix „toolbar:“ beginnen.

<extension
point=“org.eclipse.ui.menus“>
<menuContribution
locationURI=“toolbar:de.md.contributions.sectionToolbar“>
<command
commandId=“de.md.contributions.toolbar.mycommand“
icon=“icons/alt_window_16.gif“
style=“push“>
</command>
</menuContribution>
</extension>

Das Snippet, das das eigentlich machen sollte, ist hier:

Section section = toolkit.createSection(sc.getBody(), Section.TITLE_BAR
| Section.CLIENT_INDENT);
section.setText(„Section Titel“);
section.setLayout(new FillLayout());
/*
* Erzeuge Menü
*/
ToolBarManager toolbar = new ToolBarManager(SWT.FLAT);
IMenuService menuService = (IMenuService) getSite().getService(
IMenuService.class);
menuService.populateContributionManager(toolbar,
„toolbar:de.md.contributions.sectionToolbar“);

Composite sectionClient = toolkit.createComposite(section);
section.setTextClient(toolbar.createControl(section));
section.setClient(sectionClient);

Interessant sind hierbei folgende beiden Zeilen:

section.setTextClient(toolbar.createControl(section));

sowie

menuService.populateContributionManager(toolbar,
„toolbar:de.md.contributions.sectionToolbar“);

WIe man hier sieht, funktioniert das ganze:

Advertisements

Kommentar verfassen

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