Dekoratører

Plugin-modulen kan bruke dekoratører til å annotere bildene for ressurser og andre objekter som vises i arbeidsbenkvisningene. Dekoratører er nyttige når plugin-modulen legger til funksjonalitet i eksisterende ressurstyper. En rekke standard arbeidsbenkvisninger deltar i å vise dekorasjoner.  

For eksempel bidrar PDE med dekoratører som lar deg skille mellom binære prosjekter og kildeprosjekter.

Pakkeutforskervisning med PDE-dekoratører

Prosjektet com.example.helloworld  er det eneste kildeprosjektet som vises i navigatoren.  Merk at alle andre binære prosjekter viser den binære dekoratøren øverst til venstre i Java-prosjektikonet. PDE bidrar med denne dekoratøren ved hjelp av utvidelsespunktet org.eclipse.ui.decorators.

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

Det finnes flere måter å oppgi en implementering av dekoratør på.  Denne kodetypen bruker den enkleste metoden, kjent som en deklarativ, enkel dekoratør.  Når en deklarativ enkel dekoratør defineres, inneholder kodetypen en komplett beskrivelse av dekoratørens ikon, plassering og aktiveringsvilkår. Slike dekoratører er nyttige når etiketten bare dekoreres med et ikon. Plugin-modulen trenger bare oppgi kvadranten der dekoratøren skal legges over et vanlig ikon og ikonet for overleggingen.  Som det går frem av bildet, legges det binære PDE-ikonet over i den øverste venstre kvadranten i pakkeikonet.

Hvis plugin-modulen skal manipulere etiketteksten i tillegg til ikonet, eller hvis ikontypen fastsettes dynamisk, kan du bruke en ikke-deklarerende enkel dekoratør. I så fall må det defineres en implementeringsklasse som implementerer ILightweightLabelDecorator.  Den angitte klassen skal oppgi et prefiks, suffiks og overleggsbilde ved kjøretid som brukes på etiketten. Mekanismen som slår sammen prefikset og suffikset med etiketteksten og utfører overleggingen, håndteres av arbeidsbenkkoden i en bakgrunnstråd.  Derfor må alt arbeid som utføres av plugin-modulen i ILightweightLabelDecorator-implementeringen være sikker for brukergrensesnittråder. (Du finner mer informasjon under Utføre kode fra en tråd uten brukergrensesnitt.)

 Følgende kodetype viser hvordan CVS-klienten definerer dekoratøren ved hjelp av denne teknikken:

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

Dekoratører styres av brukeren via arbeidsbenkens preferanseside Etikettdekorasjoner. Enkeltdekoratører kan aktiveres og deaktiveres. Til tross for dette er det lurt å utforme dekoratørene slik at de ikke overlapper eller kommer i konflikt med eksisterende dekoratører i plattform-SDK. Hvis flere plugin-moduler oppgir enkle dekoratører til samme kvadrant, løses konfliktene på en ikke-deterministisk måte.  

Plugin-modulen kan også selv stå for all styring av bilder og etiketter. I så fall skal lightweight-attributtet settes til "false" og class-attributtet skal navngi en klasse som implementerer ILabelDecorator.  Med denne klassen kan du dekorere den opprinnelige etikettens bilde og tekst med dine egne annotasjoner.   Du får økt fleksibilitet siden du ikke er begrenset til prefikser, suffikser og enkle kvadrantoverlegginger.

Andre dekoratørattributter er uavhengige av det bestemte implementeringsformatet.  Attributtene label og description angir teksten som brukes for å navngi og beskrive dekoratøren i preferansedialogboksen. objectClass navngir klassen med objekter som dekoratøren skal brukes på. Attributtet enablement lar deg beskrive betingelsen for dekorasjon av objektet.  Flagget adaptable angir om objekter som er tilpasset IResource også skal dekoreres. Flagget state håndterer om dekoratøren som standard er synlig.

Hvis dekoratørene inneholder informasjon som er kostbar å behandle eller potensielt distraherende, må du kanskje bidra med egne preferanser som lar brukeren finjustere dekoratøren ytterligere når den er på. Denne teknikken brukes av CVS-klienten.

Preferanseside for CVS-dekoratører

 

Oppdateringssyklus for dekoratør

Dekorasjon startes av oppdateringsetikettleverandører som oppgir dekorasjon med DecoratorManager. Ettersom dekorasjonsbehandlingen utføres i bakgrunnen, er det en periode mellom en forespørsel etter etikett og aktivering av labelProviderChanged-hendelsen som brukes av dekorasjonsberegningen. I denne perioden beregnes dekorasjon av et objekt bare en gang på grunn av hensyn til effektivitet. Hvis dekoratøren endres i denne perioden, kan det hende at et gammelt resultat gjøres kjent ettersom det andre og påfølgende kall om å dekorere et element, vil bli ignorert.

Dekoratørbidragsytere bør ikke endre dekorasjonene mens det pågår dekorering. Hvis dette ikke er mulig, må det sendes et nytt kall for å dekorere et element etter at labelProviderChanged er behandlet.