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 associando-o a um determinado tipo de objeto (objectContribution).
A ferramenta Leia-me define ambos. Vamos dar uma olhada na contribuição do objeto primeiro.
<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>
...
A ação "Show Readme Action" é uma contribuição da classe de objeto IFile. Isso significa que qualquer visualizaçã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 implementar IObjectActionDelegate.
A ação é implementada em PopupMenuActionDelegate.
public void run(IAction action) {
MessageDialog.openInformation(
this.part.getSite().getShell(),
"Exemplo Leia-me",
"Ação de Menu Pop-up executada");
}
Vemos a contribuição do menu pop-up quando selecionamos um arquivo Readme no navegador de recurso.
A contribuição de um visualizador é utilizada para contribuir com uma visualização específica ou um menu pop-up do editor utilizando seu id. A seguir, a contribuição do visualizador da ferramenta Leia-me:
...
<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>
Nota: O nome viewerContribution é um tanto inadequado, pois ele não está relacionado aos visualizadores JFace. Um nome melhor seria popupMenuContribution.
Quando a extensão for um viewerContribution, a classe fornecida deve implementar a interface IEditorActionDelegate ou IViewActionDelegate, dependendo da ação ser uma contribuição para o menu pop-up de um editor ou visualização.
O targetID especifica a visualização cujo menu pop-up será alterado. Nesse caso, estaremos adicionando uma ação a uma das exibições da ferramenta Leia-me, o descritor. A própria ação é semelhante a outras que temos visto. Especificamos o id, label e icon da ação e o path no pop-up da nossa contribuição. A ação será mostrada apenas no menu pop-up da visualização do descritor do Leia-me.
