É comum para as exibições e editores de um plug-in implementar ações semanticamente semelhantes em ações existentes do workbench, tal como recortar/copiar/colar, atualizar exibição ou propriedades da área de transferência. O menu popup das exibições e editores poderá tornar-se bem confuso se cada exibição ou editor tiver que definir ações exclusivas para essas operações e incluí-las em seus menus.
Para resolver esse problema, o workbench define ações reatingíveis (também chamadas de globais) que podem ser manipuladas por qualquer exibição ou editor. Quando uma exibição ou editor estiver ativo, sua rotina de tratamento será executada quando o usuário escolher a ação no menu ou na barra de ferramentas do workbench. Isso permite que as exibições e editores compartilhem o espaço de menu do workbench para ações semanticamente semelhantes.
IWorkbenchActionConstants documenta todas as ações do workbench e indica as ações reatingíveis como globais. Por exemplo, a seguir, está a definição da ação Properties.
public static final String PROPERTIES = "properties"; // Ação global.
A tabela a seguir resume algumas das ações reatingíveis mais comuns que foram implementadas pelas exibições e editores:
Menu Arquivo | Menu Editar | Menu Navegar | |
exibições | mover renomear atualizar propriedades |
entrar voltar avançar para cima próximo anterior |
|
editores | reverter imprimir |
localizar | |
exibições e editores | recortar copiar colar excluir selecionar tudo desfazer refazer |
As ações reatingíveis são criadas utilizando RetargetAction. O trecho a seguir foi obtido de WorkbenchActionBuilder.
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
O método createGlobalAction nos mostra exatamente como criar uma RetargetAction.
private RetargetAction createGlobalAction(String id, String actionDefPrefix, boolean labelRetarget) { RetargetAction action; if (labelRetarget) { action = new LabelRetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } else { action = new RetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } ... return action; }
Ao criar uma ação reatingível, o workbench atribui o id da ação e o rótulo padrão. Observe que há dois estilos de ações reatingíveis. RetargetAction apenas permite que uma exibição ou editor reimplemente uma ação. LabelRetargetAction também permite que as exibições e editores redefinam o rótulo da ação. Isso é útil para que o rótulo do menu fique mais específico, como, por exemplo, rotular novamente uma ação Undo para Undo Typing.
Agora sabemos como as ações reatingíveis são definidas pelo workbench. Em seguida, veremos como sua exibição ou editor pode fornecer uma implementação para uma ação reatingível. Isso é feito definindo-se uma rotina de tratamento de ação global.