Lorsqu'une boîte de dialogue standard est trop simple pour votre plug-in, vous pouvez générer votre propre boîte de dialogue à l'aide de la classe Dialog. Nous avons vu au préalable comment l'outil readme participe à l'action "Open Readme Browser" dans un jeu d'actions. Ce dernier apparaît dans la barre d'outils du plan de travail et dans le menu Fenêtre->Editeur de fichier Readme.
A présent, nous sommes prêts à aborder l'implémentation de l'action WindowActionDelegate dans l'outil readme.
public void run(IAction action) { SectionsDialog dialog = new SectionsDialog(window.getShell(), ReadmeModelFactory.getInstance().getSections(selection)); dialog.open(); }
Le délégué d'action de la fenêtre pour l'action définie utilise la sélection courante dans la vue du navigateur des ressources (fichier .readme) pour obtenir la liste des sections du fichier readme. Cette liste et le shell de la fenêtre du plan de travail sont transmis à SectionsDialog.
Lorsque l'utilisateur sélectionne l'action, SectionsDialog est ouvert.
SectionsDialog est implémenté dans le plug-in de l'outil readme en sous-classant la classe Dialog dans le package org.eclipse.jface.dialogs.
La classe Dialog fournit un support de base pour la génération d'une fenêtre shell de dialogue, la création des boutons de commande courants et le lancement de la boîte de dialogue. Les sous-classes sont responsables du traitement du contenu de la boîte de dialogue.
SectionsDialog crée une liste SWT permettant d'afficher la liste des sections. Un afficheur JFace est utilisé pour remplir la liste. (Les afficheurs JFace sont abordés à la section Afficheurs.) Notez que la classe Dialog n'a pas besoin de créer de bouton pour la boîte de dialogue, car cette opération est effectuée par la superclasse.
protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); List list = new List(composite, SWT.BORDER); ... ListViewer viewer = new ListViewer(list); ... return composite; }
protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MessageUtil.getString("Readme Sections")); ... }
Les boîtes de dialogue peuvent être aussi simples ou compliquées que nécessaire. Lorsque vous implémentez une boîte de dialogue, une grande partie de son code est impliqué dans la création des contrôles SWT représentant sa zone de contenu et traitant les événements nécessaires lorsque la boîte de dialogue est active. Lorsqu'un bouton est activé par l'utilisateur, la boîte de dialogue peut interroger l'état des divers contrôles (ou afficheurs) qui la constitue pour déterminer ce qu'elle doit faire.