Menü- und Toolbar-Pfade

Sie haben bereits viele Aktionsergänzungen kennen gelernt, die den Pfad für die Position der Aktion angeben. Die Bedeutung dieser Pfade soll im Folgenden näher erläutert werden, und zwar zunächst am Beispiel des Workbench-Menüs Hilfe.

Benannte Gruppen

Die Positionen für das Einfügen neuer Menüs, neuer Menüoptionen oder neuer Symbolleistenelemente werden durch benannte Gruppen definiert. Eine benannte Gruppe ist mit einem Segment oder einem Platzhalter vergleichbar, mit dessen Hilfe die Menü- oder Symbolleistenergänzung an einer bestimmten Stelle im Menü oder in der Symbolleiste eingefügt werden kann.

Die Workbench definiert alle Namen von Gruppensegmenten in der Klasse IWorkbenchActionConstants. In allen Workbench-Menü werden benannte Gruppen an den Stellen platziert, an denen zu erwarten ist, dass Plug-ins neue Aktionen einfügen.

Die folgende Beschreibung des Menüs "Hilfe" stammt aus der Klassendefinition IWorkbenchActionConstants.

   Standard Help menu actions
   Start group - HELP_START - "start"
   End group - HELP_END - "end"
   About action - ABOUT - "About"

Das Workbench-Menü "Hilfe" besteht in der Standardeinstellung aus einer benannten Gruppe namens "Starten", auf die eine benannte Gruppe namens "Beenden" und dann eine Aktion "Info über" folgt. Wenn Sie zwei Gruppen definieren, erhalten die Plug-ins ein höheres Maß an Steuerungsmöglichkeiten über die Positionierung der ergänzten Elemente innerhalb des Hilfemenüs.  Wenn Sie ein Menü definieren, können Sie beliebig viele Segmente angeben. Durch das Hinzufügen weiterer Platzhalter können andere Plug-ins besser steuern, wo deren Ergänzungen in Bezug auf vorhandene Ergänzungen angezeigt werden sollen.

Zuvor muss jedoch berücksichtigt werden, dass das Menü "Hilfe" weitere Optionen enthält, die durch Plug-ins hinzugefügt werden. Das Hilfe-Plug-in fügt beispielsweise ein Aktionsset zur Workbench hinzu, das ein Menü "Inhaltsverzeichnis der Hilfetexte" enthält. Aus diesem Plug-in namens org.eclipse.help.ui stammt die folgende Befehlsdatei plugin.xml:

<extension point="org.eclipse.ui.actionSets">
	<actionSet
		id="org.eclipse.help.internal.ui.HelpActionSet"
		label="%help"
		visible="true">
			
	<action id="org.eclipse.help.internal.ui.HelpAction"
		menubarPath="help/helpEnd"
		label="%helpcontents"
		class="org.eclipse.help.ui.internal.HelpContentsAction"
		icon="icons/view.gif"
		helpContextId="org.eclipse.help.ui.helpContentsMenu"
		tooltip="%openhelpcontents"/>
	...

Die neue Hilfeaktion wird in die Gruppe helpEnd des Hilfemenüs gestellt. Wenn durch keine weiteren Plug-ins Erweiterungen für ds Hilfemenü bereitgestellt werden, bedeutet dies, dass die Menüoption "Inhaltsverzeichnis der Hilfetexte" als erste Option im Menü über der Option "Info über" angezeigt wird. Falls ein anderes Plug-in eine Option ergänzen soll, die immer über der Option 'Inhaltsverzeichnis der Hilfetexte' erscheinen soll, könnte dieses Plug-in in seinem Pfad die Gruppe helpStart angeben.

Symbolleistenpfade funktionieren auf ganz ähnliche Weise. Immer dann, wenn ein Pfad angegeben ist, muss er mit dem Namen einer Gruppe in der Symbolleiste enden.

Vollständig qualifizierte Pfade für Menüs und Symbolleisten

Eine vollständige Menü- oder Symbolleistenpfadangabe hat folgendes Format: "menu name/group name."  Menünamen für die Workbench werden unter IWorkbenchActionConstants definiert. Mit Hilfe dieser Klasse kann ermittelt werden, dass der vollständig qualifizierte Pfadname für die Hilfeaktion "help/helpEnd" lautet.

Manche Menüs enthalten verschachtelte Untermenüs. An dieser Stelle kommen längere Pfade ins Spiel. Wenn im Hilfemenü ein Untermenü namens Untermenü mit einer benannten Gruppe namens submenuStart definiert wäre, würde der vollständig qualifizierte Menüpfad für eine Aktion im neuen Untermenü help/submenu/submenuStart lauten.

Bezeichnungen von Benutzerschnittstellen auslagern

Das oben beschriebene Beispiel zeigt ein Verfahren, mit dem Zeichenfolgen, die in der Benutzerschnittstelle angezeigt werden, ausgelagert werden können.  Das Auslagern von Zeichenfolgen vereinfacht das Übersetzen der Benutzerschnittstelle des Plug-ins in andere Sprachen.  Die Zeichenfolgen in der Datei plugin.xml können ausgelagert werden, indem die Zeichenfolgen durch einen Schlüssel (z. B. %help,%helpcontents) ersetzt und in der Datei plugin.properties Einträge mit dem folgenden Format erstellt werden:

   help = "Hilfe"
   helpContents = "Hilfeinhalt"

Auf diese Weise kann die Datei plugin.properties in unterschiedliche Sprachen übersetzt werden, ohne dass die Datei plugin.xml geändert werden muss.

Neue Menüs und Gruppen hinzufügen

In vielen der bislang dargestellten Beispiele wurden die Aktionen, die durch die Beispiel-Plug-ins ergänzt wurden, zu vorhandenen benannten Gruppen in Menüs und Symbolleisten hinzugefügt.

Über die Erweiterungspunkte actionSets, viewActions, editorActions und popupMenus können außerdem neue Menüs und Gruppen in einer Ergänzung definiert werden. Das bedeutet, dass Sie neue Untermenüs oder neue Pull-down-Menüs definieren und Ihre Aktionen zu diesen Menüs hinzufügen können. In diesem Fall enthält der Pfad für die neue Aktion den Namen des neu definierten Menüs.

Diese Technik wurde bereits angewandt, als das Tool für Readme-Dateien ein neues Menü für sein Aktionsset definierte. Da Sie sich jetzt ausführlicher mit Menüpfaden beschäftigt haben, soll die entsprechende Befehlsdatei noch einmal betrachtet werden:

   <extension point = "org.eclipse.ui.actionSets">
   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
	   label="%ActionSet.name"
	   visible="true">
	   <menu id="org_eclipse_ui_examples_readmetool"
		   label="%ActionSet.menu"
		   path="window/additions">
		   <separator name="slot1"/>
		   <separator name="slot2"/>
		   <separator name="slot3"/>
	   </menu>
	   <action id="org_eclipse_ui_examples_readmetool_readmeAction"
		   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
		   toolbarPath="readme"
		   label="%ReadmeAction.label"
		   tooltip="%ReadmeAction.tooltip"
		   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
		   icon="icons/ctool16/openbrwsr.gif"
		   class="org.eclipse.ui.examples.readmetool.WindowActionDelegate"
		   enablesFor="1">
		   <selection class="org.eclipse.core.resources.IFile"
				name="*.readme">
		   </selection>
	   </action>
	   ...

Wir haben ein neues Menü mit dem Namen  "org_eclipse_ui_examples_readmetool" hinzugefügt, dessen Bezeichnung in der Eigenschaftsdatei mit dem Schlüssel "%ActionSet.name" definiert wird. In diesem Menü werden die drei benannten Gruppen  "slot1", "slot2" und "slot3" definiert.  Das neue Menü wird zum Pfad "window/additions" hinzugefügt.

Wenn Sie zu IWorkbenchActionConstants zurückgehen, wird diese Definition des Menüs "Fenster" im Javadoc angezeigt:

* <h3>Standardaktionen für Menü "Fenster"</h3>
* <ul>
    * <li>Zusätzliche Aktionsgruppe für Menü 'Fenster' (<code>WINDOW_EXT</code>)</li>

Bei genauerer Betrachtung der Klassendefinition können diese zugehörigen Definitionen festgestellt werden:

   public static final String MENU_PREFIX = "";
   ...
   public static final String M_WINDOW = MENU_PREFIX+"window";
   ...
   public static final String MB_ADDITIONS = "additions";  // Group.
   ...
   public static final String WINDOW_EXT = MB_ADDITIONS;   // Group.

Aus diesen Informationen können Sie den Pfad zusammensetzen, den Sie beim Hinzufügen einer Option zum Workbench-Menü "Fenster" benötigen. Das Menü selbst heißt window, es definiert ein Segment namens additions. Daher wird zum Hinzufügen eines eigenen neuen Menüs der Pfad window/additions verwendet.

In der Deklaration des Aktionsset wird unter Verwendung des Pfads window/org_eclipse_ui_examples_readmetool/slot1 eine Aktion zum neu definierten Menü hinzugefügt.

Andere Plug-ins könnten durch die Verwendung desselben Pfads (oder auch über eines der anderen Segmente) ein eigenes Menü zu diesem Menü hinzufügen.

Im Allgemeinen ist es nicht besonders sinnvoll, ein Menü oder eine Symbolleiste eines anderen Plug-ins dadurch hinzuzufügen, dass der Pfadname aus der Datei plugin.xml abgeleitet wird. Es ist nämlich möglich, dass die Namen der Pfade in einer künftigen Version des Plug-ins geändert werden. Es empfiehlt sich daher, eine öffentliche Schnittstelle (wie etwa IWorkbenchActionConstants) zu definieren, die genau angibt, welche Menüs, Symbolleistengruppen und Segmente durch andere Plug-ins verwendet werden dürfen.

Copyright IBM Corporation und Andere 2000, 2002. Alle Rechte vorbehalten.