È possibile aggiungere una procedura guidata all'opzione di menu File > Nuovo del workbench utilizzando il punto di estensione org.eclipse.ui.newWizards. L'esempio dello strumento readme utilizza la definizione di questo punto di estensione per aggiungere la procedura guidata Readme File:
<extension
point = "org.eclipse.ui.newWizards">
<category
id = "org.eclipse.ui.examples.readmetool.new"
name="Example Creation Wizards">
</category>
<wizard
id = "org.eclipse.ui.examples.readmetool.wizards.new.file"
name = "Readme File"
class="org.eclipse.ui.examples.readmetool.ReadmeCreationWizard"
category="org.eclipse.ui.examples.readmetool.new"
icon="icons/basic/obj16/newreadme_wiz.gif">
<description>Un esempio di una procedura guidata che crea il file Readme
di esempio
</description>
<selection class="org.eclipse.core.resources.IResource"/>
</wizard>
</extension>
category descrive dove verrà raggruppata la procedura guidata quando la rispettiva finestra di selezione viene utilizzata per ricercare e avviare una procedura guidata. Il nome della categoria ("Example Creation Wizards"), definisce l'etichetta che viene utilizzata nella procedura guidata. La medesima procedura guidata viene assegnata alla categoria. I relativi elementi name, icon e description appaiono tutti nella finestra di selezione della nuova procedura guidata, illustrata di seguito.
Tutto ciò si basa sul codice presente nel file plugin.xml. Nessuna parte del codice del plug-in viene eseguita fino a quando l'utente non sceglie il pulsante Avanti. Quando ciò avviene, il workbench effettuerà l'istanza della classe di procedura guidata specificata nel codice e trasmetterà una classe di selezione prevista.
La classe identificata in questa estensione (ReadmeCreationWizard) deve implementare l'interfaccia INewWizard. La maggior parte delle procedure guidate eseguono questa azione estendendo la classe Wizard della piattaforma, sebbene questo sia un meccanismo di implementazione e non sia richiesto da un punto di estensione.
La stessa procedura guidata non fa altro che creare le pagine al suo interno. Per prima cosa controllare l'implementazione della pagina e, quindi, tornare nuovamente alla procedura guidata.
Il workbench fornisce classi base per le pagine della procedura guidata che supportano il tipo di elaborazione eseguito per ogni punto di estensione della procedura guidata. L'utente può utilizzare queste pagine oppure estenderle per aggiungere un'ulteriore elaborazione.
Lo scopo di ReadmeCreationWizard consiste nel creare un nuovo file, aggiungere il contenuto necessario al file e, come opzione, aprire un editor sul file. Nella pagina dell'utente devono essere definiti i controlli che permettono all'utente di specificare il contenuto che deve essere inserito nel file e se un editor deve essere avviato.
La pagina della procedura guidata, CreateReadmePage1, viene creata estendendo WizardNewFileCreationPage. I controlli per una pagina di procedura guidata sono definiti in modo simile alla definizione dei controlli per una visualizzazione o per un editor. La pagina implementa un metodo createControl per la creazione dei widget SWT necessari come elementi secondari di Composite. Poiché la superclasse esegue già l'aggiunta di widget che supportano la nuova elaborazione file, è solo necessario estendere il metodo createControl nella pagina della procedura guidata per aggiungere le caselle di controllo aggiuntive che controllano la creazione delle sezioni e l'apertura dell'editor.
public void createControl(Composite parent) {
// ereditare il contenitore predefinito e denominare i widget di specifica
super.createControl(parent);
Composite composite = (Composite)getControl();
...
// gruppo per creazione della sezione di esempio
Group group = new Group(composite,SWT.NONE);
group.setLayout(new GridLayout());
group.setText("Automatic sample section generation");
group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL |
GridData.HORIZONTAL_ALIGN_FILL));
...
// caselle di controllo per creazione della sezione di esempio
sectionCheckbox = new Button(group,SWT.CHECK);
sectionCheckbox.setText("Generate sample section titles");
sectionCheckbox.setSelection(true);
sectionCheckbox.addListener(SWT.Selection,this);
subsectionCheckbox = new Button(group,SWT.CHECK);
subsectionCheckbox.setText("Generate sample subsection titles");
subsectionCheckbox.setSelection(true);
subsectionCheckbox.addListener(SWT.Selection,this);
...
// aprire il file per la modifica della casella di controllo
openFileCheckbox = new Button(composite,SWT.CHECK);
openFileCheckbox.setText("Open file for editing when done");
openFileCheckbox.setSelection(true);
...
}
L'utente dovrebbe essere in grado di seguire questo codice avendo appreso i concetti illustrati in SWT (Standard Widget Toolkit).
I modelli di base per l'implementazione di una pagina comprendono:
L'aggiunta di listener a tutti i controlli che influenzano la funzionalità dinamica della pagina. Ad esempio, se la selezione di una voce di elenco o di una casella influenza lo stato di altri controlli della pagina, aggiungere un listener in modo da poter modificare lo stato della pagina.
Il riempimento dei controlli con dati basati sulla selezione corrente al momento in cui la procedura guidata è stata avviata. Alcuni dati potrebbero dipendere dai valori di altri controlli. Alcuni controlli potrebbero utilizzare impostazioni di finestra di dialogo per inizializzare i propri valori.
L'utilizzo di setPageComplete(true) quando le informazioni fornite dall'utente sono sufficienti per uscire dalla pagina (e passare alla pagina successiva oppure uscire dalla procedura guidata).
La classe ReadmeCreationPage eredita una gran parte di questa funzionalità da WizardNewFileCreationPage. Per ulteriori informazioni, esaminare l'implementazione di queste classi.
Dopo aver esplorato la pagina, si consideri nuovamente la procedura guidata.
La procedura guidata è responsabile della creazione delle pagine e della fornitura della logica di "conclusione".
I modelli di base per l'implementazione di una procedura guidata comprendono:
Implementare il metodo init per impostare variabili locali per informazioni di contesto quali il workbench e la selezione corrente.
public void init(IWorkbench workbench,IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
setWindowTitle("New Readme File");
setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}
Implementare addPages creando istanze delle pagine.
public void addPages() {
mainPage = new ReadmeCreationPage(workbench, selection);
addPage(mainPage);
}
Implementare performFinish per terminare l'attività.
Le procedure guidate multi-pagina gestiscono normalmente la logica di fine nella stessa procedura guidata, dato che ogni pagina fornisce informazioni che determinano il modo in cui l'attività viene implementata. Le procedure guidate a pagina singola possono implementare la logica nella procedura guidata oppure richiedere alla pagina il completamento dell'attività. L'approccio dell'utente dipende largamente da dove viene preso lo stato importante. Nel caso della procedura guidata del readme, si richiederà alla pagina di gestire il processo di conclusione.
public boolean performFinish() {
return mainPage.finish();
}
La procedura guidata completa dovrebbe apparire nel modo seguente: