Dekoratører

Din plugin kan bruge dekoratører til at markere billederne for ressourcer og andre objekter, der vises i oversigterne på arbejdsbænken. Dekoratører er nyttige, når din plugin tilføjer funktionalitet til eksisterende ressourcetyper. Mange af standardoversigterne på arbejdsbænken deltager i visning af dekorationer.   

PDE bidrager f.eks. med dekoratører, der giver dig mulighed for at skelne mellem binære projekter og kildeprojekter.

Package Explorer-oversigt med PDE-dekoratører

Projektet com.example.helloworld  er det eneste kildeprojekt, der er vises i navigatoren. Bemærk, at de andre binære projekter viser den binære dekoratør i det øverste venstre hjørne af ikonen for Java-projektet. Dekoratøren leveres af PDE med udvidelsespunktet 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>

En dekoratørimplementering kan leveres på mange forskellige måder. Denne kode bruger den letteste måde, som er kendt som en erklærende letvægtsdekoratør. Når en erklærende letvægtsdekoratør er defineret, indeholder koden en komplet beskrivelse af dekoratørens ikon, placering og aktiveringsbetingelser. Erklærende dekoratører er nyttige, hvis der kun bruges en ikon til at dekorere etiketten. Plugin'en behøver kun at angive den kvadrant, hvor dekoratøren skal lægges over den almindelige ikon, samt ikonen for overlejringen. Som det ses på billedet, overlejres pakkeikonen af den binære PDE-ikon i den øverste venstre kvadrant.

Hvis din plugin har brug for både at styre etiketteksten og ikonen, eller hvis typen af ikonen bestemmes dynamisk, kan du bruge en ikke-erklærende letvægtsdekoratør. I dette tilfælde skal der defineres en implementeringsklasse, som implementerer ILightweightLabelDecorator.  Den udpegede klasse er ansvarlig for at levere et præfiks, et suffiks og et overlejringsbillede ved runtime, som bruges til etiketten. Mekanismerne til at sammenkæde præfiks og suffiks med etikettekst og udføre overlejringen styres af arbejdsbænkskoden i en programdel i baggrunden. Det arbejde, der udføres af din plugin i dens implementering af ILightweightLabelDecorator skal derfor være sikker for programdelen fra brugergrænsefladen. Der er flere oplysninger i Udfør kode fra en programdel, som ikke tilhører brugergrænsefladen.

 Følgende kode viser, hvor CVS-klienten definerer sin dekoratør med denne teknik:

<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 ultimativt af brugeren via indstillingssiden Etiketdekorationer på arbejdsbænken. De enkelte dekoratører kan aktiveres og deaktiveres. Det er dog en god idé at designe dine dekoratører, så de ikke overlapper eller strider imod eksisterende platformsdekoratører i SDK'et. Hvis der er flere plugins, som bidrager med letvægtsdekoratører til samme kvadrant, afklares konflikterne på en ikke-deterministisk måde.   

Din plugin kan også styre billeder og etiketter selv.   I det tilfælde skal letvægtsattributten angives til false, og klasseattributten skal angive en klasse, der implementerer ILabelDecorator.  Klassen giver dig mulighed for at dekorere den originale etikets billede og tekst med dine egne annotationer.   Det giver dig øget fleksibilitet, fordi du ikke er begrænset til præfikser, suffikser og simple kvadrantoverlejringer.

Andre attributter for en dekoratør er uafhængige af en bestemt implementeringstype. Attributterne label og description angiver den tekst, der bruges til at navngivne og beskrive dekoratøren i dialogboksen Indstillinger. objectClass angiver klassen af objekter, som dekoratøren skal anvendes til. Attributten enablement giver dig mulighed for at beskrive betingelserne for dekorationen af objektet.  Flaget adaptable angiver, om objekter, der tilpasser sig IResource, også skal dekoreres. Flaget state styrer, om dekoratøren som standard er synlig.

Hvis dekoratørerne omfatter oplysninger, der er dyre at beregne eller muligvis kan være distraherende, kan du overveje at bidrage med dine egne indstillinger, som giver brugeren mulighed for yderligere finjustering af dekoratøren, når den er aktiveret. Denne teknik bruges af CVS-klienten.

Indstillingssiden CVS-etiketdekoratører

 

Opdateringscyklus for dekoratør

Dekoration initieres ved at opfriske etiketudbydere, som bruger DecoratorManager til at stille dekoration til rådighed. Når dekorationsbehandlingen er afsluttet i baggrunden, vil der være et tidsrum mellem anmodningen om etiketten og starten af labelProviderChanged-aktiviteten, som bruges til at beregne dekorationen. I dette tidsrum beregnes dekorationen af et objekt kun én gang af hensyn til effektiviteten. Hvis dekoratøren ændres i løbet af tidsrummet, er det muligt, at et gammelt resultat rundsendes, fordi det andet samt efterfølgende kald til dekoration af et element bliver ignoreret.

Bidragydere til dekoratører bør undgå at ændre deres dekoratører, mens dekorationen foregår. Hvis det ikke er muligt, kræves der et andet kald til dekoration af et element, efter at labelProviderChanged er behandlet.