org.eclipse.ui.editors

Een editor is een onderdeel van de workbench waarmee een object (meestal een bestand) kan worden bewerkt. De werking van editors is vergelijkbaar met die van bestandsbewerkingsprogramma's van het besturingssysteem, maar ze zijn wel nauw verbonden met de workbenchgebruikersinterface van het platform. Een editor wordt altijd aan een invoerobject (IEditorInput) gekoppeld. In feite is het bewerkte document of bestand het invoerobject. Wijzigingen die u in een editor aanbrengt, worden pas bij het opslaan doorgevoerd.

In een workbenchpagina kan per editorinvoer slechts één editor geopend zijn. Als u bijvoorbeeld het bestand readme.txt bewerkt in de workbench, wordt dezelfde editor geopend in hetzelfde perspectief als u het bestand opnieuw opent. (U kunt het bestand in een andere editor openen vanuit een ander workbenchvenster of -perspectief.) In tegenstelling tot views kan een editor (zoals een teksteditor) meerdere keren op één workbenchpagina geopend zijn voor uiteenlopende bestanden.

Het workbenchextensiepunt org.eclipse.ui.editors wordt door plugins gebruikt om editors toe te voegen aan de workbench. Plugins waarmee een editor wordt toegevoegd, moeten de editorextensie en configuratiegegevens voor de editor registreren in het pluginbestand plugin.xml. Bepaalde editorgegevens, zoals de implementatieklasse (class) en de naam (name) en het pictogram (icon) voor gebruik in menu's en op labels van de workbench, zijn vergelijkbaar met de gegevens van views. Bovendien moeten door een editorextensie de bestandsextensies of bestandsnaampatronen worden verstrekt van bestanden die geschikt zijn voor gebruik met de editor. Aan een editor kan ook de klasse contributorClass worden toegewezen, waarmee acties aan menu's en werkbalken van de workbench worden toegevoegd zodra de editor actief is.

De interface voor editors is gedefinieerd in IEditorPart, maar de klasse EditorPart kan door plugins worden uitgebreid, zodat geen volledig nieuwe IEditorPart hoeft te worden gemaakt.

Opmerking: U kunt ook een editorextensie configureren voor het starten van een extern programma of voor het aanroepen van al bestaande Java-code. In dit onderwerp komen de editors aan bod die nauw geïntegreerd zijn met de workbench en geïmplementeerd worden met IEditorPart.

De readme-tool bevat een eigen editor waarmee hoofdzakelijk een specifieke inhoudsoverzichtspagina wordt toegevoegd aan de view Overzicht van de workbench.

De configuratie van de editorextensie is als volgt:

    <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>

In dit voorbeeld komt de al bekende configuratiemarkup voor van het ID (id), de naam (name), het pictogram (icon) en de klasse (class). Met het kenmerk extensions worden alle geschikte bestandstypen voor gebruik met de editor gedefinieerd. (U kunt ook bestandsnamen opgeven met het kenmerk filenames om specifieker te zijn.) Met de klasse (class) wordt de editor geïmplementeerd en met het kenmerk contributorClass worden editoracties verstrekt. Nu wordt dieper ingegaan op de deelnemer.

Deelnemers voor editoracties

Door middel van de deelnemersklasse worden editoracties aan het menu en de werkbalk van de workbench toegevoegd. De interface IEditorActionBarContributor moet worden geïmplementeerd. De deelnemer staat los van de editor zelf, omdat workbenchpagina's meerdere editors van hetzelfde type kunnen bevatten. Eén deelnemer wordt door alle editors van een bepaald type gedeeld; het is dus niet zo dat acties en afbeeldingen door elke instance van een editor worden gemaakt.

In ReadmeEditorActionBarContributor worden drie acties toegevoegd, die alle ingesteld worden in de constructor.

   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);
	...   
   }

De namen en pictogrammen worden ingesteld in de code en niet in het bestand plugin.xml. (De verschillen tussen de actieklassen worden in herbruikbare acties ingesteld.)

Merk op dat de actiegegevens vergelijkbaar zijn met de gegevens van viewActions uit de markup voor de viewactie. De acties worden ingesteld in code, omdat ze moeten worden ingesteld voor gemeenschappelijk gebruik door verschillende instances van dezelfde editor. Als de acties in de constructor worden gemaakt, zijn ze onafhankelijk van editor-instances.

Zodra een editor actief wordt en acties bevat die in de menu's en op de werkbalk van de workbench moeten worden geïnstalleerd, wordt het bericht setActiveEditor naar de deelnemer verzonden. De editoracties worden door de deelnemer aan een bepaalde editor gekoppeld.

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

Zoals u ziet, worden de acties afgebeeld in het menu en op de werkbalk van de workbench wanneer een readme-editor actief is.

Readme-vermelding in workbenchmenubalk met drie editoracties

Workbenchwerkbalk met drie readme-acties

Deze menu- en werkbalkitems worden alleen afgebeeld wanneer de editor actief is. Hoe u de locatie van de menu- en werkbalkitems kunt opgeven, leest u in Paden van menu's en werkbalken.

Editors en inhoudsoverzichten

De readme-editor zelf, ReadmeEditor, zit niet erg ingewikkeld in elkaar. De editor is een uitbreiding van de klasse TextEditor, zodat een aangepaste inhoudsoverzichtspagina kan worden toegevoegd aan de view Overzicht bij het bewerken van een README-bestand. Het gedrag van de teksteditor wordt niet beïnvloed.

Aan editors zijn vaak bijbehorende inhoudsoverzichten gekoppeld waarmee u een gestructureerde view van de inhoud van de editor kunt geven en de gebruiker kunt helpen bij het navigeren door de inhoud van de editor. Raadpleeg Inhoudsoverzichten voor meer informatie.

In Teksteditors en platformtekst wordt de implementatie van teksteditors belicht.