org.eclipse.ui.popupMenus

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 une action pour un type d'objet (objectContribution). 

L'outil readme définit un objectContribution. Les marques sont semblables à ce qui suit.

<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>

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.

L'autre type de contribution de menu en incrustation est appelé viewerContribution.

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.

Une contribution d'afficheur est utilisée pour contribuer au menu en incrustation d'une vue ou d'un éditeur spécifique à l'aide de son ID. Les marques suivantes montrent comment un plug-in peut enregistrer une action spécifique dans le menu en incrustation de la liste des tâches du plan de travail.

<extension point="org.eclipse.ui.popupMenus">
    <viewerContribution
        id="com.example.C2"
        targetID="org.eclipse.ui.views.TaskList">
        <action id="com.example.showExample"
            label="&amp;Show Example"
            menubarPath="additions"
            icon="icons/showExample.gif"
            helpContextId="com.example.show_action_context"
            class="com.example.actions.ExampleShowActionDelegate">
        </action>
    </viewerContribution>
</extension>

Si l'extension est une viewerContribution, la classe fournie doit implémenter l'interface IEditorActionDelegate ou IViewActionDelegate, selon si l'action contribue ou non à un menu en incrustation d'un éditeur ou d'une vue.  

Dans cet exemple, nous spécifions l'id de l'incrustation et le chemin d'accès dans l'incrustation pour notre contribution.

Remarque : Les interfaces requises pour une contribution viewerContribution au point d'extension popupMenus sont identiques à celles requises par les points d'extension viewActions et editorActions. Si vous souhaitez faire contribuer la même action au menu en incrustation et au menu local d'une vue ou d'un éditeur, vous pouvez utiliser la même classe pour les deux extensions.