30.12.2012 Views

Amiga Magazine Online

Amiga Magazine Online

Amiga Magazine Online

SHOW MORE
SHOW LESS

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-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!