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.gif"
	       menubarPath="additions"
	       helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"	
	       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 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.

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

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.

Copyright IBM Corporation e outros 2000, 2003.