En redigerare är den del av arbetsmiljön där användaren redigerar objekt (oftas en fil). Redigerare fungerar på ett sätt som påminner om filsystemets redigeringsverktyg, med skillnaden att de är tätt integrerade med plattformens arbetsmiljö-UI. En redigerare är alltid kopplad till ett indataobjekt (IEditorInput). Du kan tänka på indataobjektet som det dokument eller den fil som redigeras. Ändringar som görs i en redigerare bekräftas inte förrän användaren spara dem.
Endast en redigerare kan vara öppen för en viss indatafil på en arbetsmiljösida. Ett exempel: om användaren redigerar readme.txt i arbetsmiljön och sedan öppnar den igen i samma perspektiv så aktiveras samma redigerare. (Du kan öppna en annan redigerare med samma fil från ett annat arbetsmiljöfönster eller ett annat perspektiv). Till skillnad mot vyer kan däremot samma redigerartyp, t.ex. en textredigerare öppnas flera gånger på en arbetsmiljösida för flera indatafiler.
Arbetsmiljöns utökningspunkt org.eclipse.ui.editors används av insticksprogram till att lägga till redigerare i arbetsmiljön. Insticksprogram som bidrar med en redigerare måste registrera redigerarutökningen i sin plugin.xml-fil tillsammans med konfigurationsinformation för redigeraren. En del av redigerarinformationen, t.ex. implementeringens klass och namn och den ikon som ska användas på arbetsmiljöns menyer och etiketter, liknar dem i vyinformationen. Dessutom anger redigerarutökningar filtilläggen eller filnamnsmönstren för de filtyper som redigeraren hanterar. Redigerare kan även definiera en contributorClass, som är en klass som lägger till åtgärder på arbetsmiljöns menyer och verktygsfält när redigeraren är aktiv.
Gränssnittet för redigerare definieras iIEditorPart, men insticksprogram kan välja att utöka klassen EditorPart istället för att implementera en IEditorPart från början.
Obs! En redigerarutökning kan även konfigureras att starta ett externt program eller att anropa redan befintlig Java-kod. I den här diskussionen fokuserar vi på de redigerare som faktiskt är nära integrerade med arbetsmiljön och som implementeras med IEditorPart.
Readme-verktyget tillhandahåller en anpassad redigerare som främst är avsedd för att bidra med en egen sida för innehållsdisposition i arbetsmiljöns dispositionsvy.
Konfigurationen för redigerarutökningen definieras på följande sätt:
<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>
Vi ser den bekanta konfigurationskoden för id, name, icon och class. Attributet extensions beskriver de filtyper som redigeraren hanterar. (Du kan också ange filenames om du vill vara mer specifik.) Class implementerar redigeraren och contributorClass ansvarar för att tillhandahålla redigerarrelaterade åtgärder. Låt oss ta en mer utförlig titt på bidragsgivare.
Bidragsklassen lägger till redigerarrelaterade åtgärder på arbetsmiljöns meny och verktygsfält. Den måste implementera gränssnittet IEditorActionBarContributor. Bidragsgivaren är separat från själva redigeraren eftersom alla givna arbetsmiljösidor kan ha flera redigerare av samma typ. En ensam bidragsgivare delas mellan alla redigerare av en viss typ istället för att varje förekomst av en redigerare ska skapa åtgärder och bilder.
I ReadmeEditorActionBarContributor bidrar vi med tre åtgärder, "Editor Action1," "Editor Action2," och "Editor Action3." Dessa anges 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); ... }
Namnen och ikonerna för åtgärderna anges i koden och inte iplugin.xml. (Vi ignorerar skillnaderna i åtgärdsklasserna för tillfället fram tills dess att vi tittar på åtgärder som kan få nya mål.)
Lägg märke till hur lika åtgärdsinformationen är den viewActions-information vi såg i koden för visningsåtgärden. Åtgärderna anges i koden eftersom vi måste hantera delningen av åtgärderna mellan flera förekomster av samma redigerare. När åtgärderna skapas i konstruktören är de oberoende av alla enskilda förekomster av redigeraren.
När en redigerare blir aktiv och den har åtgärder som måste installeras på arbetsmiljöns menyer och verktygsfält skickar meddelandet setActiveEditor till bidragsgivaren. Bidragsgivaren ansluter redigeraråtgärderna till en viss redigerare.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
Som du kan se visas åtgärderna på arbetsmiljöns menu och verktygsfält när en readme-redigerare är aktiv.
Dessa meny- och verktygsfältsobjekt visas bara när redigeraren är aktiv. Meny-och verktygsfältsobjektens placering kan anges enligt beskrivningarna i Sökvägar för menyer och verktygsfält.
Själva readme-redigerare ReadmeEditor är inte särskilt komplicerad. Den utökar klassen TextEditor så att den kan bidra med en anpassad sida för innehållsdisposition i dispositionsvyn när en readme-fil redigeras. Den ändrar inte något beteende i textredigeraren.
Redigerare har ofta motsvarande vyer för innehållsdispositioner som ger en strukturerad vy av redigerarens innehåll och hjälper användaren navigera genom redigerarens innehåll. Mer information finns i Innehållsdispositionsvyer.
Vi kommer att ta en titt på implementeringen av textredigerare i Textredigerare och plattformstext.