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:
