org.eclipse.ui.popupMenus

Udvidelsespunktet org.eclipse.ui.popupMenus giver en plugin mulighed for at bidrage til pop op-menuerne for andre oversigter og editorer.

Du kan bidrage med en funktion til en bestemt pop op-menu med ved hjælp af dens id (viewerContribution) eller ved at knytte den til en bestemt objekttype (objectContribution). 

Readme-værktøjet definerer begge dele. Lad os se på objektbidraget først.   

<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

Der bidrages med funktionen "Show Readme Action" til objektklassen IFile. Det betyder, at alle oversigter, der indeholder IFile-objekter, viser bidraget, hvis der vælges et IFile-objekt. Læg mærke til, at udvælgelseskriterierne er yderligere begrænset med et navnefilter (nameFilter="*.readme") og er beregnet til enkeltvalg (enablesFor="1"). Som det tidligere er beskrevet, udfører registreringen af denne menu ingen kode fra vores plugin, før menupunktet faktisk er valgt.

Arbejdsbænken udfører den angivne klasse, når menupunktet er valgt.   Eftersom pop op-menupunktet er erklæret som en objectContribution, skal den leverede klasse implementere IObjectActionDelegate

Funktionen er implementeret i PopupMenuActionDelegate.  

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

Bidraget til pop op-menuen vises, når brugeren vælger en Readme-fil i ressourcenavigatoren.

Fremviserbidrag

Et fremviserbidrag bruges til at bidrage til en bestemt oversigt eller en editors pop op-menu ved hjælp af dens id. Det følgende er Readme-værktøjets fremviserbidrag:

      ...
      <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>
Bemærk:  Navnet viewerContribution er lidt misvisende, og det har ingen relation til JFace-fremvisere. Navnet popupMenuContribution ville være mere sigende.

Når udvidelsen er en viewerContribution, skal den leverede klasse implementere grænsefladen IEditorActionDelegate eller IViewActionDelegate, afhængig af om funktionen er et bidrag til en editors eller en oversigts pop op-menu.  

targetID angiver den oversigt, hvis pop op-menu skal ændres.  I dette tilfælde føjes der en funktion til en af Readme-værktøjets oversigter, nemlig strukturen.  Selve funktionen ligner de andre, vi har set.  Vi angiver id, definitionId, label og icon for funktionen samt path i bidragets pop op.  Funktionen vises kun i pop op-menuen til strukturoversigten for Readme-filen.

Bemærk: definitionId tillader, at funktionen linkes til en kommando, der er oprettet af udvidelsen org.eclipse.ui.commands, der kan anvendes til tastbindinger. Der er flere oplysninger under Kommandoer.

De grænseflader, der kræves for at bidrage med en viewerContribution til udvidelsespunktet popupMenus, er de samme som dem, der kræves af udvidelsespunkterne viewActions og editorActions. Hvis du vil bidrage med den samme funktion til både pop op-menuen og den lokale menu for en oversigt eller en editor, kan du bruge den samme klasse til begge udvidelser.