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.gif" 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 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 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 exibiçã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.gif" 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 exibição.
O targetID especifica a exibiçã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 exibição do descritor do Leia-me.