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