El punto de extensión org.eclipse.ui.popupMenus permite a un conector hacer contribuciones a los menús emergentes de otras vistas y otros editores.
Se puede contribuir con una acción a un menú emergente específico mediante su identificador (viewerContribution) o se puede contribuir con una acción para un tipo de objeto(objectContribution).
La herramienta readme define objectContribution. La marcación es como la siguiente:
<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="Show Readme Action"
icon="icons/basic/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>
</extension>
Con la acción "Show Readme Action" se contribuye a la clase de objeto IFile. Esto significa que cualquier vista que contenga objetos IFile mostrará la contribución si se han seleccionado objetosIFile. Observe que los criterios de selección se han restringido aún más con un filtro de nombre (nameFilter="*.readme") y en selecciones únicas (enablesFor="1"). Tal como se ha dicho anteriormente, el registro de este menú no ejecuta ningún código desde el 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(),
"Readme Example",
"Popup Menu Action executed");
}
Se puede ver la contribución del menú emergente cuando se selecciona un archivo readme desde el navegador de recursos.
El otro tipo de contribución de menú emergente recibe el nombre de viewerContribution.
Nota: El nombre viewerContribution no es del todo significativo, ya que no hace referencia a los visores de JFace. popupMenuContribution sería un nombre más adecuado.
Una contribución de visor se utiliza para efectuar una contribución a una vista específica o a un menú emergente del editor utilizando su identificador. La marcación siguiente muestra cómo un conector puede registrar una acción específica en el menú emergente de lista de tareas del entorno de trabajo.
<extension point="org.eclipse.ui.popupMenus">
<viewerContribution
id="com.example.C2"
targetID="org.eclipse.ui.views.TaskList">
<action id="com.example.showExample"
label="&Show Example"
menubarPath="additions"
icon="icons/showExample.gif"
helpContextId="com.example.show_action_context"
class="com.example.actions.ExampleShowActionDelegate">
</action>
</viewerContribution>
</extension>
Si la extensión es viewerContribution, la clase suministrada debe implementar la interfaz IEditorActionDelegate o IViewActionDelegate, dependiendo de si se contribuye con la acción a un menú emergente del editor o de la vista.
En este ejemplo, se especifica el identificador del menú emergente y la vía de acceso del menú emergente para la contribución.
Nota: Las interfaces que viewerContribution necesita para el punto de extensión popupMenus son las mismas que las que necesitan los puntos de extensión viewActions y editorActions. Si desea contribuir con 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.