org.eclipse.ui.editors

Un éditeur est une partie du plan de travail qui permet à un utilisateur d'éditer un objet (souvent un fichier). Les éditeurs fonctionnent de la même façon que les outils d'édition du système de fichiers, sauf qu'ils sont étroitement intégrés à l'interface utilisateur du plan de travail de la plate-forme. Un éditeur est toujours associé à un objet d'entrée (IEditorInput). Vous pouvez considérer l'objet d'entrée comme un document ou un fichier qui est édité. Les modifications effectuées dans un éditeur ne sont pas validées tant que l'utilisateur ne les a pas sauvegardées.

Un seul éditeur peut être ouvert pour toute entrée d'éditeur spécifique dans une page du plan de travail. Par exemple, si l'utilisateur édite le fichier readme.txt dans le plan de travail, la réouverture de ce fichier dans la même perspective activera le même éditeur. (Vous pouvez ouvrir un autre éditeur sur le même fichier à partir d'une fenêtre ou d'une perspective différente du plan de travail.) Contrairement aux vues cependant, le même type d'éditeur (un éditeur de texte par exemple) peut être ouvert plusieurs fois dans une page du plan de travail pour des entrées différentes.

Le point d'extension du plan de travail org.eclipse.ui.editors est utilisé par les plug-in pour ajouter des éditeurs au plan de travail. Les plug-in qui ajoutent un éditeur doivent enregistrer l'extension de l'éditeur dans leur fichier plugin.xml, avec les informations de configuration propres à l'éditeur. Certaines de ces informations, telles que la classe d'implémentation ainsi que le nom et l'icône à utiliser dans les menus et les libellés du plan de travail, sont similaires à celles de la vue. De plus, les extensions d'éditeur spécifient les extensions de fichier ou les modèles de nom de fichier des types de fichiers que l'éditeur comprend. Les éditeurs peuvent également définir une classe contributorClass, qui ajoute des actions aux menus et aux barres d'outils du plan de travail lorsque l'éditeur est actif.

L'interface pour les éditeurs est définie dans IEditorPart, mais les plug-in peuvent choisir d'étendre la classe EditorPart plutôt que d'implémenter IEditorPart à partir de rien.

Remarque :  une extension d'éditeur peut également être configurée pour lancer un programme externe ou appeler un code Java préexistant. Dans cette présentation, nous mettons l'accent sur les éditeurs étroitement intégrés au plan de travail et implémentés à l'aide de IEditorPart.

L'outil readme fournit un éditeur personnalisé principalement dans le but de faire contribuer sa propre page de décomposeur de contenu à la vue de l'aperçu du plan de travail.   

La configuration de l'extension de l'éditeur est définie comme suit :

<extension
    point = "org.eclipse.ui.editors">
	<editor
  	   id = "org.eclipse.ui.examples.readmetool.ReadmeEditor"
  	   name="%Editors.ReadmeEditor"
      	   icon="icons/obj16/editor.png"
      	   class="org.eclipse.ui.examples.readmetool.ReadmeEditor"
	   extensions="readme"
           contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor">
	</editor>
</extension>

Les marques de configuration sont celles habituelles pour l'ID, le nom, l'icône et la classe.  L'attribut extensions décrit les types de fichiers que l'éditeur comprend. Vous pouvez également indiquer des noms de fichiers pour être plus spécifique. La classe implémente l'éditeur et contributorClass doit fournir des actions liées à l'éditeur. Penchons-nous plus en détails sur le programme de contribution.

Programmes de contribution d'actions de l'éditeur

La classe du programme de contribution ajoute des actions liées à l'éditeur aux menus et à la barre d'outils du plan de travail. Elle doit implémenter l'interface IEditorActionBarContributor. Le programme de contribution est isolé de l'éditeur lui-même du fait que toute page d'un plan de travail donné peut avoir plusieurs éditeurs du même type. Au lieu que chaque instance d'un type d'éditeur crée des actions et des images, un seul programme de contribution est partagé par tous les éditeurs d'un type spécifique. 

Dans ReadmeEditorActionBarContributor, nous faisons contribuer trois actions, "Editor Action1," "Editor Action2," et "Editor Action3". Ces actions sont définies dans le constructeur.

   public ReadmeEditorActionBarContributor() {
      	...
	action1 = new EditorAction(MessageUtil.getString("Editor_Action1")); 
	action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1")); 
	action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE);
	action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE);
	...	
	action2 = new RetargetAction(IReadmeConstants.RETARGET2, MessageUtil.getString("Editor_Action2")); 
	action2.setToolTipText(MessageUtil.getString("Readme_Editor_Action2")); 
	action2.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_DISABLE);
	action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_ENABLE);
	...
	action3 = new LabelRetargetAction(IReadmeConstants.LABELRETARGET3, MessageUtil.getString("Editor_Action3"));
	action3.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_DISABLE);
	action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_ENABLE);
	...   
   }

Les noms et icônes des actions sont configurés dans le code au lieu du fichier plugin.xml. Nous ignorons les différences entre les classes d'actions pour le moment jusqu'à l'étude des actions redirigeables.  

Notez la similitude de ces informations avec celles de viewActions vues dans les marques de l'action d'affichage. Les actions sont définies dans le code car nous devons gérer leur partage entre les différentes instances du même éditeur. Lorsque les actions sont créées dans le constructeur, elles sont indépendantes de toute instance de l'éditeur.

Lorsqu'un éditeur est actif et possède des actions devant être intégrées aux menus et à la barre d'outils du plan de travail, le message setActiveEditor est envoyé au programme de contribution. Ce dernier connecte les actions de l'éditeur à un éditeur spécifique.  

   public void setActiveEditor(IEditorPart editor) {
      ...
      action1.setActiveEditor(editor);
      ...
   }

Comme vous pouvez le voir, les actions s'affichent dans le menu et la barre d'outils du plan de travail lorsqu'un éditeur de readme est actif.

Entrée du readme dans la barre de menus du plan de travail avec trois actions d'éditeur

Barre d'outils du plan de travail avec trois actions du readme

Ces options de menu et de barre d'outils s'affichent uniquement lorsque l'éditeur est actif. L'emplacement des options de menu et de barre d'outils peut être spécifié comme indiqué à la section Chemins d'accès aux menus et à la barre d'outils.

Editeurs et décomposeurs de contenu

L'éditeur de readme, ReadmeEditor, n'est pas très compliqué. Il étend la classe TextEditor afin de pouvoir ajouter une page de décomposeur de contenu personnalisée à la vue de l'aperçu lorsqu'un fichier readme est en cours d'édition. Il ne modifie pas le comportement au sein de l'éditeur de texte.

Les éditeurs comportent souvent des gestionnaires de contenu correspondants qui fournissent une vue structurée du contenu de l'éditeur et aident l'utilisateur à naviguer dans le contenu de l'éditeur. Pour plus de détails, reportez-vous à la section Décomposeurs de contenu.

Nous aborderons l'implémentation des éditeurs de texte dans la section Editeurs de texte et texte de la plate-forme.