16.06.2013 Views

2 - Amiga Magazine Online

2 - Amiga Magazine Online

2 - Amiga Magazine Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

* i metodi OM-NOTIFY e OM-UPDATE, definiti dalla root- rametri di OM-NOTIFY. I1 pacchetto di parametri di<br />

class; OM-NOTIFY e di OM-UPDATE è simile a quello di<br />

* le classi di interconnessione (la icclass e la sua sottoclasse<br />

modelclass);<br />

OM-SET:<br />

struct opUpdate<br />

* gli attributi ICA-TARGET e ICA-MAP, definiti dalla "ic- {<br />

C~~SS"<br />

e dalla gadgetclass. ULONG MethodID; /* OM-NOTIFY o OM-UPDATE */<br />

struct TagItem *opuAttrList;<br />

11 metodo OM-NOTIFY trasmette una TagList di attributi /* lista dei nuovi attributi */<br />

all'oggetto target specificato dall'attributo ICA-TARGET. Gli struct GadgetInfo *opu-G~nfo;<br />

oggetti chiamano questo metodo su se stessi quando il va- /* contesto del gadget */<br />

lore di alcuni attributi con applicabilità "N" (Notify) viene ULONG opu-~lags; /* flags */<br />

alterato. In genere le sottoclassi della gadgetclass non im- };<br />

plementano direttamente il metodo OM-NOTIFY, perciò il<br />

messaggio viene passato alla superclasse finché non rag- 11 campo aggiuntivo opu-Flags contiene il flag OPUF-IN-<br />

giunge un dispatcher che lo riconosce e invia all'oggetto TERIM, che viene impostato quando il messaggio contiene<br />

target un messaggio OM-UPDATE contenente gli stessi pa- un aggiornamento "intermedio" degli attributi ed è azzerato<br />

ULONG MYCLASS-OMSet (Class *cl, Object *obj, struct opSet *msg)<br />

(<br />

struct MyClassData *myclassdata;<br />

struct TagItem*ti, *tstate;<br />

BOOL do-supermethod;<br />

do-supermethod = FALSE;<br />

myclassdata = (struct PIPData *) INST-DATA (cl, obj);<br />

tstate = msg->opupttr~ist;<br />

while (ti = NextTagItem (&tstate))<br />

switch (ti->ti-Tag)<br />

{<br />

}<br />

case MYCLASSAttributol:<br />

. . .<br />

myclassdata->~ttributol = ti->ti-~ata;<br />

. . .<br />

break;<br />

case MYCLASSAttributo2:<br />

. . .<br />

myclassdata->Attributo2 = ti->ti-Data;<br />

...<br />

break;<br />

default:<br />

/* La TagList contiene degli attributi non gestiti */<br />

do-supermethod = TRUE;<br />

/* Invia il messaggio OM-SET alla superclasse,<br />

* solamente se necessario.<br />

* /<br />

if (do-supermethod)<br />

return DoSuperMethodA (cl, (Object *)g, (Msg) rnsg);<br />

return 0;<br />

1<br />

Listato 2.<br />

-<br />

-<br />

per gli aggiornamenti finali. Per esempio,<br />

uno slider invia molti messaggi intermedi<br />

mentre l'utente sta spostando l'indicatore,<br />

e un messaggio finale quando l'utente rila-<br />

scia il gadget. Alcuni oggetti target posso-<br />

no essere interessati soltanto agii aggiorna-<br />

menti finali e non a quelli intermedi.<br />

Dal momento che OM-UPDATE e<br />

OM-SET sono molto simili, in genere le<br />

classi utilizzano la stessa routine per gesti-<br />

re entrambi questi metodi. Quando un og-<br />

getto riceve un messaggio OM-UPDATE,<br />

non deve far altro che esaminare la TagLi-<br />

st e impostare i propri attributi di conse-<br />

guenza, esattamente come nel caso di<br />

OM-SET. Certe volte può capitare che il<br />

cambiamento di un attributo ricevuto con<br />

OM-UPDATE scateni l'invio di una secon-<br />

da notifica da parte dell'oggetto. in questo<br />

Caso, l'oggetto deve copiare il contenuto<br />

del campo flags del messaggio OM-UP-<br />

DATE nel campo flags del messaggio<br />

OM-NOTIFY. In caso contrario, tra due<br />

oggetti potrebbero verificarsi dei ping-<br />

pong di notifiche che porterebbero inevi-<br />

tabilmente a un blocco totale del sistema.<br />

Per evitare che ciò accada, la icclass im-<br />

plementa un sistema in grado di ricono-<br />

scere i loop e fermarli, utilizzando dei flag<br />

non documentati nel campo opu-Flags di<br />

opupdate.<br />

Dal momento che classi diverse utilizzano<br />

attributi diversi, quando si collegano due<br />

oggetti è spesso necessario operare una<br />

traduzione negli ID degli attributi.<br />

ICA-MAP permette di specificare una Ta-<br />

gList in cui ogni TagItem è una coppia di<br />

valori che associa un attributo del primo

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

Saved successfully!

Ooh no, something went wrong!