Felhasználói felület erőforrások

Az org.eclipse.jface.resource csomag megadja azokat az osztályokat, amelyek segítenek a bedolgozóknak az UI erőforrások kezelésében, mint például a betűkészletek és ikonok.

A munkaterület kiterjesztési pontok nagy része lehetővé teszi, hogy a bedolgozók ikonokat biztosítsanak, amelyek használhatók a kiegészítések munkaterületen megjelenítéséhez. Mivel a GUI operációs rendszer egyszerre korlátozott számú képet és betűkészletet támogat, a bedolgozó UI erőforrásait körültekintően kell kezelni és megosztani a felületi elemek között.

Már számos ikonhivatkozást láttunk a readme eszköz bedolgozóban. Ezen ikonok egy része a plugin.xml leírónyelvben van megadva.

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

Már olyan kódot is láttunk, amely a képeket működés közben írja le. Az alábbi a readme eszköz ReadmeEditorActionBarContributor eleméből származik.

public ReadmeEditorActionBarContributor() {
      	...
	action1 = new EditorAction(MessageUtil.getString("Editor_Action1"));
	action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1"));
	action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE);
	action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE);
	...

A JFace biztosítja az alap támogatásosztályokat, amelyek segítségével a bedolgozók kezelni tudják az ikonokat és betűkészleteket anélkül, hogy aggódniuk kellene a megfelelő platform grafikus objektumok létrehozásának és megsemmisítésének ideje miatt. Ezeket a támogatási osztályokat közvetlenül a bedolgozók használják a fent látható módon, vagy közvetve, amikor a munkaterület használja őket a kiterjesztési pont leírónyelvben leírt képek lekéréséhez.

Képleírók és a nyilvántartás

Az SWT Image osztály az operációs rendszer perspektívájából ábrázol egy képet. Mivel a legtöbb GUI operációs rendszerben korlátozva van az egyidejűleg megnyitható képek száma, a bedolgozóknak körültekintőnek kell lenniük a létrehozásukkor és használatuk befejezése utáni megfelelő eltávolításukról is gondoskodni kell. Ha a JFace ImageDescriptor és ImageRegistry osztályokat használ az SWT kép helyett, akkor a bedolgozók általában elkerülik ezen képek közvetlen létrehozását, kezelését és eltávolítását.

Képleíró

Az ImageDescriptor osztály használható a kép egyszerű leírásaként. Megadja a kép létrehozásához szükséges elemeket, mint például az URL vagy fájlnév, ahonnan a kép lekérhető. ImageDescriptors nem foglal le aktuális platformképet, hacsak a rendszer a createImage() metódus segítségével külön nem kéri.

A képleíró a legjobb módszer, ha a kód strukturálva van, mivel az összes ikon egy helyen adja meg és szükség szerint lefoglalja őket. A képleírók bármikor létrehozhatók az OS erőforrások figyelembe vétele nélkül, kényelmessé téve, hogy mind létrehozható az inicializálási kódban.

Képnyilvántartás

Az ImageRegistry osztály fenntart egy listát a megnevezett képekről. Az ügyfelek közvetlenül hozzáadhatnak képleírókat vagy SWT képeket a listához. Ha egy képet név szerint kér le a nyilvántartásból, akkor a nyilvántartás visszaadja a képet, amennyiben már létre van hozva, vagy létrehoz egyet a leíróból. Ennek segítségével a nyilvántartás ügyfelei képeket oszthatnak meg egymással.

A nyilvántartáshoz adott vagy az onnan lekért képeket az ügyfelek nem semmisíthetik meg. A nyilvántartás felelős a kép megsemmisítéséért, mivel a képeket több ügyfél osztja meg. A nyilvántartás megsemmisíti a képeket, ha a platform grafikus felhasználói felület rendszer leállításra kerül.

Bedolgozóminták a képek használatához

Kép megadása a plugin.xml fájlban

Ahol lehetséges, ott a plugin.xml fájlban adja meg a bedolgozó UI objektumainak ikonját. A munkaterület kiterjesztési pontok nagy része tartalmaz konfigurációs paramétereket egy ikonfájlhoz. Ha ikonokat ad meg a plugin.xml fájl kiterjesztési kiegészítésében, akkor a képkezelési stratégiát a platformra hagyja. Mivel az ikonok jellemzően a bedolgozó könyvtárában találhatók,ennek segítségével egy helyen adhatók meg ikonok és kezelhetők a fájlok.

A többi minta használatát csak akkor kell megfontolni, ha az ikon nem tudja a kiterjesztési kiegészítés részeként megadni.

Explicit létrehozás

A kép explicit létrehozása a legjobb stratégia, ha a képet ritkán használják és nincs megosztva. A kép létrehozható közvetlenül az SWT-ben, és használat után megsemmisíthető.

A képek az ImageDescriptor segítségével és a createImage() metódus meghívásával explicit módon is létrehozható. Ahogy az első esetben, ha már nincs rá szükség, akkor meg kell hívni a kép dispose() metódusát. Ha a párbeszédablak például létrehoz egy képet, miközben ez meg van nyitva, akkor bezáráskor a képet el kell távolítani.

Képnyilvántartás

Ha a képet a bedolgozó gyakran használja, és az UI-ban számos különböző objektum között meg van osztva, akkor egy ImageRegistry elemmel érdemes a képleírást regisztrálni. A nyilvántartásban lévő képek megosztásra kerülnek az objektumokkal, amelyek ugyanazzal a névvel kérdeznek le képet. A nyilvántartásban lévő képeket nem szabad eltávolítani, mivel ezek meg vannak osztva más objektumokkal.

A kép képnyilvántartáshoz adása a legjobb stratégia, ha a képet gyakran használják a bedolgozó élettartama során, és meg van osztva számos objektummal. A nyilvántartás használatának hátránya, hogy a nyilvántartásban lévő képek nem kerülnek eltávolításra, amíg a GUI rendszer le nem áll. Mivel a megnyitható platformképek (SWT) száma nem korlátozott, a bedolgozóknak körületintően kell eljárniuk, hogy ne regisztráljanak túl sok ikont a nyilvántartásban.

Az AbstractUIPlugin osztály protokollt biztosít bedolgozó szintű kép nyilvántartás létrehozásához.

Címkeszolgáltatók

Ha egy ikont gyakran használnak az elemek adott megjelenítőben megjelenítéséhez, akkor egy címszolgáltató segítségével ez megosztható a hasonló elemek között a megjelenítőben. Mivel a címkeszolgáltató felelős a kép a megjelenítő tetszőleges objektumához visszaadásért, vezérelheti a kép létrehozását és a képek megjelenítőben lévő objektumok közötti megosztását.

A címkeszolgáltató a korábban említett technikák bármelyikét használhatja kép létrehozásához. Ha a getImage() különböző megvalósításai között böngész a LabelProvider alosztályaiban, akkor különböző megközelítéseket is láthat, mint például ikonok ideiglenes tárolása az objektumokhoz, és a képek táblázatának fenntartás típus szerint.  A címkeszolgáltatóval létrehozott képeket el kell távolítani a szolgáltató dispose() metódusában, amely a megjelenítő eltávolításakor kerül meghívásra.

A címkeszolgáltató használata jó kompromisszum az explicit létrehozás és a képnyilvántartás között. Ez támogatja az ikonok megosztását, mint például a képnyilvántartás, és fenntartja a vezérlést az aktuális kép létrehozása és eltávolítása során.

Bedolgozó szintű képosztály

A bedolgozó finomhangolásakor ez közös az összes különböző képlétrehozási platformhoz. Hasznos lehet a döntéshozás elkülönítése a kép külön osztályban létrehozását illetőleg, és utasítani az ügyfeleket, hogy az osztályt használják az összes kép lekéréséhez. Így a létrehozási szekvencia beállítható, hogy tükrözze a bedolgozó aktuális teljesítményjellemzőit. 

ResourceManager

A ResourceManager osztályt az ImageDescriptorok képekre leképezésének fenntartására használják, így a képek újrafelhasználhatóak a leíróikon keresztül hivatkozva. Ha a nyilvántartásból a leírón keresztül kérés érkezik egy képre, a nyilvántartás visszaadja a képet, ha az már létezik vagy létrehozza a leíróból Ennek segítségével a nyilvántartás ügyfelei képeket oszthatnak meg egymással.

A felső szintű ResourceManager egy DeviceResourceManager amely egy képernyőn jön létre. A JFaceResources.getResources() által definiált ResourceManager egy DeviceResourceManager és felső szintű ResourceManagerként használható. Ha rövidebb életciklusú ResourceManagerre van szüksége, mint a DeviceResourceManager, létrehozhat egy LocalResourceManager leszármazottelemet és megsemmisítheti, ha befejezte vele a munkát.

Egy DeviceResourceManager megsemmisül, ha a létrehozására használt Display megsemmisül, így nem szükséges külön kezelőkód.

A kezelőhöz adott vagy az onnan lekért képeket az ügyfelek nem semmisíthetik meg. A kezelő felelős a kép megsemmisítéséért, mivel a képeket több ügyfél osztja meg. A nyilvántartás megsemmisíti a képeket, ha a hozzájuk tartozó ResourceManager megsemmisül.

Betűkészlet-nyilvántartás

A betűkészlet a másik korlátozott erőforrás a platform operációs rendszerben. A létrehozási és eltávolítási problémák betűkészletek és képek esetén megegyeznek, és hasonló sebesség/terület arányokat igényelnek. Általában a betűkészletek lefoglalásra kerülnek az SWT-ben a betűkészlet platformfüggő betűkészletnévvel lekérdezéséhez.

A FontRegistry osztály fenntart egy betűkészlet-táblázatot a neveikkel. Kezeli a betűkészlet lefoglalását és eltávolítását.

Általában a bedolgozóknak el kell kerülniük a betűkészletek lefoglalását vagy a betűkészletek leírását platform-specifikus nevekkel. A betűkészlet-nyilvántartást a JFace használja belsőleg, de ezt jellemzően nem használják a bedolgozók. A JFaceResources osztályt kell használni az általános betűkészletek eléréséhez.

Nagyon általános annak engedélyezése, hogy a felhasználók megadják beállításaikat az alkalmazás betűkészletéhez a beállításoldalon.  Ebben az esetben a FontFieldEditort kell használni a betűkészletnév felhasználótól lekéréséhez, és a FontRegistry használható a betűkészlet tárolásához.  A FontFieldEditor elemet csak a beállításoldalon használják.

JFaceResources

A JFaceResources osztály vezérli az általános platform-betűkészletek és képek elérését. Karbantartja a belső betűkészlet- és képnyilvántartást, így az ügyfelek megoszthatják a megnevezett betűkészleteket és képeket.

A munkaterület és más bedolgozók számos módszert használnak a képek megosztásához, ahol szükséges. A JFaceResources képnyilvántartást nem használják széles körben a munkaterületen és a bedolgozókódban.

A betűkészletek használata sokkal egyszerűbb. A munkaterület és a legtöbb bedolgozó a JFaceResources osztályt használja a betűkészletek lekéréséhez logikai név alapján. A metódusok, mint például a getDialogFont() és getDefaultFont() biztosítva vannak, így a bedolgozók használni tudják a várt betűkészleteket az UI-n.