Le point d'extension org.eclipse.ui.popupMenus permet au plug-in de contribuer aux menus en incrustation des autres vues et éditeurs.
Vous pouvez ajouter une action à un menu en incrustation spécifique via son ID (viewerContribution) ou en l'associant à un type d'objet particulier (objectContribution).
L'outil readme définit les deux. Observons d'abord la contribution d'objet.
<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" enablesFor="1"> </action> </objectContribution> ...
L'action "Show Readme Action" contribue à la classe d'objet IFile. Ceci signifie que toute vue contenant des objets IFile affiche la contribution si des objets IFile sont sélectionnés. Nous voyons que le critère de sélection est davantage restreint par un filtre sur le nom (nameFilter="*.readme") et pour des sélections uniques (enablesFor="1"). Comme nous l'avons vu préalablement, l'enregistrement de ce menu n'exécute pas du code de notre plug-in tant que l'option de menu n'est pas réellement sélectionnée.
Une fois l'option de menu sélectionnée, le plan de travail exécute la classe spécifiée. Comme l'incrustation est déclarée en tant qu'objectContribution, la classe fournie doit implémenter IObjectActionDelegate.
L'action est implémentée dans PopupMenuActionDelegate.
public void run(IAction action) { MessageDialog.openInformation( this.part.getSite().getShell(), "Readme Example", "Popup Menu Action executed"); }
Nous pouvons voir la contribution du menu en incrustation lorsque nous sélectionnons un fichier readme dans le navigateur de ressources.
Une contribution d'afficheur est utilisée pour contribuer au menu en incrustation d'une vue ou d'une éditeur spécifique à l'aide de son ID. Voici la contribution d'afficheur de l'outil readme :
... <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" class="org.eclipse.ui.examples.readmetool.ViewActionDelegate"> </action> </viewerContribution> </extension>
Remarque : Le nom viewerContribution est un peu erroné, du fait qu'il ne fait pas référence aux afficheurs JFace. Il eut été sans doute préférable d'utiliser le terme popupMenuContribution.
Lorsque l'extension est viewerContribution, la classe fournie doit implémenter l'interface IEditorActionDelegate ou IViewActionDelegate, selon si l'action est ajoutée à un menu d'éditeur ou de vue.
L'ID cible indique la vue dont le menu en incrustation doit être modifié. Dans ce cas, nous ajoutons une action à l'une des vues de l'outil readme, à savoir le décomposeur. L'action est semblable aux autres abordées auparavant. Nous indiquons l'ID, le libellé et l'icône de l'action, ainsi que le chemin dans le menu en incrustation pour notre contribution. L'action sera uniquement affichée dans le menu en incrustation de la vue du décomposeur de readme.