Pode adicionar um assistente às opções de menu
Ficheiro >
Novo na área de trabalho através da utilização do ponto de extensão
org.eclipse.ui.newWizards. O exemplo da ferramenta readme utiliza esta
definição de ponto de extensão para adicionar o assistente Readme File
(ficheiro 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>
A categoria descreve o agrupamento do assistente. Uma parentCategory opcional estabelece a nova categoria como descendente de uma categoria existente.
As categorias de nível superior aparecem no menu Ficheiro > Novo . Neste exemplo, a parentCategory está definida como sendo uma categoria "Examples". De onde vem a categoria ascendente? O plug-in org.eclipse.ui define uma categoria de exemplos padrão na 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 Ficheiro > Novo .
A categoria da ferramenta readme name define a etiqueta que é utilizada para o nível seguinte de agrupamento abaixo da categoria ascendente. Estas categorias são mostradas como segundo nível na árvore apresentada no assistente Novo Exemplo. Os name e icon (nome e ícone) do assistente são apresentados abaixo da categoria quando a estender. A description (descrição) do assistente seleccionado é mostrada no topo do assistente ao seleccioná-lo.
Estas informações sobre o assistente aparecem somente devido à marcação constante do ficheiro plugin.xml. Não é executado nenhum do código do plug-in enquanto o utilizador não escolher o botão Seguinte. Uma vez escolhido, a área de trabalho irá instanciar a class (classe) do assistente especificada na marcação e transmitir-lhe uma class de selecção esperada.
A classe identificada nesta extensão (ReadmeCreationWizard) deve implementar a interface . interface. A maioria dos assistentes realiza isto estendendo a classe Wizard da plataforma, embora isto seja um mecanismo de implementação e não seja necessário ao ponto de extensão.
O próprio assistente pouco faz além de criar as páginas dentro de si. Vejamos primeiro a implementação da página e depois voltemos ao assistente.
A área de trabalho proporciona classes de páginas de assistente básicas que suportam o tipo de processamento realizado para cada ponto de extensão de assistente. Poderá utilizar estas páginas ou estendê-las para adicionar mais processamento.
O objectivo do ReadmeCreationWizard consiste em criar um novo ficheiro, adicionar o conteúdo necessário ao ficheiro e, como opção, abrir um editor no ficheiro. A nossa página tem de definir os controlos que deixam o utilizador especificar qual o conteúdo que fica no ficheiro e se deve ser lançado um editor ou não.
Criamos a página do assistente, ReadmeCreationPage, estendendo WizardNewFileCreationPage. Os controlos para uma página de assistente são definidos de modo semelhante à definição dos controlos de uma vista ou um editor. A página implementa um método createControl, criando os widgets de SWT necessários como descendentes do Composite fornecido. Visto que a super-classe já adiciona widgets que suportem processamento do novo ficheiro, só temos de estender o método createControl na nossa página de assistente para adicionar as caixas de verificação adicionais que controlam a geração de secções e abertura do editor.
public void createControl(Composite parent) { // inherit default container and name specification widgets super.createControl(parent); Composite composite = (Composite)getControl(); ... // sample section generation group 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)); ... // sample section generation checkboxes 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); ... // open file for editing checkbox openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("Open_file_for_editing_when_done")); openFileCheckbox.setSelection(true); ... }
Não terá dificuldade em seguir este código se entender os conceitos em Standard Widget Toolkit.
Os padrões básicos para implementar uma página são:
A classe ReadmeCreationPage herda muito do seu comportamento da WizardNewFileCreationPage. Procure a implementação destas classes para mais informações.
Agora que já compreendemos o que faz uma página, voltemos ao assistente.
O assistente é responsável por criar as páginas e fornecer a lógica de "finalização".
Os padrões básicos para implementar um assistente são:
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 assemelha-se ao seguinte: