org.eclipse.ui.popupMenus

Med utvidelsespunktet org.eclipse.ui.popupMenus kan en plugin-modul bidra med hurtigmenyer i andre visninger og redigeringsprogrammer.

Du kan bidra med en handling for en bestemt hurtigmeny ved å bruke IDen (viewerContribution) eller ved å knytte den til en bestemt objekttype (objectContribution). 

Readme-verktøyet definerer begge. La oss først selve objektbidraget.  

<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>
 	 ...

Objektbidrag

Handlingen for å vise en readme-handling oppgis for objektklassen IFile. Dette betyr at enhver visning som inneholder IFile-objekter, viser bidraget hvis IFile-objekter velges. Vi ser at utvalgskriteriene er ytterligere begrenset med et navnefilter (nameFilter="*.readme") og for enkelte utvalg (enablesFor="1"). Vi har allerede beskrevet at registreringen av denne menyen ikke kjører noen kode fra plugin-modulen før menypunktet er valgt.

Når menypunktet er valgt, kjører arbeidsbenken den angitte klassen.  Siden hurtigmenyen er deklarert i en objectContribution, må den oppgitte klassen implementere IObjectActionDelegate

Handlingen implementeres i PopupMenuActionDelegate.  

public void run(IAction action) {
      MessageDialog.openInformation(
         this.part.getSite().getShell(),
         "Readme Example",
         "Popup Menu Action executed");
   }

Vi ser hurtigmenybidraget når vi velger en readme-fil fra ressursnavigatoren.

Visningsprogrambidrag

Et visningsprogrambidrag brukes for å oppgi en hurtigmeny i en bestemt visning eller i et bestemt redigeringsprogram ved hjelp av en ID. Her er readme-verktøyets visningsprogrambidrag:

      ...
      <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>
Merk:  Navnet viewerContribution er noe misvisende siden det ikke gjelder for JFace-visningsprogrammer. En mer korrekt betegnelse er popupMenuContribution.

Når utvidelsen er en viewerContribution, må den oppgitte klassen implementere IEditorActionDelegate- eller IViewActionDelegate-grensesnittet, avhengig av om handlingen oppgis på hurtigmenyen i et redigeringsprogram eller i en visning. 

targetID angir hvilken visning som har en hurtigmeny som skal endres. I dette tilfellet legget vi til en handling i en av readme-verktøyets visninger, nærmere bestemt i disposisjonen.  Selve handlingen skiller seg ikke fra de handlingene vi har sett på tidligere.  Vi oppgir en id, definitionId, label og icon for handlingen samt path i hurtigmenyen for bidraget. Handlingen vil bare bli vist på hurtigmenyen i readme-verktøyets disposisjonsvisning.

Merk: definitionId gjør det mulig å linke handlingen til en kommando opprettet av org.eclipse.ui.commands-utvidelsen, som kan brukes til tastbindinger. Se Kommandoer.

De grensesnittene som kreves for å bidra med en viewerContribution i popupMenus-utvidelsespunktet, er de samme som de som kreves av utvidelsespunktene viewActions og editorActions. Hvis du vil bidra med den samme handlingen på hurtigmenyen og den lokale menyen i en visning eller et redigeringsprogram, kan du bruke samme klasse for begge utvidelsene.