Näkymä on työympäristön osa, joka voi siirtyä tietohierarkiassa ja objektin näyttöominaisuuksissa. Vain yksi tietyn näkymän ilmentymä on avoinna työympäristön sivulla. Kun käyttäjä tekee valintoja tai muita muutoksia näkymässä, muutokset vaikuttavat heti työympäristöön. Monesti näkymiä lisätään tukemaan tiettyä muokkausohjelmaa. Esimerkiksi hahmotelmanäkymässä on rakenteinen esitys muokkausohjelman tiedoista. Ominaisuusnäkymä näyttää parhaillaan muokattavan objektin ominaisuudet.
Lisäosat voivat lisätä näkymiä työympäristöön org.eclipse.ui.views-laajennuspisteen avulla. Näkymän lisäävien lisäosien on rekisteröitävä näkymä plugin.xml-tiedostossaan ja toimitettava näkymän kokoonpanotiedot, kuten sen toteutusluokka, sen sisältävä näkymien luokka (tai ryhmä) sekä nimi ja kuvake, joita käytetään valikoiden ja nimiöiden näkymän kuvauksessa.
Näkymien rajapinta määritetään IViewPart-rajapinnassa, mutta lisäosat voivat valinnaisesti laajentaa ViewPart-luokan sen sijaan, että ne toteuttaisivat IViewPart-rajapinnan tyhjästä.
Hello world -esimerkissä toteutettiin vähimmäisnäkymälaajennus. Seuraavaksi tarkastellaan laajennusta, joka on tietoinen muista työympäristön näkymistä ja reagoi käyttäjän siirtymisiin ja valintojen muutoksiin työympäristössä. Aluksi tarkastellaan laajennuksen esittelyä tiedostossa plugin.xml.
<extension point="org.eclipse.ui.views"> <category id="org.eclipse.ui.examples.readmetool" name="%Views.category"> </category> <view id="org.eclipse.ui.examples.readmetool.views.SectionsView" name="%Views.ReadmeSections" icon="icons/view16/sections.png" category="org.eclipse.ui.examples.readmetool" class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView"> </view> </extension>
Tämän pitäisi näyttää melko tutulta. Esimerkistä näkyy, että työympäristöön lisätään uusi näkymä ReadmeSectionsView. Näkymän tunnus (view id), nimi (name) ja luokka (category) määritetään samalla tavalla kuin aiemminkin. Lisäksi näkymälle asetetaan kuvake (icon) käyttämällä polkua suhteessa lisäosan asennushakemistoon.
Seuraavaksi tarkastellaan ReadmeSectionsView-luokkaa. Voit
tuoda minkä tahansa työympäristön näkymän näyttöön valitsemalla
vaihtoehdot
Ikkuna > Näytä näkymä > Muu... ja valitsemalla
näkymän Näytä näkymä -luettelosta.
Kun ReadmeSectionsView tuodaan näyttöön, esiin ponnahtaa näkymä, jossa on luettelo. Luettelo on tyhjä, kunnes napsautetaan tiedostoa, jonka tunniste on .readme. Luetteloon lisätään readme-tiedoston osat.
Miten lisäosa tunnistaa readme-tiedoston, ja miten se tietää valinnan muutoksista? Kun näiden kysymysten vastaukset selvitetään, ymmärretään jo hyvin, miten sisään rakennettuja työympäristön lisäosia luodaan.
Aluksi tarkastellaan tuttua createPartControl-metodia. Kuten Hello World -esimerkissä näkyi, tähän luodaan näkymää kuvaavat widget-objektit. Osa koodista ohitetaan, jotta päästään aloittamaan nopeasti.
public void createPartControl(Composite parent) { viewer = new ListViewer(parent); ... // lisää minut yeiseksi valinnan kuuntelutoiminnoksi getSite().getPage().addSelectionListener(this); // valmistele valinta selectionChanged(null, getSite().getPage().getSelection()); }
Näkymä luo ja tallentaa ListViewer-luokan ja rekisteröi itsensä valinnan kuuntelutoiminnoksi sen sivulle. Se poimii sivun IViewSite-rajapinnasta, joka sisältää tietoja näkymän kontekstista, kuten sen työympäristön ikkunan, sen sisältävän sivun ja sen lisäosan. Mitä tapahtuu, kun tulee ilmoitus valinnan muutoksesta? Seuraava koodi ajetaan:
public void selectionChanged(IWorkbenchPart part, ISelection sel) { //jos valinta on readme-tiedosto, hae sen osat. AdaptableList input = ReadmeModelFactory.getInstance().getSections(sel); viewer.setInput(input); }
Näyttää siltä, että ReadmeModelFactory-luokka vastaa valinnan muuttamisesta readme-osiksi, ja nämä osat syötetään katseluohjelmaan, joka luotiin createPartControl-metodissa.
Entä miten katseluohjelma täyttää luettelon widget-toimintonsa? Tässä vaiheessa voidaan olettaa, että kun katseluohjelmalle oli ilmoitettu sen syöte-elementti, se tiesi, miten sen luettelon widget-objekti täytetään tiedoilla - onhan se ListViewer-katseluohjelma. Jos haluat tietää heti tämän katseluohjelman syvimmän olemuksen, siirry ohjeaiheeseen Katseluohjelmat.
Edelleenkään ei ole selvinnyt, miten readme-tiedostot tunnistetaan tai mistä tiedoston osien tiedot tulevat. Lyhyt katsaus ReadmeModelFactory-luokkaan valottaa tätä.
public AdaptableList getSections(ISelection sel) { // jos valinta ei ole rakenteinen valinta, palaa. if (!(sel instanceof IStructuredSelection)) return null; IStructuredSelection structured = (IStructuredSelection)sel; //jos valinta on readme-tiedosto, hae sen osat. Object object = structured.getFirstElement(); if (object instanceof IFile) { IFile file = (IFile) object; String extension = file.getFileExtension(); if (extension != null && extension.equals(IReadmeConstants.EXTENSION)) { return getSections(file); } } //valittu objekti ei ole readme-tiedosto return null; }
Valinnasta tarkistetaan, onko se rakenteinen (moni-)valinta. (Rakenteisen valinnan käsite tulee JFace-katseluohjelmista.) Valinnan ensimmäisen objektin osalta tarkistetaan, onko se tiedostoresurssi (IFile). Jos se on, sen tunnisteesta tarkistetaan, vastaako se tunnistetta ".readme". Kun tiedetään, että se on readme-tiedosto, osien jäsennykseen voidaan käyttää muita metodeja. Lisätietoja tiedostojen jäsennyksestä saa ohjeaiheista ReadmeModelFactory, MarkElement ja DefaultSectionsParser.
Tätä laajennusta tutkimalla on selvitetty monia yleisiä työympäristön käsitteitä. Seuraavaksi siirrytään käsittelemään joitakin muita työympäristön laajennuksia ja tutkitaan, miten lisäosa voi tehdä muita lisäyksiä työympäristön käyttöliittymään.