È possibile aggiungere una procedura guidata alle opzioni 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 File 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.gif"> <description>%NewWizard.desc</description> <selection class="org.eclipse.core.resources.IResource"/> </wizard> </extension>
La categoria descrive la suddivisione in gruppi per la procedura guidata. Una parentCategory facoltativa stabilisce che la nuova categoria è secondaria rispetto a una categoria esistente.
Nel menu File > Nuovo verranno visualizzate categorie di livello superiore.
In questo esempio, parentCategory è impostata su una categoria "Esempi". Da dove proviene la categoria principale? Il plug-in org.eclipse.ui
definisce una categoria di esempi standard nel rispettivo tag:<extension
point="org.eclipse.ui.newWizards">
<category
name="%NewWizards.Category.Examples"
id="org.eclipse.ui.Examples">
</category>
...
Questa categoria viene visualizzata nel menu File > Nuovo.
La categoria dello strumento readme nome definisce l'etichetta utilizzata per il layer successivo di raggruppamento al di sotto della categoria principale. Tali categorie sono visualizzate a sinistra della procedura guidata Nuovo esempio. Il nome e l'icona della procedura vengono visualizzati a destra della procedura guidata facendo clic sulla categoria. La descrizione viene visualizzata sulla parte superiore della procedura guidata quando viene selezionata dall'elenco a destra, come illustrato di seguito:
Queste informazioni relative alla procedura guidata vengono visualizzate unicamente a causa del tag nel file plugin.xml. Nessun codice di plug-in verrà eseguito finché non verrà selezionato il pulsante Avanti. Quando ciò avviene, il workbench esegue l'istanza della classe della procedura guidata specificata nel tag e trasferisce una classe di selezione prevista.
La classe identificata in questa estensione (ReadmeCreationWizard) deve implementare l'interfaccia INewWizard. La maggior parte delle procedure guidate esegue questa operazione mediante l'estensione della classe Wizard della piattaforma, sebbene si tratti di un meccanismo di implementazione e non sia richiesto dal 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, ReadmeCreationPage, viene creata estendendo WizardNewFileCreationPage. I controlli per una pagina di procedura guidata sono definiti in modo simile alla definizione dei controlli per una vista 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) { // eredita widget di specifica nome e contenitore predefiniti super.createControl(parent); Composite composite = (Composite)getControl(); ... // gruppo per la generazione di sezioni di esempio 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)); ... // caselle di controllo per la generazione di sezioni di esempio 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); ... // apre il file per la modifica di caselle di controllo openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("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:
La classe ReadmeCreationPage eredita una gran parte di questa funzionalità da WizardNewFileCreationPage. Per ulteriori informazioni, sfogliare l'implementazione di questa 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:
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(); }
La procedura guidata completa dovrebbe avere l'aspetto seguente: