Você pode adicionar um assistente para as opções de menu Arquivo > Novo > no workbench utilizando o ponto de extensão org.eclipse.ui.newWizards. O exemplo de ferramenta leia-me utiliza essa definição de ponto de extensão para incluir o assistente de Arquivo Readme:
<extension point = "org.eclipse.ui.newWizards"> <category id = "org.eclipse.ui.examples.readmetool.new" parentCategory="org.eclipse.ui.Examples" name="%NewWizard.category"> </category> <wizard id = "org.eclipse.ui.examples.readmetool.wizards.new.file" name = "%NewWizard.name" class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard" category="org.eclipse.ui.Examples/org.eclipse.ui.examples.readmetool.new" icon="icons/obj16/newreadme_wiz.png"> <description>%NewWizard.desc</description> <selection class="org.eclipse.core.resources.IResource"/> </wizard> </extension>
O category descreve o agrupamento para o assistente. Um parentCategory opcional estabelece a nova categoria como uma filha de uma categoria existente.
As categorias no nível superior aparecerão no menu Arquivo > Novo. Neste exemplo, parentCategory é definido para uma categoria "Examples". De onde vem a categoria pai? O plug-in org.eclipse.ui define uma categoria examples padrão em sua marcação:
<extension point="org.eclipse.ui.newWizards"> <category name="%NewWizards.Category.Examples" id="org.eclipse.ui.Examples"> </category> ...
Esta categoria aparece no menu Arquivo > Novo.
O nome da categoria da ferramenta leia-me define o rótulo que é utilizado para a próxima camada de agrupamento sob a categoria pai. Essas categorias são mostradas como o segundo nível na árvore mostrada no assistente Novo Exemplo. O nome e o ícone do assistente são mostrados na parte de baixo ao expandir a categoria. A descrição do assistente selecionado é mostrada na parte superior do assistente ao selecioná-lo.
Estas informações sobre o assistente aparecem unicamente por causa da marcação no arquivo plugin.xml. Nenhum código de plug-in é executado até que o usuário escolha o botão Avançar. Depois que isso acontecer, o workbench instanciará a classe do assistente especificada na marcação e transmitirá a ele uma classe de seleção esperada.
A classe identificada nesta extensão (ReadmeCreationWizard) deve implementar a interface INewWizard. A maioria dos assistentes fazem isso estendendo a classe Assistente da plataforma embora este seja um mecanismo de implementação e não requerido pelo ponto de extensão.
O assistente não faz muito, mas cria as páginas em seu interior. Vamos ver primeiramente a implementação da página e em seguida voltar ao assistente.
O workbench fornece classes de página de assistente básico que é compatível com o tipo de processamento executado para cada ponto de extensão de assistente. É possível usar essas páginas ou estendê-las para incluir processamento adicional.
O objetivo do ReadmeCreationWizard é criar um novo arquivo, incluir o conteúdo necessário no arquivo e como uma opção, abrir um editor no arquivo. Nossa página precisa definir os controles que permitem ao usuário especificar o conteúdo que vai no arquivo e se deveria ser lançado um editor.
Criamos a página de assistente, ReadmeCreationPage, estendendo WizardNewFileCreationPage. Os controles de uma página de assistente são definidos de forma similar à definição dos controles de uma visualização ou de um editor. A página implementa um método createControl, criando os SWT widgets necessários como filho da Composite fornecida. Uma vez que a super classe já inclui widgets compatíveis com o processamento de novos arquivos, precisamos somente estender o método createControl na nossa página do assistente para incluir as caixas de entrada adicionais que controlam a geração de seções e a abertura do editor.
public void createControl(Composite parent) { // herdar contêiner padrão e widgets de especificação do nome super.createControl(parent); Composite composite = (Composite)getControl(); ... // exemplo de grupo de geração de seção Group group = new Group(composite,SWT.NONE); group.setLayout(new GridLayout()); group.setText(MessageUtil.getString("Automatic_sample_section_generation")); group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); ... // exemplos de caixas de opção de geração de seção sectionCheckbox = new Button(group,SWT.CHECK); sectionCheckbox.setText(MessageUtil.getString("Generate_sample_section_titles")); sectionCheckbox.setSelection(true); sectionCheckbox.addListener(SWT.Selection,this); subsectionCheckbox = new Button(group,SWT.CHECK); subsectionCheckbox.setText(MessageUtil.getString("Generate_sample_subsection_titles")); subsectionCheckbox.setSelection(true); subsectionCheckbox.addListener(SWT.Selection,this); ... // caixa de opção abrir arquivo para edição openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done")); openFileCheckbox.setSelection(true); ... }
Você estará apto a seguir esse código se conhecer os conceitos no Kit de Ferramentas Padrão de Widgets.
Os padrões básicos para implementar uma página incluem:
A classe ReadmeCreationPage herda grande parte desse comportamento do WizardNewFileCreationPage. Procure a implementação dessas classes para obter informações adicionais.
Agora que entendemos o que a página faz, voltemos ao assistente.
O assistente é responsável por criar as páginas e fornecer a lógica "concluir".
Os padrões básicos para implementar um assistente incluem:
public void init(IWorkbench workbench,IStructuredSelection selection) { this.workbench = workbench; this.selection = selection; setWindowTitle(MessageUtil.getString("New_Readme_File")); setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER); }
public void addPages() { mainPage = new ReadmeCreationPage(workbench, selection); addPage(mainPage); }
public boolean performFinish() { return mainPage.finish(); }
O assistente concluído aparece dessa forma: