org.eclipse.ui.editors

En editor er en arbejdsbænksdel, som giver brugeren mulighed for at redigere et objekt, som ofte er en fil. Editorerne fungerer på samme måde som redigeringsværktøjer i filsystemet, bortset fra at de er tæt integreret med brugergrænsefladen til platformens arbejdsbænk. En editor er altid knyttet til et inputobjekt (IEditorInput). Du kan tænke på inputobjektet som det dokument eller den fil, der redigeres. Ændringer i en editor committes ikke, før brugeren gemmer dem.

Der kan kun åbnes én editor for et bestemt editorinput på en side på arbejdsbænken. Hvis brugeren f.eks. redigerer filen readme.txt på arbejdsbænken, aktiveres den samme editor, når filen åbnes i det samme perspektiv. Du kan åbne filen med en anden editor i et andet vindue eller perspektiv på arbejdsbænken.   I modsætning til vinduer kan den samme editortype, som f.eks. en teksteditor, åbnes mange gange for forskellige input på én side på arbejdsbænken.

Arbejdsbænkens udvidelsespunkt org.eclipse.ui.editors bruges af plugins til at tilføje editorer til arbejdsbænken. Plugins, som bidrager med en editor, skal registrere editorudvidelsen i deres plugin.xml-filen sammen med andre konfigurationsoplysninger om editoren. Nogle af editoroplysningerne, så som implementeringsklassen og det navn og den ikon, der skal bruges på arbejdsbænkens menuer og etiketter, ligner oversigtsoplysningerne. Derudover angiver editorudvidelser de filtyper eller filnavnsmønstre for filtyperne, som editoren forstår. Editorene kan også definere en contributorClass, som er en klasse, der tilføjer funktioner til arbejdsbænkens menuer og værktøjslinjer, når editoren er aktiv.

Grænsefladen til editorer er defineret i IEditorPart, men plugins kan vælge at udvide klassen EditorPart i stedet for at implementere en IEditorPart fra ny.

Bemærk:  En editorudvidelse kan også konfigureres til at starte et eksternt program eller til at kalde allerede eksisterende Java-kode. I dette afsnit fokuseres der på de editorer, som er tæt integreret med arbejdsbænken og er implementeret med IEditorPart.

Readme-værktøjet omfatter en tilpasset editor, som primært bruges til at bidrage med sin egen indholdsstrukturside til arbejdsbænkens strukturoversigt.   

Konfigurationen af editorudvidelsen er defineret som følger.

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

I koden ses den kendte konfigurationskode for id, name, icon og class. Attributten extensions beskriver de filtyper, som editoren forstår. Du kan også angive filenames, hvis du har brug for at være mere specifik. class implementerer editoren, og contributorClass har ansvaret for at levere editorrelaterede funktioner. Lad os se nærmere på bidragyderen.

Bidragydere til editorfunktioner

Bidragyderklassen tilføjer editorrelaterede funktioner til arbejdsbænkens menuer og værktøjslinje. Den skal implementere grænsefladen IEditorActionBarContributor. Bidragyderen er adskilt fra selve editoren, fordi en vilkårlig arbejdsbænksside kan have flere editorer af samme type. En enkelt bidragyder deles af alle editorer af en bestemt type, i stedet for at hver forekomst af en editor skal oprette funktioner og billeder.  

Der bidrages med tre funktioner i ReadmeEditorActionBarContributor: "Editor Action1," "Editor Action2" og "Editor Action3." De konfigureres i konstruktøren.  

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

Navnene og ikonerne for funktioner konfigureres i koden i stedet for i plugin.xml.  I øjeblikket ignoreres forskellen i funktionsklasser, indtil der ses nærmere på funktioner, som kan ændre mål.  

Bemærk, at funktionsoplysningerne ligner viewActions-oplysningerne i koden til oversigtsfunktionen. Funktionerne konfigureres i koden, fordi vi skal styre delingen af funktionerne mellem forskellige forekomster af den samme editor. Når funktionerne oprettes i konstruktøren, er de uafhængige af en bestemt forekomst af editoren.

Når en editor aktiveres, og den har funktioner, som skal installeres på arbejdsbænkens menuer og værktøjslinje, sendes setActiveEditor-meddelelsen til bidragyderen. Bidragyderen forbinder editorfunktionerne med en bestemt editor.  

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

Som det kan ses, vises funktionerne på arbejdsbænkens menu og værktøjslinje, når en Readme-editor er aktiv.

Readme-indgang på arbejdsbænkens menulinje med tre editorfunktioner

Arbejdsbænkens værktøjslinje med tre Readme-funktioner

Menupunkterne og værktøjslinjeelementerne vises kun, når editoren er aktiv. Placeringen af menupunkterne og værktøjslinjeelementerne kan angives som beskrevet i Menu- og værktøjslinjestier.

Editorer og indholdsstrukturer

Selve Readme-editoren, ReadmeEditor, er ikke særlig kompliceret. Den udvider klassen TextEditor, så den kan bidrage med en tilpasset indholdsstrukturside til strukturoversigten, når en Readme-fil redigeres. Det ændrer ikke funktionsmåderne i teksteditoren.

Editorerne har ofte tilsvarende indholdsstrukturer, som giver en struktureret oversigt af indholdet af editoren og hjælper brugeren med at navigere rundt i indholdet. Der er flere oplysninger i Indholdsstrukturer.

Implementeringen af teksteditorer er beskrevet i Teksteditorer og platformstekst.