org.eclipse.ui.views

Une vue correspond à une partie du plan de travail pouvant parcourir une hiérarchie d'informations ou afficher des propriétés pour un objet. Une seule instance d'une vue donnée est ouverte dans une page du plan de travail. Lorsque l'utilisateur effectue des sélections ou apporte des modifications, ces changements sont immédiatement reflétés dans le plan de travail. les vues sont souvent fournies pour prendre en charge un éditeur correspondant. Par exemple, une vue de l'aperçu montre une vue structurée des informations dans un éditeur. Une vue de propriétés montre quant à elle les propriétés d'un objet en cours d'édition.

Le point d'extension org.eclipse.ui.views permet aux plug-in d'ajouter des vues au plan de travail. Les plug-in ajoutant une vue doivent l'enregistrer dans leur fichier plugin.xml et fournir des informations sur la configuration de cette dernière, telle que sa classe d'implémentation, la catégorie (ou groupe) de vues à laquelle elle appartient, ainsi que le nom et l'icône à utiliser pour la décrire dans les menus et les libellés.

L'interface destinée aux vues est défini dans IViewPart, mais les plug-in peuvent choisir d'étendre la classe ViewPart plutôt que d'implémenter une classe IViewPart à partir de rien.

Nous avons implémenté une extension de vue minimale dans l'exemple "Hello World". Observons à présent une extension tenant compte des autres vues du plan de travail et répondant à la navigation et aux sélections de l'utilisateur. En premier lieu, attachons-nous à la déclaration de l'extension dans le fichier plugin.xml.

<extension 
   point="org.eclipse.ui.views">
	<category 
	   id="org.eclipse.ui.examples.readmetool"
	   name="%Views.category">
	</category>
	<view
 	   id="org.eclipse.ui.examples.readmetool.views.SectionsView"
	   name="%Views.ReadmeSections"
	   icon="icons/view16/sections.gif"
	   category="org.eclipse.ui.examples.readmetool"
	   class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView">
	</view>
</extension>

Ceci doit vous paraître familier. Nous voyons qu'une nouvelle vue, ReadmeSectionsView, contribue au plan de travail. L'ID vue, le nom et la catégorie sont spécifiés comme nous l'avons vu précédemment. Une icône est également fournie pour la vue, à l'aide d'un chemin d'accès relatif au répertoire d'installation du plug-in.

Observons ReadmeSectionsView. Vous pouvez afficher n'importe quelle vue en choisissant Fenêtre->Afficher la vue->Autre... et en sélectionnant la vue dans la liste Afficher la vue.

Ensuite nous affichons ReadmeSectionsView, une vue dont la liste s'affiche en incrustation. La liste est vide tant que vous ne cliquez pas sur un fichier dont l'extension est .readme, auquel cas elle se remplit d'entrées correspondant aux sections du fichier readme.

Comment le plug-in reconnaît-il le fichier readme et comment est-il informé des sélections effectuées ? En trouvant les réponses à ces questions, nous pourrons comprendre comment générer des plug-in de plan de travail intégrés.

Nous allons commencer par la méthode bien connue createPartControl. Comme nous l'avons vu dans l'exemple d'Hello World, c'est là que les widgets représentant une vue sont créés. Pour commencer, nous ignorerons une partie du code.

   public void createPartControl(Composite parent) {
      viewer = new ListViewer(parent);
      ...
      // ajouter comme module d'écoute de sélection global
      getSite().getPage().addSelectionListener(this);

      // favoriser la sélection
      selectionChanged(null, getSite().getPage().getSelection());
   }

La vue crée et stocke un ListViewer et s'enregistre comme écouteur de sélection sur sa page. Elle obtient la page à partir d'un IViewSite, qui contient des information sur le contexte de la vue, telles que sa fenêtre de plan de travail, sa page de contenu et son plug-in. Lorsque nous sommes averti d'un changement de sélection, que se passe-t-il ? Le code suivant est exécuté :

   public void selectionChanged(IWorkbenchPart part, ISelection sel) {
      //si la sélection est un fichier readme, extraire ses sections.
      AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel);
      viewer.setInput(input);
   }

La classe ReadmeModelFactory semble responsable de la conversion de la sélection en sections du readme. Ces sections sont des entrées pour l'afficheur créé dans la méthode createPartControl.

Comment l'afficheur a-t-il entré ses widgets de liste ? Pour l'instant, disons qu'une fois l'élément d'entrée indiqué à l'afficheur, ce dernier sait comment ajouter les informations dans un widget de liste (il s'agit après tout d'un ListViewer. Si vous devez savoir maintenant en quoi consiste cet afficheur, consultez la section Afficheurs

Nous ne savons toujours pas comment les fichiers readme sont détectés et d'où viennent les informations sur les sections du fichiers. Observez ReadmeModelFactory.

   public AdaptableList getSections(ISelection sel) {
      // S'il s'agir d'une sélection structurée, renvoi.
      if (!(sel instanceof IStructuredSelection))
         return null;
      IStructuredSelection structured = (IStructuredSelection)sel;

      //si la sélection est un fichier readme, extraire ses sections.
      Object object = structured.getFirstElement();
      if (object instanceof IFile) {
         IFile file = (IFile) object;
         String extension = file.getFileExtension();
         if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) {
            return getSections(file);
         }
      }

      //l'objet sélectionné n'est pas un fichier readme.
      return null;
   }

Nous vérifions la sélection pour voir s'il s'agit d'une sélection structurée (multiple). (Le concept de sélection structurée vient des afficheurs JFace.)Pour le premier objet de la sélection, nous vérifions s'il s'agit d'une ressource de fichier (IFile). Si tel est le cas, nous vérifions son extension pour voir si elle correspond à l'extension ".readme". Dès que nous savons que nous sommes en présence d'un fichier readme, nous pouvons utiliser d'autres méthodes pour analyser les sections. Vous pouvez parcourir le reste de ReadmeModelFactory, MarkElement et DefaultSectionsParser pour obtenir les détails de l'analyse du fichier.

En étudiant cette extension, nous avons couvert un grand nombre de concepts de plan de travail courants. A présent, nous allons passer aux autres extensions du plan de travail et examiner comment votre plug-in peut contribuer davantage à l'interface utilisateur du plan de travail.

Copyright IBM Corporation and others 2000, 2003.