org.eclipse.ui.popupMenus

El punto de extensión org.eclipse.ui.popupMenus permite a un conector contribuir en los menús emergentes de otras vistas y otros editores.

Puede contribuir suministrando una acción a un menú emergente específico mediante su id (viewerContribution) o bien asociándolo a un tipo de objeto concreto (objectContribution). 

La herramienta readme define los dos tipos de contribución. Veamos la contribución de objeto en primer lugar.  

<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.gif"
	       menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"	
	       enablesFor="1">
	    </action>
	 </objectContribution>
 	 ...

Contribución de objeto

La "Acción Mostrar readme" se suministra como contribución de la clase de objeto IFile. Esto significa que cualquier vista que contenga objetos IFile mostrará la contribución si se han seleccionado objetos IFile. Observe que los criterios de selección se han restringido aún más con un filtro de nombre (nameFilter="*.readme") y para las selecciones individuales (enablesFor="1"). Tal como se ha dicho anteriormente, el registro de este menú no ejecuta código del conector hasta que se selecciona realmente el elemento de menú.

Cuando se selecciona el elemento de menú, el entorno de trabajo ejecutará la clase especificada. Puesto que se ha declarado el menú emergente como objectContribution, la clase suministrada debe implementar IObjectActionDelegate

La acción se implementa en PopupMenuActionDelegate.  

   public void run(IAction action) {
      MessageDialog.openInformation(
         this.part.getSite().getShell(),
         "Ejemplo de Readme",
         "Acción de menú emergente ejecutada");
   }

Se puede ver la contribución del menú emergente cuando se selecciona un archivo readme en el navegador de recursos.

Contribución de visor

Una contribución de visor permite contribuir en el menú emergente de una vista o un editor específicos utilizando el correspondiente ID. La contribución de visor de la herramienta readme es:

      ...
      <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.gif"
	       menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	    </action>
       </viewerContribution>
</extension>
Nota: el nombre viewerContribution es un poco equívoco, porque no está relacionado con los visores de JFace. El nombre popupMenuContribution sería más adecuado.

Cuando la extensión es de tipo viewerContribution, la clase suministrada debe implementar la interfaz IEditorActionDelegate o IViewActionDelegate, en función de si la acción se suministra como contribución al menú emergente de una vista o de un editor.

El parámetro targetID especifica la vista cuyo menú emergente se verá alterado. En este caso, estamos añadiendo una acción a una de las vistas de la herramienta readme, el esquematizador. La acción en sí misma es similar a las otras que ya hemos visto. Especificamos los atributos id, label e icon de la acción, así como el parámetro path, que indica dónde se sitúa nuestra contribución dentro del menú emergente. La acción solo se mostrará en el menú emergente de la vista Esquema del readme.

Las interfaces que se necesitan para suministrar una contribución de tipo viewerContribution al punto de extensión popupMenus coinciden con las que se necesitan en los puntos de extensión viewActions y editorActions. Si desea contribuir suministrando la misma acción al menú emergente y al menú local de una vista o un editor, puede utilizar la misma clase para ambas extensiones.

Copyright IBM Corp. y otros 2000, 2002.