Et redigeringsprogram er den delen av arbeidsbenken der brukeren redigerer objekter (oftest en fil). Redigeringsprogrammer fungerer på samme måte som filsystemets redigeringsverktøy, men er i motsetning til sistnevnte tett integrert med plattformens arbeidsbenkbrukergrensesnitt. Det knyttes alltid et redigeringsprogram til et inndataobjekt (IEditorInput). Du kan tenke deg inndataobjektet som dokumentet eller filen som redigeres. Endringer i et redigeringsprogram iverksettes ikke før brukeren lagrer dem.
En arbeidsbenkside kan bare ha ett åpent redigeringsprogram for en inndatafil. Hvis for eksempel brukeren redigerer readme.txt i arbeidsbenken, vil samme redigeringsprogram bli aktivert hvis filen åpnes på nytt i samme perspektiv. (Du kan åpne et annet redigeringsprogram med samme fil fra et annet arbeidsbenkvindu eller et annet perspektiv). I motsetning til visninger kan derimot samme redigeringsprogramtype, for eksempel en tekstredigeringsprogram, åpnes flere ganger på en arbeidsbenkside for ulike inndata.
Plugin-moduler bruker arbeidsbenkens utvidelsespunkt org.eclipse.ui.editors for å legge til redigeringsprogrammer i arbeidsbenken. Plugin-moduler som bidrar med et redigeringsprogram, må registrere redigeringsprogramutvidelsen i filen plugin.xml samt konfigurasjonsinformasjon for redigeringsprogrammet. Noe av redigeringsprograminformasjonen, for eksempel implementeringens klasse og navn samt ikonet som skal brukes i arbeidsbenkmenyer og -etiketter, likner på visningsinformasjonen. I tillegg angir redigeringsprogramutvidelser filtypen eller filnavnmønstre for filtypen som redigeringsprogrammet håndterer. Redigeringsprogrammer kan dessuten definere en contributorClass, som er en klasse som legger til handlinger på arbeidsbenkmenyer og verktøylinjer når redigeringsprogrammet er aktivt.
Grensesnittet for redigeringsprogrammer defineres i IEditorPart, men plugin-moduler kan velge å utvide klassen EditorPart i stedet for å implementere IEditorPart fra grunnen av.
Merk: En redigeringsprogramutvidelse kan også konfigureres slik at den starter et eksternt program eller kaller en eksisterende Java-kode. Her fokuserer vi på de redigeringsprogrammene som er tett integrert med arbeidsbenken og som implementeres med IEditorPart.
Readme-verktøyet oppgir et tilpasset redigeringsprogram først og fremst for å bidra med en egen side for innholdsdisposisjon i arbeidsmiljøets disposisjonsvisning.
Konfigurasjonen for redigeringsprogramutvidelsen er definert slik:
<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 kjente konfigurasjonskodetypen for id, name, icon og class. Attributtet extensions beskriver filtypene som håndteres av redigeringsprogrammet. (Du kan også angi filnavn hvis du vil være mer spesifikk.) Redigeringsprogrammet implementeres av class mens contributorClass har ansvar for å oppgi redigeringsprogramrelaterte handlinger. La oss se nærmere på bidragsyteren.
Bidragsyterklassen legger til redigeringsprogramhandlinger på arbeidsbenkmenyen og verktøylinjen. Den må implementere grensesnittet IEditorActionBarContributor. Bidragsyteren holdes separat fra selve redigeringsprogrammet fordi en gitt arbeidsbenkside kan ha flere redigeringsprogrammer av samme type. Alle redigeringsprogrammer av en bestemt type deler en bidragsyter i stedet for at hver forekomst av redigeringsprogrammet skal opprette handlinger og bilder.
I ReadmeEditorActionBarContributor bidrar vi med tre handlinger "Editor Action1," "Editor Action2," og "Editor Action3." Disse angis 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 ikonene for handlingene defineres i koden og ikke i plugin.xml. (Vi ser foreløpig bort fra forskjellen i handlingsklassene, men kommer tilbake til dette når vi ser på målskiftende handlinger.)
Merk at handlingsinformasjonen er svært lik viewActions-informasjonen i kodetypen for visningshandlingen. Handlingene defineres i koden siden vi skal håndtere delingen av handlinger mellom ulike forekomster av samme redigeringsprogram. Når handlingene er opprettet i konstruktøren, er de ikke avhengige av bestemte forekomster av redigeringsprogrammet.
Når et redigeringsprogram blir aktivt og har handlinger som må installeres på arbeidsbenkmenyene og verktøylinjen, sendes meldingen setActiveEditor til bidragsyteren. Bidragsyteren knytter redigeringsprogramhandlingene til et bestemt redigeringsprogram.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
Som du ser vises handlingene på arbeidsbenkmenyen og verktøylinjen når et readme-redigeringsprogram er aktivt.
Disse meny- og verktøylinjepunktene vises bare når redigeringsprogrammet er aktivt. Plasseringen av meny- og verktøylinjepunktene kan angis som beskrevet i Meny- og verktøylinjebaner.
Selve readme-redigeringsprogrammet, ReadmeEditor, er ikke særlig komplisert. Det utvider TextEditor-klassen slik at det kan bidra med en tilpasset innholdsdisposisjonsside i disposisjonsvisningen når en readme-fil redigeres. Det endrer ikke funksjonaliteten i tekstredigeringsprogrammet.
Innholdsdisposisjonene i redigeringsprogrammene er ofte like og viser innholdet i redigeringsprogrammet på en strukturert måte slik at det er enklere for brukeren å navigere gjennom innholdet i redigeringsprogrammet. Du finner mer informasjon i Innholdsdisposisjoner.
Vi skal se på implementeringen av tekstredigeringsprogrammer i Tekstredigeringsprogrammer og plattformtekst.