O plug-in pode contribuir com menus, itens de menu e itens da barra de ferramentas para os menus e barra de ferramentas do workbench, utilizando o ponto de extensão org.eclipse.ui.actionSets. Para reduzir a desordem que seria causada por ter todas as contribuições de menu do plug-in exibidas ao mesmo tempo, elas são agrupadas em conjuntos de ações, cuja visualização pode ser obtida de acordo com a preferência do usuário.
Você pode ver quais conjuntos de ações contribuíram com o workbench, selecionando Janela->Personalizar Perspectiva... no menu do workbench. Esta opção mostrará um diálogo que lista os conjuntos de ações como grupos de comandos. Um visto de um grupo de comando significa que o menu e as ações da barra de ferramentas estão visíveis no workbench. Você pode selecionar o nome do grupo de comando para consultar a lista de ações do menu e da barra de ferramentas à direita. A figura a seguir mostra a lista de grupos de comando disponíveis no nosso workbench. (O workbench talvez tenha uma aparência diferente, dependendo dos plug-ins instalados e da perspectiva ativa).
A ferramenta Leia-me utiliza um conjunto de ações para contribuir com várias ações diferentes de "Abrir Navegador do Leia-me" para o menu do workbench. (Contribuímos com uma ação semelhante para o menu pop-up do navegador de recurso.) Segue-se a marcação:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="org_eclipse_ui_examples_readmetool_actionSet" label="%ActionSet.name" visible="true"> <menu id="org_eclipse_ui_examples_readmetool" label="%ActionSet.menu" path="window/additions"> <separator name="slot1"/> <separator name="slot2"/> <separator name="slot3"/> </menu> <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeAction.label" tooltip="%ReadmeAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.png" class="org.eclipse.ui.examples.readmetool.WindowActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"> </selection> </action> ... </actionSet> </extension>
Nossa, há muita coisa acontecendo aqui! Vamos por etapas, olhando apenas a primeira ação por enquanto.
Primeiro, o conjunto de ações é declarado e recebe um rótulo. O rótulo "Ações do Leia-me" (definido pela chave %ActionSet.name no arquivo de propriedades do plug-in) é utilizado para exibir o conjunto de ações no diálogo mostrado acima. Como definimos visible como true, o workbench terá, inicialmente, o conjunto de ações marcado com um visto na lista de conjuntos de ações e as ações ficarão visíveis.
O restante da declaração do conjunto de ações está relacionado à definição do menu no qual as ações e as próprias ações aparecem.
Definimos um menu cujo rótulo aparece nos menus do workbench. O path do menu informa ao workbench para posicionar o novo menu no slot additions do menu window. (Para obter uma discussão dos caminhos e slots de menu, consulte Caminhos do menu e da barra de ferramentas.) Também definimos alguns slots em nosso novo menu para que as ações possam ser inseridas em localizações específicas do nosso menu.
Apenas esta marcação é suficiente para fazer com que o menu apareça no menu Janela do workbench.
Em seguida, definimos as próprias ações.
A definição da ação (id, label, icon, class) é semelhante às outras ações que vimos em exibições, editores e pop-ups. Focalizaremos aqui a diferença: para onde a ação vai? Utilizamos menubarPath e toolbarPath para indicar a localização. Primeiro, definimos o menubarPath para adicionar a ação em um slot no menu que acabamos de definir ( "window/org_eclipse_ui_examples_readmetool/slot1").
Em seguida, definimos um novo toolbarPath para inserir nossas ações na barra de ferramentas do workbench. Como já definimos um novo caminho para as ferramentas, "readme", o workbench decidirá para onde ele vai com relação às outras contribuições da barra de ferramentas do plug-in.
O que acontece quando a ação é selecionada pelo usuário? A ação é implementada pela classe especificada no atributo class. A classe de ação deve implementar IWorkbenchWindowActionDelegate ou IWorkbenchWindowPulldownDelegate se a ação será mostrada como um item de ferramenta de opções na barra de ferramentas. Como não estamos criando um item de ferramenta de opções, nós fornecemos WindowActionDelegate. Essa classe é semelhante a ObjectActionDelegate. Ela ativa o diálogo de seções do leia-me quando o usuário escolhe a ação. (Discutiremos o diálogo de seções em Diálogos do aplicativo.)
A ação também fornece condições de ativação para seu item de menu e item da barra de ferramentas. Os itens de menu e da barra de ferramentas serão ativados apenas quando um único (enablesFor="1") arquivo leia-me (selectionClass ="org.eclipse.core.resources.IFile" name="*.readme") for selecionado. Os itens de menu e da barra de ferramentas desta ação aparecem e são ativados com base na marcação no arquivo plugin.xml. Nenhum dos códigos do plug-in será executado até que o usuário escolha a ação e o workbench execute a classe da ação.
Veremos as outras duas ações posteriormente no contexto de ações reatingíveis.