Interne en externe editors

org.eclipse.ui.editors

Dit extensiepunt wordt gebruikt om nieuwe editors toe te voegen aan de workbench. Een editor is een visuele component binnen een workbenchpagina. Deze wordt gewoonlijk gebruikt om een document of invoerobject door te bladeren of te bewerken. Voor het openen van een editor, wordt "Openen" op een IFile opgeroepen. Wanneer deze actie wordt uitgevoerd, wordt het workbenchregister geraadpleegd om vast te stellen welke editor geschikt is voor het bestandstype en vervolgens wordt een nieuwe instance van het editortype gemaakt. Het uiteindelijke resultaat is afhankelijk van het editortype. De workbench levert ondersteuning voor het maken van interne editors, die in de workbench worden geïntegreerd, en voor externe editors die in een apart venster worden gestart. Er bestaan tussen deze twee uitersten nog verschillende niveaus van integratie.

Voor een interne editor kan een volledige integratie tussen het workbenchvenster en het editorgedeelte worden bereikt. Het workbenchmenu en de -werkbalk worden vooraf geladen met een aantal gemeenschappelijke acties, bijvoorbeeld kopiëren, knippen en plakken. De actieve gedeelten, views of editors moeten de implementatie leveren voor deze acties. Een interne editor kan ook nieuwe acties definiëren die in het workbenchvenster worden afgebeeld. Deze acties worden alleen afgebeeld als de editor actief is.

De integratie tussen de workbench en externe editors is oppervlakkiger. Voor een externe editor geldt dat de editor kan worden gestart door de workbench, maar daarna kan door de workbench niet worden vastgesteld wat de status is van de externe editor en kan niet worden samengewerkt behalve via het bestandssysteem.

<!ELEMENT extension (editor*)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT editor (contentTypeBinding*)>

<!ATTLIST editor

id               CDATA #REQUIRED

name             CDATA #REQUIRED

icon             CDATA #IMPLIED

extensions       CDATA #IMPLIED

class            CDATA #IMPLIED

command          CDATA #IMPLIED

launcher         CDATA #IMPLIED

contributorClass CDATA #IMPLIED

default          (true | false) "false"

filenames        CDATA #IMPLIED

symbolicFontName CDATA #IMPLIED

matchingStrategy CDATA #IMPLIED>


<!ELEMENT contentTypeBinding EMPTY>

<!ATTLIST contentTypeBinding

contentTypeId CDATA #REQUIRED>

Hiermee wordt aangekondigd dat de betreffende editor het inhoudtype kan lezen en geschikt is voor het bewerken van bestanden van dit type.



Een voorbeeld van de extensiedefinitie van een interne editor:

   

<extension point=

"org.eclipse.ui.editors"

>

<editor id=

"com.xyz.XMLEditor"

name=

"Fancy XYZ XML editor"

icon=

"./icons/XMLEditor.gif"

extensions=

"xml"

class=

"com.xyz.XMLEditor"

contributorClass=

"com.xyz.XMLEditorContributor"

symbolicFontName=

"org.eclipse.jface.textfont"

default=

"false"

>

</editor>

</extension>

Als het command-kenmerk gebruikt is, wordt dit behandeld als opdrachtregel van een extern programma en verwerkt op een manier die afhankelijk is van het platform.

Als het launcher-kenmerk gebruikt is, wordt de editor ook behandeld als extern programma. In dit geval moet de opgegeven klasse org.eclipse.ui.IEditorLauncher implementeren. De launcher wordt geïnstantieerd en vervolgens wordt open(IFile file) opgeroepen om de editor te starten.

Als het class-kenmerk wordt gebruikt, wordt door de workbench verondersteld dat het een interne editor is en moet de opgegeven klasse org.eclipse.ui.IEditorPart implementeren. In het algemeen worden de subklassen onder org.eclipse.ui.EditorPart geplaatst bij het definiëren van een nieuw editortype. Ook is het nodig een contributorClass-kenmerk te definiëren. De opgegeven klasse moet org.eclipse.ui.IEditorActionBarContributor implementeren en wordt gebruikt om nieuwe acties aan het menu en de werkbalk van de workbench toe te voegen die de functies van het editortype weerspiegelen.

Binnen de workbench kunnen meerdere editors van een bepaald type geopend zijn. Er kunnen bijvoorbeeld een of meer Java-editors geopend zijn. Om het maken van dubbele acties of actieafbeeldingen te voorkomen, is het editorconcept in tweeën gesplitst. Een IEditorActionBarContributor is verantwoordelijk voor het maken van de acties. De editor is verantwoordelijk voor het implementeren van de acties. Bovendien wordt de Deelnemer (contributor) gedeeld met elke openstaande editor. Het gevolg van dit ontwerp is dat er slechts een set acties is voor een of meer geopende editors.

De Deelnemer voegt nieuwe acties toe aan het menu en de werkbalk van de workbench die het editortype weerspiegelen. Deze acties worden gedeeld en als deze worden opgeroepen, hebben de acties effect op de actieve editor. De actieve editor wordt doorgegeven aan de Deelnemer door het oproepen van IEditorActionBarContributor.setActiveEditor. De ID's van acties en hoofdgroepen binnen het workbenchvenster worden gedefinieerd in org.eclipse.ui.IWorkbenchActionConstants. Deze worden gebruikt als referentiepunt voor het toevoegen van nieuwe acties. Toplevelmenu's worden gemaakt met behulp van de volgende waarden voor het padkenmerk:

Acties en menu's die aan deze paden zijn toegevoegd, worden alleen afgebeeld wanneer de bijbehorende editor actief is. Wanneer de editor wordt gesloten, worden de menu's en acties verwijderd.

De workbench levert een "Standaard teksteditor". Het product van de eindgebruiker kan andere editors bevatten als onderdeel van het geleverde pakket. In dit geval worden de editors geregistreerd als extensies, waarbij bovenstaande syntaxis wordt gebruikt.