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 suministrar 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> ...
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 seleccione 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.
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.
targetID especifica la vista cuyo menú emergente se verá alterado. En este caso, añadimos una acción a una de las vistas de la herramienta readme, el esquematizador. La acción en sí es parecida a las demás que ya hemos visto. Especificamos el ID, la etiqueta y el icono (id, label, icon) de la acción y la vía de acceso (path) dentro del menú emergente de la contribución. La acción sólo aparecerá en el menú emergente de la vista Esquema de la herramienta readme.