You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
gadget, comprendono altre classi quali immagini e punta-<br />
tori) è però il supporto alle notifzche. Con questo meto-<br />
do, un gadget può autonomamente inviare informazioni<br />
ad altri gadget, senza che l'applicazione venga coinvolta,<br />
semplificandone (anche di molto) il ciclo di gestione de-<br />
gli eventi. Un esempio renderà meglio l'idea di quanto<br />
questa caratteristica sia utile: si immagini di avere neces-<br />
sità, in una propria GUI, di un'area di inserimento testo<br />
con possibilità di scorrimento verticale, non dissimile da<br />
quella impiegata nella finestra "Informazioni" del Work-<br />
bench. Usando i gadget BOOPSI, sarà sufficiente porre<br />
uno accanto all'altro un gadget di classe "textfield" e uno<br />
di classe "propgclass" (i gadget proporzionali di sistema);<br />
quindi basterà istruire lo scroller proporzionale a inviare i<br />
propri messaggi relativi alla posizione, dopo un'opportu-<br />
na traduzione, al gadget textfield, che così seguirà, docil-<br />
mente e senza alcun intervento da parte dell'applicazio-<br />
ne, le operazioni che l'utente eseguirà sullo scroller. Si<br />
veda a questo proposito l'articolo "Usiamo i Datatypes,<br />
parte seconda" sul numero 62 di <strong>Amiga</strong> <strong>Magazine</strong> per un<br />
esempio più dettagliato, ricordando che anche i Datatype<br />
sono oggetti BOOPSI ...<br />
Per quanto le notifiche degli oggetti BOOPSI siano prefe-<br />
ribili alla gestione diretta di elementi della GUI da parte<br />
dell'applicativo, esse soffrono però di una grave limita-<br />
zione, consistente nell'impossibilità di indicare destinatari<br />
diversi per messaggi diversi. È anche impossibile indicare<br />
delle condizioni per l'invio di messaggi: gli oggetti BOO-<br />
PSI accettano un solo interlocutore, sia esso un altro og-<br />
getto o l'applicazione, e a esso inviano sempre tutti i<br />
messaggi generati. Vedremo nella prossima puntata alcu-<br />
ni sistemi che non presentano questo problema.<br />
I concorrenti di Gadtools<br />
Nel corso degli ultimi anni sono apparsi diversi toolkit<br />
analoghi a Gadtools negli scopi e nei risultati. Fra questi<br />
possiamo citare la gadget.iibrary, che rende disponibile<br />
un framework di tipo Gadtools anche agli utenti dell'A-<br />
migaOS 1.3, aggiungendo al contempo alcune utili carat-<br />
teristiche quali le abbreviazioni da tastiera ("shortcuts", in<br />
genere rese graficamente tramite la sottolineatura di una<br />
lettera nell'etichetta del gadget) e la possibilità di specifi-<br />
care un hook da chiamare quando un gadget viene atti-<br />
vato, nonché la Intuisup.iibrary, che ai gadget di Gad-<br />
tools aggiunge anche un certo supporto alla localizzazio-<br />
ne e alcune funzioni di utilità. Si tratta comunque di vec-<br />
chie realizzazioni, che non hanno più grande ragione di<br />
esistere ora che 1'<strong>Amiga</strong>OS 1.3 non è più supportato da<br />
nessuno, tanto che i rispettivi autori ne hanno interrotto<br />
lo sviluppo.<br />
Diverso è invece l'approccio seguito da un certo numero<br />
di altre librerie, che si sono prefisse di "arricchire" Gad-<br />
tools di funzionalità, in primo luogo il supporto al ridi-<br />
mensionamento delle finestre e a font arbitrari.<br />
Fra queste, GadLayout è quella che pone meno proble-<br />
mi all'utente, trattandosi di una link libraly per il linguag-<br />
gio C (che quindi va a far parte dell'eseguibile dell'appli-<br />
cazione) piuttosto che di una libreria condivisa; lo scotto<br />
da pagare è un aumento di circa 8 kb nella dimensione<br />
della propria applicazione. In cambio di questi 8 kb,<br />
GadLayout offre la possibilità di definire posizione e di-<br />
mensione dei propri gadget relativamente al font in uso,<br />
a testi localizzati e ad altri gadget, piuttosto che in termi-<br />
ni assoluti. Anche la Gad0utline.iibrary offre il suppor-<br />
to a font arbitrari, ma in più si basa su un modello "logi-<br />
co" della GUI, detto outline. Ciò porta due vantaggi: in<br />
primo luogo, non occorre indicare coordinate e dimen-<br />
sioni di nessun tipo (né assolute, né relative), ma soltan-<br />
to i rapporti "geometrici" fra i vari componenti della GUI;<br />
in secondo luogo, poiché l'outline viene tenuto costante-<br />
mente aggiornato dalla libreria, è possibile chiudere e<br />
riaprire una finestra o, addirittura, uscire dall'applicazione<br />
e rientrarvi, senza nessuna perdita di contesto: alla ria-<br />
pertura della finestra, basterà sottoporre alla libreria l'ou-<br />
tline precedentemente salvato per ritrovarsi nell'identico<br />
stato in cui si era in precedenza.<br />
GadOutline fa un uso pesante dei cosiddetti Hook (della<br />
utility.library), cioè di routine dell'applicazione che ven-<br />
gono chiamate dalla libreria. Per esempio, la creazione o<br />
il ridisegno di molti gadget vengono ottenuti semplice-<br />
mente invocando l'hook corrispondente (che, per i gad-<br />
get standard, fa parte della libreria) con opportuni para-<br />
metri; il programmatore può poi costruire propri gadget<br />
fornendo un hook per la loro gestione. I lettori più atten-<br />
ti avranno notato che questo è lo stesso concetto dei<br />
BOOPSI e, in effetti, questi hook si comportano in ma-<br />
niera del tutto analoga ai dispatcher BOOPSI: non ci sen-<br />
tiamo di consigliare un grosso investimento di tempo nel-<br />
la realizzazione di oggetti complessi con questo sistema,<br />
dato che la loro realizzazione come oggetti BOOPSI sa-<br />
rebbe ben più proficua e di più universale applicabilità.<br />
Questa scelta porta anche a una certa pesantezza della<br />
documentazione, che non si può definire esemplare; in<br />
generale l'interfaccia per il programmatore (in genere<br />
detta più brevemente "API") di questa libreria è molto più<br />
complessa di quella di Gadtools, e il lettore farà bene a<br />
non aspettarsi una semplificazione del proprio codice.<br />
Molto più semplice è la filosofia di GUIFront, una libreria<br />
che semplifica l'accesso ai normali gadget Gadtools. GUI-<br />
Front persegue il suo scopo di agevolare la programma-<br />
zione attraverso quattro vie: in primo luogo, anch'essa<br />
adotta una descrizione logica della GUI, che tiene conto<br />
in maniera automatica del font in uso (ma non permette<br />
il ridimensionamento), eliminando così la necessità di<br />
eseguire calcoli di coordinate; in secondo luogo, si fa<br />
completo carico della gestione degli shortcut, che non<br />
giungono mai all'applicazione. A livello di API, invece,<br />
GUIFront segue con molta fedeltà il modello di Gadtools<br />
(per molte funzioni, basta cambiare il prefisso del nome<br />
da G T a GFJ, così che il programmatore non è costret-