Muokkausohjelma on työympäristön osa, jonka avulla käyttäjä voi muokata objektia (yleensä tiedostoa). Muokkausohjelmat toimivat samanlaisella tavalla kuin tiedostojärjestelmän muokkaustyökalut lukuun ottamatta sitä, että ne on rakennettu kiinteästi sisään työympäristön käyttöjärjestelmään. Muokkausohjelma liittyy aina syöteobjektiin (IEditorInput). Syöteobjektia voi ajatella muokattavana asiakirjana tai tiedostona. Muokkausohjelmassa tehtyjä muutoksia ei vahvisteta, ennen kuin käyttäjä tallentaa ne.
Vain yksi muokkausohjelma voi olla avoinna tietylle muokkausohjelman syötteelle työympäristön sivulla. Jos käyttäjä esimerkiksi muokkaa readme.txt-tiedostoa työympäristössä, sen avaaminen uudelleen samassa perspektiivissä aktivoi saman muokkausohjelman. (Voit avata saman tiedoston toisessa muokkausohjelmassa toisesta työympäristön ikkunasta tai perspektiivistä). Toisin kuin näkymissä, sama muokkausohjelman laji, esimerkiksi tekstinmuokkausohjelma, voi olla avoinna useaan kertaan yhdellä työympäristön sivulla eri syötteille.
Lisäosat lisäävät muokkausohjelmia työympäristöön sen org.eclipse.ui.editors-laajennuspisteen avulla. Muokkausohjelman lisäävien lisäosien on rekisteröitävä muokkausohjelmalaajennus plugin.xml-tiedostossaan yhdessä muokkausohjelman kokoonpanotietojen kanssa. Osamuokkausohjelman tiedoista, esimerkiksi toteuttava luokka ja työympäristön valikoissa ja nimiöissä käytettävä nimi ja kuvake ovat samanlaisia kuin näkymätiedoissa. Lisäksi muokkausohjelman laajennukset määrittävät muokkausohjelman ymmärtämien tiedostolajien tiedoston tunnisteet tai tiedoston nimen mallit. Muokkausohjelmat voivat määrittää myös contributorClass-luokan, joka lisää toimintoja työympäristön valikoihin ja työkaluriveihin, kun muokkausohjelma on aktiivinen.
Muokkausohjelmien rajapinta on kuvattu IEditorPart-rajapinnassa, mutta lisäosat voivat valinnaisesti laajentaa EditorPart-luokan sen sijaan, että ne toteuttaisivat IEditorPart-rajapinnan tyhjästä.
Huomautus: Muokkausohjelman laajennuksen voi määrittää myös aloittamaan ulkoisen ohjelman tai kutsumaan aiemmin luotua java-koodia. Tässä yhteydessä keskitytään muokkausohjelmiin, jotka ovat kiinteästi työympäristön sisään rakennettuja ja jotka toteutetaan IEditorPart-rajapinnalla.
Readme-työkalu toimittaa mukautetun muokkausohjelman, jonka tarkoituksena on ensisijaisesti lisätä sen oma sisällön jäsentelytoimintosivu työympäristön hahmotelmanäkymään.
Muokkausohjelman laajennuksen kokoonpano on seuraava:
<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>
Merkintärakenne on tuttu; siinä ovat tunnus (id), nimi (name), kuvake (icon) ja luokka (class). Määrite extensions kuvaa tiedoston lajit, joita muokkausohjelma osaa tulkita. (Voit määrittää myös tiedostojen nimiä, jos haluat lisää tarkkuutta.) class toteuttaa muokkausohjelman ja contributorClass toimittaa muokkausohjelmaan liittyvät toiminnot. Seuraavassa tarkastellaan toimittajaa yksityiskohtaisemmin.
Toimittajaluokka lisää muokkausohjelmaan liittyvät toiminnot työympäristön valikkoon ja työkaluriviin. Sen on toteutettava IEditorActionBarContributor-rajapinta. Toimittaja on erillään itse muokkausohjelmasta, sillä jokaisella työympäristön sivulla voi olla useita saman lajin muokkausohjelmia. Kaikki tietyn lajin muokkausohjelmat jakavat yhden toimittajan sen sijaan, että jokainen muokkausohjelman ilmentymä loisi toimintoja ja kuvia.
ReadmeEditorActionBarContributor toimittaa kolme toimintoa, "Editor Action1," "Editor Action2," ja "Editor Action3." Nämä on määritetty konstruktorissa.
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); ... }
Toimintojen nimet ja kuvakkeet on määritetty koodissa eikä tiedostossaplugin.xml. (Tässä ei nyt käsitellä toimintoluokkien eroja, ennen kuin tarkastellaan uudelleen kohdennettavia toimintoja.)
Huomaa, kuinka samanlaisia toiminnon tiedot ovat näkymätoiminnon merkintöjen yhteydessä kuvattujen viewActions-tietojen kanssa. Toiminnot on määritetty koodissa, sillä toimintojen yhteiskäyttö saman muokkausohjelman eri ilmentymissä on hallittava. Kun toiminnot luodaan konstruktorissa, ne ovat riippumattomia kaikista yksittäisistä muokkausohjelman ilmentymistä.
Kun muokkausohjelma aktivoituu ja siinä on toimintoja, jotka on asennettava työympäristön valikoihin ja työkaluriviin, sanoma setActiveEditor lähetetään toimittajalle. Toimittaja liittää muokkausohjelman toiminnot tiettyyn muokkausohjelmaan.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
Kuten näkyy, toiminnot näkyvät työympäristön valikossa ja työkalurivissä, kun readme-muokkausohjelma on aktiivinen.
Nämä valikko- ja työkaluriviobjektit näkyvät vain, kun muokkausohjelma on aktiivinen. Valikon ja työkalurivin objektien paikan voi määrittää ohjeaiheessa Valikko- ja työkalurivipolut kuvatulla tavalla.
Readme-muokkausohjelma ReadmeEditor ei ole kovin monimutkainen. Se laajentaa TextEditor-luokan niin, että se voi lisätä mukautetun sisällön jäsentelytoiminnon sivun hahmotelmanäkymään, kun readme-tiedostoa muokataan. Se ei muuta tekstinmuokkausohjelman sisäistä toimintaa.
Muokkausohjelmilla on usein omat sisällön jäsentelytoiminnot, jotka tarjoavat rakenteisen näkymän muokkausohjelman sisällöstä ja auttavat käyttäjää muokkausohjelman sisällön läpi siirtymisessä. Lisätietoja on ohjeaiheessa Sisällön jäsentelytoiminnot.
Tekstinmuokkausohjelmien toteutusta tarkastellaan ohjeaiheessa Tekstinmuokkausohjelmat ja ympäristön teksti.