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>
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 définit l'intitulé utilisé dans l'assistant. Ce dernier est lui-même attribué à la catégorie. Son nom, son icône et sa description apparaissent dans la nouvelle boîte de sélection 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é.
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 :