Koristelutoiminnot

Lisäosa voi lisätä koristelutoimintojen avulla huomautuksia työympäristön näkymissä olevien resurssien ja muiden objektien kuviin.  Koristelutoiminnot ovat hyödyllisiä, kun lisäosa lisää toimintoja olemassa oleviin resurssien lajeihin.  Monet tavalliset työympäristön näkymät osallistuvat koristelujen näyttöön.  

Esimerkiksi PDE toimittaa koristelutoiminnot, joiden avulla voi tehdä eron binaaristen ja lähdekielisten projektien välille.

Pakettien selausnäkymä PDE-koristelutoimintojen kanssa

Projekti com.example.helloworld  on ainoa lähdekielinen navigaattorissa näkyvä projekti.  Huomaa, kuinka kaikissa muissa binaarisissa projekteissa on binaarinen koristelu Java-projektin kuvakkeen vasemmassa yläreunassa.  PDE toimittaa tämän koristelutoiminnon org.eclipse.ui.decorators-laajennuspisteen avulla.

<extension
         point="org.eclipse.ui.decorators">
      <decorator
            lightweight="true"
            quadrant="TOP_LEFT"
            adaptable="true"
            label="%decorator.label"
            icon="icons/full/ovr16/binary_co.png"
            state="false"
            id="org.eclipse.pde.ui.binaryProjectDecorator">
         <description>
            %decorator.desc
         </description>
         <enablement>
            ...
         </enablement>
      </decorator>
</extension>

Koristelutoiminnon toteutukseen on monia erilaisia tapoja.  Tämä merkintä käyttää yksinkertaisinta tapaa, joka tunnetaan esittelevänä kevyenä koristelutoimintona.  Kun esittelevä kevyt koristelutoiminto on määritetty, merkinnät sisältävät täydellisen kuvauksen koristelutoiminnon kuvakkeesta, paikasta ja käyttöönoton ehdoista.  Esittelevät koristelutoiminnot ovat hyödyllisiä, kun nimiön koristeluun käytetään vain kuvaketta.  Lisäosan tarvitsee vain määrittää neljännes, jossa koristelutoiminto tulee kirjoittaa tavallisen kuvakkeen päälle, ja peitteen kuvake.  Kuten kuvasta näkyy, PDE-binaarikuvake on kirjoitettu paketin kuvakkeen vasemman yläneljänneksen päälle.

Jos lisäosan tarvitsee käsitellä kuvakkeen lisäksi nimiön tekstiä tai jos kuvakkeen laji määritetään dynaamisesti, voit käyttää ei-esittelevää kevyttä koristelutoimintoa.  Tässä tapauksessa toteutusluokka, joka toteuttaa ILightweightLabelDecorator-rajapinnan, on määritettävä.  Määritetty luokka vastaa nimiöön lisättävän etuliitteen, loppuliitteen ja peitekuvan toimituksesta ajon aikana.  Työympäristön koodi käsittelee etu- ja loppuliitteen liitostuksen nimiön tekstiin ja peitteen lisäyksen taustasäikeessä.  Niinpä lisäosan ILightweightLabelDecorator-toteutuksessaan tekemän työn on oltava käyttöliittymäsäieturvallista.  (Lisätietoja on ohjeaiheessa Koodin suoritus muusta kuin käyttöliittymän säikeestä.)

  Seuraavat merkinnät osoittavat, miten CVS-työasema määrittelee koristelutoimintonsa tällä tekniikalla:

<extension
         point="org.eclipse.ui.decorators">
      <decorator
            objectClass="org.eclipse.core.resources.IResource"
            adaptable="true"
            label="%DecoratorStandard.name"
            state="false"
            lightweight="true"
            quadrant = "BOTTOM_RIGHT"
            class="org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator"
            id="org.eclipse.team.cvs.ui.decorator">
         <description>
            %DecoratorStandard.desc
         </description>
      </decorator>
</extension>

Käyttäjä ohjaa koristelutoimintoja työympäristön Nimiön koristelut -oletusasetussivulta.  Yksittäisiä koristelutoimintoja voi ottaa käyttöön tai poistaa käytöstä.  Silti on hyvä suunnitella koristelutoiminnot niin, etteivät ne limity tai ole ristiriidassa olemassa olevien käyttöympäristön SDK-koristelutoimintojen kanssa. Jos monta lisäosaa lisää kevyitä koristelutoimintoja samaan neljännekseen, ristiriidat ratkaistaan ei-määräytyvästi.  

Lisäosa voi hoitaa itse kaiken kuvien ja nimiöiden hallinnan.  Tällöin määritteeksi lightweight tulee asettaa false, ja määritteen class tulee nimetä luokka, joka toteuttaa ILabelDecorator-rajapinnan.  Tämän luokan avulla voit koristella alkuperäisen nimiön kuvan ja tekstin omilla huomautuksillasi.  Sen avulla saat enemmän joustavuutta käyttöösi, koska et ole rajoittunut etu- ja loppuliitteisiin tai yksinkertaisiin neljänneksen peitteisiin.

Koristelutoiminnon muut määritteet ovat riippumattomia tietystä toteutustyylistä.  Määritteet label ja description osoittavat tekstin, jota käytetään koristelutoiminnon nimeämiseen ja kuvaukseen oletusasetusten valintaikkunassa.  objectClass nimeää objektien luokan, johon koristelutoimintoa tulee käyttää.  Määritteen enablement avulla voit kuvata ehdot, joiden mukaan objekti tulee koristella.   Määrite adaptable osoittaa, tuleeko myös IResource-rajapintaan sopeutuvat objektit koristella.  Määrite state ohjaa, onko koristelutoiminto oletusarvon mukaan näkyvä.

Jos koristelutoiminnoissa on tietoja, joiden laskenta on hankalaa tai jotka voivat olla häiritseviä, haluat ehkä lisätä omat oletusasetuksesi, joiden avulla käyttäjä voi hienosäätää koristelutoimintoa lisää, kun se on käytössä.  CVS-työasema käyttää tätä tekniikkaa.

CVS-koristelutoimintojen oletusasetussivu

 

Koristelutoiminnon päivitysjakso

Koristelutoiminnon aloittaa DecoratorManager-rajapintaa koristeluun käyttävien nimiön toimittajien verestys. Koska koristelun käsittely tapahtuu taustalla, nimiön pyynnön ja labelProviderChanged-tapahtuman alun välissä on aika, jonka koristelun laskenta kestää. Tänä aikana objektin koristelu lasketaan vain kerran tehokkuussyistä. Jos koristelutoiminto muuttuu tänä aikana, on mahdollista, että vanhentunut tulos esitetään, sillä elementin toinen ja sitä seuraavat koristelupyynnöt ohitetaan.

Koristelutoimintojen toimittajien tulisi välttää koristelutoimintojensa muuttamista koristelun aikana. Jos tämä ei ole mahdollista, on tarpeen tehdä toinen elementin koristelukutsu sen jälkeen, kun labelProviderChanged on käsitelty.