Gruppo Editoriale - Amiga Magazine Online
Gruppo Editoriale - Amiga Magazine Online
Gruppo Editoriale - Amiga Magazine Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Didattica AMIGA MAGAZINE<br />
.o .e..........o.e...............e....e........o.....<br />
Rob Peck<br />
miga è un ottimo computer<br />
non solo per giocare, ma<br />
anche per la programmazio-<br />
ne, dotato com'è di opzioni vera-<br />
mente uniche per lo sviluppatore.<br />
Come esempio, vorrei mostrare una<br />
interessante routine per la gestione<br />
dei gadget che ho recentemente<br />
sviluppato. Si tratta della soluzione a<br />
un problema che potrebbe essere<br />
riassunto in una ipotetica domanda:<br />
"Ho un'applicazione che richiede<br />
una griglia rettangolare di oggetti,<br />
ognuno dei quali selezionabile indi-<br />
vidualmente. Il mio problema è che,<br />
volendo usare i gadget di Intuition,<br />
la definizione di un gadget per ogni<br />
oggetto aumenta eccessivamente il<br />
volume del codice. C'è un modo<br />
migliore per procedere? "<br />
Qualche volta capita di osservare<br />
un problema da troppo vicino. Sia-<br />
mo tutti tentati di utilizzare strumenti<br />
già presenti nel sistema operativo,<br />
anche se mancano di efficienza. Nel<br />
caso di una matrice regolare di<br />
gadget come quella descritta, c'è<br />
una alternativa: crearsi i propri<br />
gadget e gestirli.<br />
Il listato in C che segue mostra un<br />
esempio di programma che si inter-<br />
faccia con Intuition utilizzando un<br />
solo gadget per segnalare la sele-<br />
zione di un oggetto.<br />
Questo singolo gadget è invisibile e<br />
ne contiene altri, generati dal pro-<br />
gramma stesso.<br />
Ogni click del mouse all'interno del<br />
gadget di Intuition genera un mes-<br />
saggio che specifica come sia stato<br />
scelto uno specifico gadget (indica-<br />
to da un numero) o come l'operatore<br />
abbia cliccato uno dei nostri gad-<br />
get. Quando viene cliccato un gad-<br />
get, si può utilizzare il suo numero<br />
per decidere l'azione successiva,<br />
Dividi e impera<br />
proprio come fanno i molti program-<br />
mi che basano le proprie scelte su<br />
GadgetlD.<br />
Il programma listato in queste pagi-<br />
ne permette a un solo gadget di<br />
essere attivo in un determinato<br />
momento. Questa caratteristica si<br />
chiama mutua esclusione: ogni<br />
gadget attivato disattiva gli altri<br />
gadget del gruppo.<br />
Il programmatore potrà trovare un<br />
sistema per indicare i gadget attivi<br />
da quelli inattivi, o scegliere di la-<br />
sciare attivo più di un gadget alla<br />
volta, o preparare gadget booleani<br />
capaci di attivarsi e disattivarsi alter-<br />
nativamente a ogni click del mouse.<br />
Naturalmente, più sono le opzioni di<br />
Intuition che decidiamo di riprodur-<br />
re, più ci avviciniamo alla reinven-<br />
zione della ruota e alla riproduzione<br />
del codice registrato nelle ROM di<br />
<strong>Amiga</strong>.<br />
Aggiungo qualche dettaglio sul<br />
programma.<br />
Esso genera una matrice rettango-<br />
lare di gadget. Quelli in cui non<br />
appare testo sono deliberatamente<br />
ignorati, e non possono essere sele-<br />
zionati. Il programma risponde solo<br />
se il click viene effettuato dentro il<br />
gadget, e non (come in Intuition)<br />
anche sul suo contorno.<br />
La funzione Draw Gads dispone i<br />
gadget e li riempie di testo. Draw-<br />
Box traccia una linea intorno alla<br />
zona attiva. ShowCursor deselezio-<br />
na un vecchio gadget e ne comple-<br />
menta uno nuovo sul video, agendo<br />
anche sul testo.<br />
DumpXY capisce che gadget è<br />
stato selezionato e passa a Show-<br />
Cursor le coordinate dell'angolo<br />
superiore sinistro del gadget pre-<br />
scelto. Alla fine, HandleEvent comu-<br />
nica ciò che è accaduto e, se viene<br />
cliccato l'apposito gadget, chiude<br />
la finestra.<br />
Il programma è stato controllato con<br />
i compilatori Lattice C 5.0 e Manx C<br />
3.6a.<br />
Il suo nome è MultiGad, e può esse-<br />
re azionato da un doppio click nel<br />
Workbench o da un comando CLI.<br />
Viene aperta una finestra, in cui<br />
compaiono i gadget generati dal<br />
programma.<br />
Cliccando su un gadget, viene vi-<br />
sualizzato il suo numero.<br />
Per uscire dal programma, è neces-<br />
sario fare click sul box di chiusura<br />
della finestra. A<br />
O Compute! Publication, Inc. 1989.<br />
Tutti i diritti sono riservati.<br />
Articolo tradotto dal n.2 Summer<br />
1989 di Compute!'~ <strong>Amiga</strong> Resource.