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="&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.