Risorse dell'interfaccia utente

Il pacchetto org.eclipse.jface.resource definisce le classi che supportano i plug-in nella gestione di risorse dell'interfaccia utente quali i tipi di carattere e le icone.

Molti punti di estensione del workbench consentono ai plug-in di fornire icone che possono essere utilizzate per mostrare i rispettivi contributi nel workbench. Poiché i sistemi operativi GUI supportano un numero limitato di immagini o di tipi di carattere contemporaneamente presenti nella memoria, le risorse dell'interfaccia utente di un plug-in devono essere attentamente gestite e, a volte, condivise tra widget.

Alcuni riferimenti alle icone sono già stati illustrati nel plug-in dello strumento readme. Alcune di queste icone sono specificate nel codice di plugin.xml.

<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.gif"
	   category="org.eclipse.ui.examples.readmetool"
	   class="org.eclipse.ui.examples.readmetool.ReadmeSectionsView">
	</view>
</extension>

È stato anche illustrato un codice che descrive immagini in maniera immediata. Quanto riportato di seguito proviene dal ReadmeEditorActionBarContributor dello strumento readme.

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);
	...

JFace fornisce le classi di supporto di base che consentono ai plug-in di gestire le proprie icone e i propri tipi di carattere senza preoccuparsi di quando i corrispondenti oggetti grafici della piattaforma vengono creati ed eliminati. Queste classi di supporto vengono utilizzate direttamente dai plug-in, come illustrato in precedenza, oppure indirettamente quando il workbench utilizza tali classi per ottenere immagini descritte in tag di punti di estensione.

Descrittori di immagini e registro

La classe SWT Image rappresenta un'immagine dalla prospettiva del sistema operativo. Poiché la maggior parte dei sistemi operativi delle GUI ha un limite al numero di immagini che possono essere aperte contemporaneamente, i plug-in dovrebbero crearle con molta attenzione e assicurarsi anche di eliminarle correttamente una volta utilizzate. Utilizzando le classi JFace ImageDescriptor e ImageRegistry al posto dell'immagine SWT, i plug-in possono evitare di creare, gestire e disporre direttamente queste immagini.

Descrittore di immagine

La classe ImageDescriptor può essere utilizzata come descrizione rapida di un'immagine. Specifica tutto ciò che è necessario per creare un'immagine, ad esempio, l'URL o il nome file da cui poter ottenere l'immagine. ImageDescriptors non effettua l'allocazione di una effettiva immagine di piattaforma, se non specificamente richiesto mediante il metodo createImage().

I descrittori di immagini rappresentano la strategia migliore quando il proprio codice è strutturato in modo da definire tutte le icone in un'unica posizione e da allocarle in base alle necessità. I descrittori di immagini possono essere creati in qualsiasi momento senza coinvolgere risorse del sistema operativo, rendendo conveniente la creazione nel codice di inizializzazione.

Registro delle immagini

La classe ImageRegistry viene utilizzata per conservare un elenco di immagini denominate. I client possono aggiungere descrittori di immagini o immagini SWT direttamente nell'elenco. Quando un'immagine viene richiesta dal registro in base al nome, il registro restituirà l'immagine, se è stata creata, oppure ne creerà una mediante il descrittore. Ciò permette ai client del registro di condividere le immagini.

Le immagini aggiunte o richiamate dal registro non devono essere eliminate da nessun client. Il registro è responsabile dell'eliminazione delle immagini, dato che queste sono condivise da più client. Il registro disporrà l'eliminazione delle immagini quando il sistema della GUI della piattaforma viene chiuso.

Modelli di plug-in per l'utilizzo di immagini

Specifica dell'immagine in plugin.xml

Dove possibile, specificare l'icona per gli oggetti di interfaccia utente del proprio plug-in nel file plugin.xml. Molti dei punti di estensione del workbench includono parametri di configurazione per un file di icone. Definendo le proprie icone nel contributo dell'estensione in plugin.xml, la piattaforma viene esentata dalla strategia di gestione delle immagini. Poiché le icone vengono generalmente conservate nella directory del plug-in, l'utente può specificare le icone e gestire i file in un'unica ubicazione.

Gli altri modelli dovrebbero essere presi in considerazione solo quando non è possibile specificare l'icona come parte del proprio contributo all'estensione.

Creazione esplicita

La creazione esplicita di un'immagine rappresenta la migliore strategia quando l'immagine non viene utilizzata frequentemente e non è condivisa. L'immagine può essere creata direttamente in SWT ed essere eliminata dopo l'utilizzo.

Le immagini possono anche essere create esplicitamente utilizzando un ImageDescriptor e richiamando il metodo createImage(). Come nel primo caso, il metodo dispose() per l'immagine deve essere richiamato quando l'immagine non è più necessaria.  Ad esempio, se una finestra di dialogo crea un'immagine al momento dell'apertura, l'immagine viene chiusa quando viene chiusa la finestra di dialogo.

Registro delle immagini

Quando un'immagine è utilizzata frequentemente in un plug-in ed è condivisa su più oggetti diversi nell'interfaccia utente, è utile registrare il descrittore di immagine mediante un ImageRegistry. Le immagini contenute nel registro verranno condivise con qualsiasi oggetto che richiede un'immagine dello stesso nome. Non eliminare alcuna immagine del registro fino a quando queste sono condivise da altri oggetti.

L'aggiunta di un'immagine al registro delle immagini è consigliabile quando l'immagine viene utilizzata frequentemente, o se dura per l'intera durata del plug-in, ed è condivisa da più oggetti. Lo svantaggio consiste nel fatto che le immagini presenti nel registro non vengono eliminate fino a quando il sistema della GUI non viene chiuso. Poiché esiste un limite alle immagini di piattaforma (SWT) che possono essere aperte contemporaneamente, i plug-in devono fare attenzione a non registrare troppe icone in un registro.

La classe AbstractUIPlugin include il protocollo per la creazione di un registro di immagini estese del plug-in.

Fornitori di etichette

Quando un'icona viene utilizzata frequentemente per visualizzare voci di un particolare visualizzatore, può essere condivisa tra le voci simili mediante un fornitore di etichette. Poiché un fornitore di etichette è responsabile della restituzione di un'immagine per ogni oggetto del visualizzatore, è in grado di controllare la creazione dell'immagine e di condividerla tra gli oggetti presenti nel visualizzatore.

Per produrre un'immagine, il fornitore di etichette può utilizzare una qualsiasi delle tecniche illustrate in precedenza. Se si esaminano le varie implementazioni di getImage() nelle sottoclassi di LabelProvider, si vedrà una serie di approcci, tra cui la memorizzazione nella cache di una singola icona per oggetti e la conservazione di una tabella di immagini per tipo.  Le immagini create da un fornitore di etichette devono essere eliminate mediante il metodo dispose() del fornitore richiamato quando il visualizzatore viene chiuso.

L'utilizzo di un fornitore di etichette rappresenta un ottimo compromesso tra la creazione esplicita e il registro delle immagini. In effetti, promuove la condivisione di icone come avviene con il registro delle immagini e conserva il controllo sulla creazione e sull'eliminazione dell'immagine.

Classe delle immagini estese del plug-in

Durante la regolazione di un plug-in, è normale provare tutti questi diversi modelli di creazione di immagini. Può essere utile isolare la decisione presa per la creazione di un'immagine in una classe separata e istruire tutti i client a utilizzare la classe per ottenere tutte le immagini. In questo modo, la sequenza della creazione può essere regolata per riflettere le caratteristiche delle prestazioni del plug-in. 

Registro dei tipi di carattere

I tipi di carattere rappresentano un'altra risorsa limitata nei sistemi operativi della piattaforma. I problemi di creazione ed eliminazione sono uguali per i tipi di carattere come per le immagini, e richiedono un uguale trattamento in termini di velocità e spazio. In generale, i tipi di carattere vengono allocati in SWT attraverso la richiesta di un tipo di carattere con un nome dipendente dalla piattaforma.

La classe FontRegistry conserva una tabella di tipi di carattere ordinati in base al nome. Tale classe gestisce l'assegnazione e l'eliminazione del tipo di carattere.

In generale, i plug-in dovrebbero evitare l'allocazione di qualsiasi tipo di carattere o la descrizione di tipi di carattere con nomi specifici di piattaforma. Sebbene il registro dei tipi di carattere sia utilizzato internamente in JFace, non viene generalmente utilizzato dai plug-in. La classe JFaceResources dovrebbe essere utilizzata per accedere ai tipi di carattere comuni.

Comunemente gli utenti possono specificare le proprie preferenze per i tipi di carattere dell'applicazione in una pagina delle preferenze.  In questi casi, dovrebbe essere utilizzato FontFieldEditor per ottenere dall'utente il nome del tipo di carattere e potrebbe essere utilizzato FontRegistry per conservare il tipo di carattere.  FontFieldEditor viene utilizzato solo nelle pagine delle preferenze.

JFaceResources

La classe JFaceResources controlla l'accesso ai tipi di carattere e alle immagini della piattaforma comune. Conserva un tipo di carattere interno e un registro delle immagini in modo che i client possano condividere immagini e tipi di caratteri denominati.

Esistono molte tecniche utilizzate nel workbench e in altri plug-in per condividere le immagini dove è necessario. Il registro di immagini JFaceResources non è ampiamente utilizzato nel codice di plug-in e nel workbench.

L'utilizzo dei tipi di carattere è molto più semplice. Il workbench e la maggior parte dei plug-in utilizzano la classe JFaceResources per richiedere tipi di carattere in base a un nome logico. Metodi come getDialogFont() e getDefaultFont() vengono forniti in modo che i plug-in possano utilizzare i tipi di carattere previsti nelle rispettive interfacce utente.

Copyright IBM Corporation e altri 2000, 2003.