Comandos

Um comando é a declaração da ação de um usuário por ID.  Os comandos são usados para declarar ações semânticas para que as implementações de ações definidas em conjuntos de ações e editores possam se associar a um comando de semântica específico.  A separação do comando da implementação da ação permite que vários plug-ins definam ações que implementem o mesmo comando de semântica.  O comando é a parte que fica associada a uma ligação de teclas específica.

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

Definindo um Comando

Os comandos são definidos utilizando o ponto de extensão org.eclipse.ui.commands.  O segmento a seguir é retirado da marcação do workbench:

<extension
         point="org.eclipse.ui.commands">
      ...
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.close.name"
            description="%command.close.description"
            id="org.eclipse.ui.file.close">
      </command>
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.closeAll.name"
            description="%command.closeAll.description"
            id="org.eclipse.ui.file.closeAll">
      </command>
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.save.name"
            icon="icons/full/ctool16/save_edit.gif"
            description="%command.save.description"
            id="org.eclipse.ui.file.save">
      </command>
      ...     

A definição do comando especifica um name, description e id para a ação.   Ele também especifica uma categoria para o comando, que é utilizada paga agrupar comandos no diálogo de preferências.  As categorias também são definidas no ponto de extensão org.eclipse.ui.commands :


      ...
      <category
            name="%category.file.name"
            description="%category.file.description"
            id="org.eclipse.ui.category.file">
      </category>
      ...

Observe que não existe uma implementação especificada para um comando.  Um comando se torna concreto apenas quando um plug-in associa sua ação ao ID do comando.

Associando uma ação a um comando

As ações podem ser associadas a um comando 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.  A 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);
	...

(Nota:  O nome do método setActionDefinitionID poderia ser nomeado mais apropriadamente como setCommandID.  O nome do método reflete a implementação original das ligações de teclas e utiliza uma terminologia ultrapassada.)

Fazendo a chamada de setActionDefinitionID, a ação de implementação (SaveAction) é associada ao ID de comando 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";

Essa constante define o ID da cadeia que foi usada na marcação da definição do comando.  É 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 precisará instanciar a própria ação.  O workbench o fará para você quando o usuário chamar a ação em um menu ou pelo teclado.  Nesse caso, é possível associar a ação a um ID de comando em sua  marcação XML.  O seguinte 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 comando para a ação.

Independente da técnica utilizada, associar sua ação a um ID de comando fará com que qualquer ligação de teclas que tenha sido definida para o comando 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 Corporation e outros 2000, 2003.