Eclipse RCP
20.09.2010 - 24.09.2010, Hamburg
git
07.10.2010 - 08.10.2010, Essen
Eclipse RCP

Commands II

Commands in selbstdefinierte Menüs einfügen

Auch selbstdefinierten Menüs können nachträglich mit einer menuContribution Commands oder Untermenüs hinzugefügt werden. Dazu wird die locationURI menu:[menuid] verwendet. Möchten wir im zuvor erzeugten Menü com.example.somemenu noch einen weiteren Eintrag ergänzen, könnten wir dies auch über eine separate Contribution erreichen. Diesen Weg beschreitet man vor allem, wenn man ein bestehendes Menü aus einem anderen Plug-in um weitere Menüeinträge ergänzen möchte:

Menü Beispiel

<extension point="org.eclipse.ui.menus">
    <menuContribution
        locationURI="menu:com.example.somemenu?before=somemenuitem">
        <command
            commandId="org.eclipse.ui.file.refresh"
            style="push">
        </command>
    </menuContribution>
</extension>

Menü Beispiel

Commands in die Toolbar einfügen

Die Verwendung von Commands in der Toolbar erfolgt analog zu Menüs über den Extension Point org.eclipse.ui.menus. Als locationURI gibt man jedoch toolbar:org.eclipse.ui.main.toolbar an, statt menu wird ein toolbar-Element verwendet:

<extension point="org.eclipse.ui.menus">
    <menuContribution
        locationURI="toolbar:org.eclipse.ui.main.toolbar">
        <toolbar id="com.example.sometoolbar">
            <command
                commandId="com.example.somecommand"
                icon="icons/alt_window_16.gif"
                style="push">
            </command>
        </toolbar>
    </menuContribution>
</extension>

Toolbar Beispiel

Commands zu Views hinzufügen

Über die locationURI toolbar:<viewId> können Sie einen Command zu einem View contributen:

<menuContribution locationURI="toolbar:com.example.someview">
   <command
         commandId="com.example.somecommand"
         icon="icons/alt_window_16.gif"
         style="push">
   </command>
</menuContribution>

Commands zum View

Commands in Kontextmenüs einfügen

Um einen Command in ein Kontextmenü hinzuzufügen, sollten Sie das Menü mit einem speziellen Separator an der Stelle, an der später hinzugefügte Commands erscheinen sollen, versehen:

Command in Popup-Menü

MenuManager menuManager = new MenuManager();
menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
table.setMenu(menuManager.createContextMenu(table));

Zudem muss das Kontextmenü bei der Workbench registriert werden. Dies geschieht über die Site des View- oder EditorParts. Die Angabe des ersten Parameters ID ist optional. Wird sie weggelassen, wird das Menü mit der ID des Parts registriert:

getSite().registerContextMenu("com.example.somepopup", menuManager, tableViewer);

Handelt es sich bei dem Control um einen JFace Viewer, sollte dieser der Site als SelectionProvider gesetzt werden, damit die Commands im Popup-Menü auf die aktuelle Selektion reagieren können:

getSite().setSelectionProvider(tableViewer);

Nun können Sie dem Popup-Menü über die URI popup:<menuId> Commands hinzufügen:

Popupmenu contribution

<extension point="org.eclipse.ui.menus">
    <menuContribution locationURI="popup:com.example.somepopup">
        <command
            commandId="com.example.somecommand"
            icon="icons/alt_window_16.gif"
            style="push">
        </command>
    </menuContribution>
</extension>

Handler konditional aktivieren

Mit einem activeWhen-Element in der Handler-Contribution können Bedingungen festgelegt werden, unter denen ein Handler aktiv sein soll:

Konditionales Aktivieren von Handlern mit Expressions

Ist kein Handler für einen Command aktiv, wird der Command deaktiviert, d.h. der Menüeintrag oder Toolbar-Button erscheint ausgegraut. Sind mehrere Handler für einen Command aktiv, greift der spezifischere Handler.

Für diese Ausdrücke stehen eine Reihe von Variablen zur Verfügung, mit denen Sie auf die Workbench-Umgebung reagieren können:

Eine Übersicht der Variablen finden Sie unter Variables and the Command Framework sowie in der Klasse ISources:

Um die Funktionsweise zu verdeutlichen im Folgenden einige Beispiele für typische Ausdrücke zur Aktivierung von Command-Handlern:

Rezepte zu Commands

Bianca, 25. Mai, 11:47 Uhr

Gibt es auch eine Möglichkeit mit dieser Methode ein Menü nur dann zu aktivieren, wenn die Perpektive dazu aktiv ist?

Über Ihre Kommentare und Hinweise freue ich mich sehr:
Ralf Ebert | Eclipse RCP Buch | Commands II