org.eclipse.ui.popupMenus

Door middel van het extensiepunt org.eclipse.ui.popupMenus kunnen de voorgrondmenu's van andere views en editors worden bewerkt met plugins.

U kunt een actie aan een bepaald voorgrondmenu toevoegen op basis van het ID (viewerContribution) of met behulp van toewijzing aan een bepaald objecttype (objectContribution).  

Voor de readme-tool zijn beide kenmerken gedefinieerd. Eerst volgt de objectaanlevering:   

<extension point = "org.eclipse.ui.popupMenus">
     <objectContribution
   id="org.eclipse.ui.examples.readmetool"
        objectClass="org.eclipse.core.resources.IFile"
	    nameFilter="*.readme">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	      menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"	
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       enablesFor="1">
	   </action>
	 </objectContribution>
 	 ...

Objectaanlevering

De readme-actie wordt toegevoegd voor de objectklasse IFile. Zo wordt de toevoeging afgebeeld in elke view met objecten van het type IFile zodra een object van het type IFile wordt geselecteerd. Bovendien is de actie alleen beschikbaar als aan de voorwaarde van de naamfilter (nameFilter="*.readme") wordt voldaan en er één bestand is geselecteerd (enablesFor="1"). De plugincode van het menu-item wordt pas uitgevoerd zodra het menu-item daadwerkelijk gekozen wordt.

De opgegeven klasse wordt dan uitgevoerd door de workbench. Omdat het menu is gedeclareerd als objectContribution, moet de opgegeven klasse IObjectActionDelegate implementeren.  

De actie is geïmplementeerd in PopupMenuActionDelegate.   

public void run(IAction action) {
      MessageDialog.openInformation(
         this.part.getSite().getShell(),
         "Readme-voorbeeld",
         "Actie van voorgrondmenu uitgevoerd");
   }

De actie is beschikbaar als u een README-bestand selecteert in de resourcenavigator.

Vieweraanlevering

Een vieweraanlevering wordt gebruikt om het voorgrondmenu te bewerken van een view of editor die met het opgegeven ID overeenkomt. Hier ziet u de vieweraanlevering van de readme-tool:

      ...
      <viewerContribution
        id="org.eclipse.ui.examples.readmetool2"
        targetID="org.eclipse.ui.examples.readmetool.outline">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	      menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	   </action>
       </viewerContribution>
    </extension>
Opmerking: De naam viewerContribution is enigszins misleidend, omdat deze niet verwant is aan JFace-viewers. Een betere naam zou popupMenuContribution zijn.

Als de extensie van het type viewerContribution is, moet de verstrekte klasse de interface IEditorActionDelegate of IViewActionDelegate implementeren. Welke interface wordt geïmplementeerd, hangt ervan af of de actie aan het voorgrondmenu van een editor of een view wordt toegevoegd.  

Het doel-ID (targetID) staat voor de view waarvan het voorgrondmenu wordt gewijzigd. In dit geval wordt een actie toegevoegd aan één van de views van de readme-tool: het overzicht. De actie zelf is vergelijkbaar met eerder besproken acties.  Het ID (id), definitie-ID (definitionId), label en pictogram (icon) van de actie en het pad (path) van de locatie in het menu worden alle opgegeven. De actie wordt alleen afgebeeld in het voorgrondmenu van de readme-overzichtsview.

Opmerking: het definitionId zorgt dat de actie wordt gekoppeld aan een opdracht die is gemaakt door de extensie org.eclipse.ui.commands, die kan worden gebruikt toetskoppelingen. Zie Opdrachten.

Voor het toevoegen van een viewerContribution aan het extensiepunt popupMenus zijn dezelfde interfaces vereist als voor de extensiepunten viewActions en editorActions. Als u dezelfde actie aan zowel het voorgrondmenu als het lokale menu van een view of editor wilt toevoegen, kunt u dezelfde klasse gebruiken voor beide extensies.