Vous pouvez ajouter un assistant à l'option de menu Fichier->Nouveau dans le plan de travail à l'aide du point d'extension org.eclipse.ui.newWizards. L'exemple d'outil readme utilise cette définition de point d'extension pour ajouter l'assistant "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>An example of a wizard that creates sample Readme
file
</description>
<selection class="org.eclipse.core.resources.IResource"/>
</wizard>
</extension>
La catégorie indique l'endroit où l'assistant est regroupé lorsque la boîte de dialogue de sélection d'un assistant est utilisée pour trouver et lancer un assistant. Le nom de la catégorie ("Example Creation Wizards") définit le libellé utilisé dans l'assistant. Ce dernier est affecté à la catégorie. Son nom, son icône et sa description apparaissent dans la nouvelle boîte de dialogue de sélection d'un assistant illustrée ci-dessous.
Tout ceci s'affiche en fonction des marques du fichier plugin.xml. Aucun fragment du code du plug-in n'est exécuté tant que l'utilisateur ne sélectionne pas le bouton Suivant. Une fois ce bouton sélectionné, le plan de travail instancie la classe de l'assistant spécifiée dans les marques et la transmet à une classe de sélection prévue.
La classe identifiée dans cette extension (ReadmeCreationWizard) doit implémenter l'interface INewWizard. La plupart des assistants le font en étendant la classe Wizard de la plateforme bien qu'il s'agisse d'un mécanisme d'implémentation non requis par le point d'extension.
L'action de l'assistant est faible, mais il crée les pages qu'il contient. Considérons d'abord l'implémentation des pages, et nous reviendrons ensuite à l'assistant.
Le plan de travail fournit les classes de page d'assistant de base qui supportent le type de traitement effectué pour chaque point d'extension de l'assistant. Vous pouvez utiliser ces pages ou les étendre pour ajouter un traitement supplémentaire.
Le but de ReadmeCreationWizard est de créer un fichier, d'y ajouter le contenu requis et en option, d'ouvrir un éditeur sur ce fichier. La page doit définir les contrôles qui permettent à l'utilisateur de spécifier le contenu destiné au fichier et si un éditeur doit être lancé.
La page d'assistant CreateReadmePage1 est créée en étendant WizardNewFileCreationPage. Les contrôles pour une page d'assistant sont définies de manière identique à la définition des contrôles d'une vue ou d'un éditeur. La page implémente une méthode createControl, créant les widgets SWT nécessaires comme enfants du composite fourni. La superclasse ajoutant déjà des widgets qui supportent le traitement du nouveau fichier, nous n'avons plus qu'à étendre la méthode createControl dans la page de notre assistant pour ajouter les cases à cocher supplémentaires qui commandent la génération des sections et l'ouverture de l'éditeur.
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("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("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);
...
// open file for editing checkbox
openFileCheckbox = new Button(composite,SWT.CHECK);
openFileCheckbox.setText("Open file for editing when done");
openFileCheckbox.setSelection(true);
...
}
Vous devez être en mesure de suivre ce code si vous comprenez les concepts exposés dans Standard Widget Toolkit.
Les schémas de base pour l'implémentation d'une page sont les suivants :
Ajoutez des écouteurs aux contrôles qui affectent le comportement dynamique de la page. Par exemple, si la sélection d'un élément de liste ou d'une case à cocher affecte l'état des autres contrôles de la page, ajoutez un écouteur de façon à pouvoir modifier l'état de la page.
Remplissez les contrôles avec des données basées sur la sélection courante lorsque l'assistant est lancé. Certaines données peuvent dépendre des valeurs contenues dans d'autres contrôles. Certains de ces contrôles peuvent utiliser les paramètres de la boîte de dialogue pour initialiser leurs valeurs.
Utilisez setPageComplete(true) lorsque suffisamment d'informations sont fournies par l'utilisateur pour quitter la page (et passer à la page suivante ou fermer l'assistant).
La classe ReadmeCreationPage hérite une grande partie de ce comportement de WizardNewFileCreationPage. Pour plus d'informations, reportez-vous à l'implémentation de ces classes.
Maintenant que nous savons ce que fait une page, revenons à l'assistant.
L'assistant est responsable de la création des pages et de la fourniture de la logique de "fin".
Les schémas de base pour l'implémentation d'un assistant sont les suivants :
Implémentez la méthode init pour définir les variables locales des informations contextuelles telles que le plan de travail et la sélection courante.
public void init(IWorkbench workbench,IStructuredSelection selection) {
this.workbench = workbench;
this.selection = selection;
setWindowTitle("New Readme File");
setDefaultPageImageDescriptor(ReadmeImages.README_WIZARD_BANNER);
}
Implémentez addPages en créant des instances de pages.
public void addPages() {
mainPage = new ReadmeCreationPage(workbench, selection);
addPage(mainPage);
}
Implémentez performFinish pour terminer la tâche.
Les assistants multi-pages traitent généralement la logique de fin dans l'assistant lui-même, du fait que chaque page ajoute des informations qui déterminent le mode d'implémentation de la tâche. Les assistants composés d'une seule page peuvent implémenter la logique dans l'assistant ou demander à la page de terminer le travail. L'approche que vous adoptez dépend largement de l'endroit où est conservé votre état. Dans le cas de l'assistant de readme, nous allons demander à la page de gérer le traitement de fin.
public boolean performFinish() {
return mainPage.finish();
}
L'assistant terminé ressemble à ce qui suit :