Definições de Ações

Uma definição de ação é a declaração de uma ação pelo id.  As definições de ações são utilizadas para declarar ações de semântica para que as ações definidas em conjuntos de ações e editores possam associar-se a uma determinada definição de ação de semântica.  A separação da definição da ação da implementação da ação permite que vários plug-ins definam ações que implementem a mesma ação de semântica.  A definição de ação é que se associa às combinações de teclas aceleradoras.

O workbench define várias definições de ações comuns em seu arquivo plugin.xml e os plug-ins são estimulados a associar suas próprias ações a essas definições onde fizer sentido.  Desse modo, ações semanticamente semelhantes implementadas em plug-ins diferentes compartilham a mesma ligação de teclas.

Estabelecendo uma Definição de Ação

As definições de ações são estabelecidas com o ponto de extensão org.eclipse.ui.actionDefinitions.  O seguinte exemplo vem da marcação do workbench:

<extension
         point="org.eclipse.ui.actionDefinitions">
      <actionDefinition
            id="org.eclipse.ui.file.close">
      </actionDefinition>
      <actionDefinition
            id="org.eclipse.ui.file.closeAll">
      </actionDefinition>
      <actionDefinition
            id="org.eclipse.ui.file.save">
      </actionDefinition>
      ...

A definição por si só é simples.  Especifica apenas um id para uma ação de semântica.  Uma definição de ação torna-se concreta apenas quando um plug-in associa sua ação à definição.

Associando uma Ação a uma Definição de Ação

As ações podem ser associadas a uma definição de ação em código ou no plugin.xml para conjuntos de ações.  Sua opção depende de onde a ação está definida.

As ações instanciadas em código também podem ser associadas a uma definição de ação utilizando o protocolo IAction.  Isso é feito normalmente quando a ação é criada.  O WorkbenchActionBuilder utiliza esta técnica para inicializar suas ações.  

private void makeActions() {
	...
	saveAction = new SaveAction(window);
	saveAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT));
	saveAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_HOVER));
	saveAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_DISABLED));
	partService.addPartListener(saveAction);
	saveAction.setActionDefinitionId(saveActionDefId);
	...

Assim, a ação de implementação (SaveAction) é associada à definição de ação saveActionDefId.  O que é saveActionDefId?  Uma olhada rápida nas definições de campo estático em WorkbenchActionBuilder mostra o seguinte:

private static final String saveActionDefId = "org.eclipse.ui.file.save";

É um bom hábito definir constantes para suas definições de ações para que sejam facilmente referidas em código. 

Se você definir uma ação em um conjunto de ações, normalmente não será necessário que você mesmo a instancie.  O workbench fará isso para você quando o usuário chamar sua ação a partir de um menu ou do teclado.  Nesse caso, você poderá associar sua ação a uma definição de ação na marcação XML.  O seguinte exemplo mostra uma marcação hipotética para um conjunto de ações:

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="com.example.actions.actionSet"
		   label="Exemplo de Ações"
		   visible="true">
		   <action id="com.example.actions.action1"
			   menubarPath="additions"
			   label="Exemplo de Ação de Salvamento"
			   class="org.example.actions.ExampleActionDelegate"
			   definitionID="org.eclipse.ui.file.save">
		   </action>
		   ...
	   </actionSet>
   </extension>

O atributo definitionID é utilizado para declarar um id de definição de ação para a ação.

Independente da técnica utilizada, associar sua ação a uma definição de ação fará com que qualquer ligação de teclas que tenha sido definida para a definição de ação org.eclipse.ui.file.save chame sua ação quando apropriado. 

Agora, vamos ver como essas ligações de teclas são definidas.

 

Copyright IBM Corp. e outros 2000,2002.