Un jeu de classes et d'interfaces extensif est disponible pour générer des interfaces utilisateur complexes. Heureusement, vous n'avez pas besoin de toutes les connaître pour réaliser quelque chose de simple. Nous allons commencer par observer certains concepts exposés dans l'interface utilisateur du plan de travail et leur structure.
Nous avons librement utilisé le terme plan de travail pour faire référence à la fenêtre qui s'ouvre lorsque vous démarrez la plateforme. Creusons un peu et examinons certains des composants visuels qui constituent le plan de travail.
Pour le reste de cette discussion, lorsque nous utiliserons le terme "plan de travail", nous ferons référence à la fenêtre du plan de travail (IWorkbenchWindow). La fenêtre du plan de travail est la fenêtre du niveau supérieur dans un plan de travail. Il s'agit du cadre contenant la barre de menus, la barre d'outils, la ligne d'état, la barre de raccourcis et les pages. En règle générale, vous ne devez pas programmer pour la fenêtre du plan de travail. Vous voulez juste savoir qu'elle existe.
Remarque : Vous pouvez ouvrir plusieurs fenêtre de plan de travail à l'aide du menu Perspective->Ouvrir. Par défaut, les nouvelles perspectives sont ouvertes dans la même fenêtre du plan de travail. D'autres options sont disponibles (pour plus de détails, reportez-vous à la page des préférences du plan de travail). Chaque fenêtre du plan de travail est un monde autonome d'éditeurs et de vues, aussi ne nous attacherons-nous qu'à une seule fenêtre du plan de travail.
Du point de vue de l'utilisateur, un plan de travail contient des vues et des éditeurs. Il existe quelques autres classes utilisées pour implémenter la fenêtre du plan de travail.
Dans la fenêtre du plan de travail, vous pouvez trouver une ou plusieurs pages (IWorkbenchPage) qui contiennent des parties (ou sections). Les pages sont un mécanisme d'implémentation destiné à regrouper ces parties. En règle générale, vous n'avez pas à effectuer de programmation dans la page, mais vous la verrez dans le contexte de programmation et de débogage.
Remarque : Les pages sont utilisées dans l'implémentation des perspectives. Elles permettent aux parties du plan de travail d'être placées dans un conteneur externe sans s'occuper du fait que la perspective soit ouverte dans la même fenêtre du plan de travail ou dans une nouvelle fenêtre du plan de travail.
Les vues et les éditeurs représentent l'endroit où nous passons des détails d'implémentation à la programmation de plug-ins courants. Lorsque vous ajoutez un composant visuel au plan de travail, vous devez décider si vous souhaitez implémenter une vue ou un éditeur. Comment devez-vous choisir ?
Dans l'un ou l'autre cas, vous générez une vue ou un éditeur selon un cycle de vie commun.
Pour créer les widgets SWT représentant votre composant visuel, vous implémentez une méthode createPartControl. Vous devez déterminer les widgets à utiliser et allouer les ressources de l'interface utilisateur requises pour afficher votre vue ou votre éditeur.
Lorsque votre vue ou votre éditeur est sélectionné, vous recevez une notification setFocus, vous pouvez ainsi définir la mise en évidence du widget correct.
Lorsque la vue ou l'éditeur est fermé, vous recevez le message dispose qui signifie que la vue ou l'éditeur a été fermé. A ce point, les contrôles affectés dans createPartControl ont déjà été supprimés pour vous, mais vous devez supprimer les ressources de graphiques (curseurs, icônes ou polices par exemple) que vous avez affectées en créant les contrôles ou en répondant aux événements de widget.
Tout au long de ce cycle de vie, des événements sont émis à partir de la page du plan de travail pour notifier les parties intéressées de l'ouverture, de l'activation, de la désactivation et de la fermeture des vues et des éditeurs.
Cela semble simple ! Cela peut l'être. C'est la magie des vues et des éditeurs du plan de travail. Ce ne sont que des collecteurs de widget, qui peuvent être aussi simples ou aussi compliqués que vous le souhaitez. Nous avons abordé précédemment la plus simple des vues lorsque nous avons généré la vue Hello World. La voici de nouveau, maintenant que nous avons expliqué un peu mieux ce qui se passe.
package org.eclipse.examples.helloworld;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.ui.part.ViewPart;
public class HelloWorldView extends ViewPart {
Label label;
public HelloWorldView() {
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("Hello World");
}
public void setFocus() {
// set focus to my widget. For
a label, this doesn't
// make much sense, but for more
complex sets of widgets
// you would decide which one gets
the focus.
}
}
Notez que nous n'avons pas eu à implémenter de méthode dispose() du fait que nous n'avons rien fait d'autre que de créer un libellé dans la méthode createPartControl(parent). Si nous avions affecté des ressources de l'interface utilisateur, telles que des images ou des polices, nous les supprimerions ici. Comme nous avons étendu la classe ViewPart, nous héritons de l'implémentation de "do nothing" (pas d'action requise) de la méthode dispose().