org.eclipse.ui.popupMenus

O ponto de extensão org.eclipse.ui.popupMenus permite a um plug-in contribuir com menus pop-up de outras exibições e outros editores.

Você pode contribuir com uma ação para um menu pop-up específico através de seu id (viewerContribution) ou pode contribuir com uma ação para um tipo de objeto (objectContribution). 

A ferramenta Leia me define um objectContribution. A marcação é parecida com esta:

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

A ação "Show Readme Action" é uma contribuição da classe de objeto IFile. Isso significa que qualquer exibição contendo objetos IFile mostrará a contribuição se os objetos IFile forem selecionados. Vemos que os critérios de seleção são mais limitados com um filtro de nome (nameFilter="*.readme") e para seleções únicas (enablesFor="1"). Como discutimos antes, o registro desse menu não executa nenhum código do nosso plug-in até o item do menu ser realmente selecionado.

Quando o item do menu é selecionado, o workbench executa a classe especificada.  Como o pop-up é declarado como um objectContribution, a classe fornecida deve implementarIObjectActionDelegate

A ação é implementada em PopupMenuActionDelegate.  

public void run(IAction action) {
    MessageDialog.openInformation(
        this.part.getSite().getShell(),
        "Readme Example",
        "Popup Menu Action executed");
}

Vemos a contribuição do menu pop-up quando selecionamos um arquivo Leia me no navegador de recurso.

O outro tipo de contribuição de menu pop-up é chamada de viewerContribution.

Nota:  o nome viewerContribution é um tanto inadequado, pois ele não está relacionado aos visualizadores JFace. Um nome melhor seria popupMenuContribution .

A contribuição de um visualizador é utilizada para contribuir com uma exibição específica ou um menu pop-up do editor utilizando seu ID. A marcação a seguir mostra como um plug-in poderia registrar uma ação específica no menu pop-up da lista de tarefas do workbench.

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

Se a extensão for um viewerContribution, a classe fornecida deverá implementar a interface IEditorActionDelegate ou IViewActionDelegate, dependendo de a ação ser uma contribuição para o menu pop-up de um editor ou para uma exibição. 

Neste exemplo, especificamos o ID do pop-up e o caminho no pop-up da nossa contribuição.

Nota:  as interfaces necessárias para um viewerContribution em um ponto de extensão popupMenus são as mesmas que as exigidas pelos pontos de extensão viewActions e editorActions. Para contribuir com a mesma ação para o menu pop-up e o menu local de uma exibição ou de um editor, utilize a mesma classe para ambas as extensões.