Díszítmények

A bedolgozó a díszítmények segítségével feljegyezheti a képeket az erőforrásokhoz és egyéb objektumokhoz, amelyek megjelennek a munkaterület-nézeteken. A díszítmények hasznosak, amikor a bedolgozók funkciókat adnak a meglévő erőforrástípusokhoz.  A szabványos munkaterület-nézetek nagy része részt vesz a díszítmények megjelenítésében.  

A PDE például olyan díszítményeket ad közre, amelyek segítségével megkülönböztethetők a bináris és forrásprojektek.

Csomagböngésző nézet PDE díszítményekkel

A com.example.helloworld  projekt a navigátorban megjelenő egyetlen forrásprojekt. Figyelje meg, hogy a többi bináris projekt hogyan jeleníti meg a bináris díszítményt a Java projekt ikon bal felső részén. Ezt a díszítményt a PDE adja közre az org.eclipse.ui.decorators kiterjesztési pont segítségével.

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

Számos különböző mód áll rendelkezésre a díszítménymegvalósítás biztosítására.  Ez a leírónyelv a legegyszerűbb módszert használja, amely egyszerű deklarációs díszítményként ismer. Ha egy egyszerű deklarációs díszítmény van megadva, akkor a leírónyelv a díszítmény ikonjának, engedélyezésének és a feltételek engedélyezésének teljes leírását tartalmazza. A deklarációs díszítmények akkor hasznosak, ha csak egy ikon díszíti a címkét. A bedolgozónak csak a kvadránst kell megadni, ahol a díszítménynek átlapoltnak kell lennie a szabályos ikonon és az átlapolás ikonon.  Ahogy a képen láthattuk, a PDE bináris ikon átfedésben van a csomag bal felső kvadránsában.

Ha a bedolgozónak az ikon mellett kezelnie kell a címkeszöveget, vagy ha az ikon típusa dinamikusan kerül meghatározásra, akkor egy nem deklarációs egyszerű díszítményt használhat.  Ebben az esetben az ILightweightLabelDecorator elemet megvalósító class megvalósítási osztályt kell megadni. A kijelölt osztály felelős futás közben az előtag, utótag és az átlapolás kép megadásáért, amely a címkén alkalmazásra került. Az előtag és utótag címkeszöveggel konkatenálásának eljárásait és az átlapolás végrehajtását a munkaterület kód kezeli a háttérszálban. A bedolgozó által az ILightweightLabelDecorator megvalósításban végrehajtott munkának UI szál biztonságosnak kell lennie.   (További információkat a Kód végrehajtása nem UI szálból rész tartalmaz.)

 Az alábbi leírónyelv megjeleníti, hogy a CVS ügyfél hogyan adja meg a díszítményeket ezen eljárás segítségével:

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

A díszítményeket végül a felhasználó vezérli a munkaterület Címkedíszítmények beállításlapján keresztül.  Az egyéni díszítmények be- és kikapcsolhatók.  Ennek ellenére a díszítmények megtervezése hasznos, mert így nem kerülnek átfedésbe vagy ütközésbe a meglévő platform SDK díszítményekkel. Ha több bedolgozó ad közre egyszerű díszítményeket ugyanahhoz a kvadránshoz, akkor az összeütközések nem determinisztikus módon kerülnek feloldásra.  

A kép- és címkekezelést maga a bedolgozó végzi. Ebben az esetben az lightweight attribútumot hamis értékre kell állítani és az classattribútumnak meg kell neveznie egy osztályt, amely megvalósítja az ILabelDecorator elemet.  Ezen osztály lehetővé teszi az eredeti címke képének és szövegének saját feljegyzésekkel díszítését.  Ez megnövelt rugalmasságot biztosít, mivel nincs korlátozva előtagokra, utótagokra és egyszerű kvadráns átfedésekre.

A díszítmény attribútumai egy adott megvalósítási stílustól függetlenek.   A label és description attribútum kijelöli a szöveget, amely a beállítások párbeszédablakban megnevezi és leírja a díszítményt.  Az objectClass megnevezi az objektumok osztályát, amelyhez a díszítményt hozzá kell rendelni. Az enablement attribútum segítségével leírhatók a helyzetek, amelyekben az objektumot fel kell diszíteni.  Az adaptable jelző jelzi, hogy az IResource elemhez adaptálódó objektumokat díszíteni kell-e. A state jelző szabályozza, hogy a díszítmény alapértelmezés szerint látható-e.

Ha a díszítmények olyan információkat tárolnak, amelyek feldolgozása drága vagy esetleg zavaró, akkor szükség lehet saját beállítások közreadására, amelyek segítségével a felhasználó finomhangolhatja a díszítményt, ha már be van kapcsolva. Ezt az eljárást a CVS ügyfél használja.

CVS díszítmények beállítási oldal

 

Díszítményfrissítési ciklus

A díszítés a DecoratorManagert díszítés biztosítására használó címkeszállítók frissítésével kezdeményezhető. Ahogy a díszítési folyamat befejeződik, a háttérben lesz egy időszak aközött, amikor a címkére van szükség és a díszítésszámítás által fogadott labelProviderChanged esemény megtörténik. Ezalatt az idő alatt egy objektum díszítése hatékonysági okok miatt csak egyszer kerül kiszámításra. Ha a díszítmény megváltozik ezalatt az idő alatt, akkor lehetséges, hogy elévült eredmény kerül elküldésre, amellyel egy elem díszítésére vonatkozó második és soron következő hívások figyelmen kívül maradnak.

A díszítményközreadóknak el kell kerülniük a díszítések módosítását, amíg a díszítés történik. Ha ez nem lehetséges, akkor egy elem díszítésére vonatkozó második hívásra lesz szükség miután a labelProviderChanged esemény feldolgozásra került.