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 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"	
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       enablesFor="1">
	   </action>
	 </objectContribution>
 	 ...

Contribuição do Objeto

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 ambiente de trabalho 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.

Contribuição do Visualizador

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.png"
	      menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
           definitionId="org.eclipse.ui.examples.readmetool.action1"
	       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.  Nós especificamos id, definitionId, label e icon da ação e o path no pop-up para nossa contribuição.  A ação será mostrada apenas no menu pop-up da exibição do descritor do Leia-me.

Nota: o definitionId permite que a ação seja vinculada a um comando criado pela extensão org.eclipse.ui.commands, que pode ser utilizado para ligações de tecla. Consulte Comandos.

As interfaces requeridas para contribuir com um viewerContribution para o ponto de extensão popupMenus são as mesmas das requeridas 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.