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" 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>
category décrit le regroupement de l'assistant. Une parentCategory optionnelle définit la nouvelle catégorie en tant qu'enfant d'une catégorie existante.
Les catégories de niveau supérieur s'affichent dans le menu
Fichier > Nouveau. Dans cet exemple, parentCategory
est définie comme catégorie "Examples". D'où provient la
catégorie parent ? Le plug-in org.eclipse.ui définit une
catégorie d'exemples standard dans sa marque :<extension
point="org.eclipse.ui.newWizards">
<category
name="%NewWizards.Category.Examples"
id="org.eclipse.ui.Examples">
</category>
...
Cette catégorie s'affiche dans le menu Fichier > Nouveau.
La catégorie d'outil readme name définit le libellé utilisé pour la couche de regroupement située sous la catégorie parent. Ces catégories sont indiquées sur la gauche de l'assistant Nouvel exemple. Les nom et icône de l'assistant s'affichent sur la droite de l'assistant lorsque vous cliquez sur la catégorie. La description de l'assistant s'affiche en haut de l'assistant lorsque vous le sélectionnez dans la liste de droite comme indiqué ci-dessous :
Ces informations sur l'assistant ne s'affichent qu'à cause de la marque du fichier plugin.xml. Aucun des codes de plug-in ne s'exécute tant que l'utilisateur n'a pas cliqué sur 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é.
Nous créons la page de l'assistant ReadmeCreationPage 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) { // hérite du conteneur par défaut et des widgets de spécification de noms super.createControl(parent); Composite composite = (Composite)getControl(); ... // groupe de génération de sections 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)); ... // cases à cocher de génération de sections 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); ... // ouverture du fichier pour modifier la case à cocher openFileCheckbox = new Button(composite,SWT.CHECK); openFileCheckbox.setText(MessageUtil.getString("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 :
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 :
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(); }
L'assistant terminé ressemble à ce qui suit :