org.eclipse.ui.views

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 ReadmeModelFactoryMarkElement 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.