Vediamo se ci ho capito qualcosa...
Una classe mui riconosce come sua area dati la struttura "data" (chiamiamola così genericamente) e riconosce come suoi metodi tutti quelli che o tramite il dispatcher o tramite la creazione di id personalizzati vengono legati ad essa.
Detto questo...
mettiamo che io abbia un mio bell'oggetto tavolozza (che altri non è che un derivato della classe area) all'interno dell'oggetto app(*)
Devo dichiarare la mia area dati e ci metto tutte le bravi variabiline, poi dichiaro le mie funzioncine e le lego alla classe.
Ora arriviamo al busillis:
SAVEDS ULONG mCleanup(struct IClass *cl,Object *obj,Msg msg, APTR param_app)
{
FreeMem(ievent,sizeof(struct InputEvent));
FreeMem(buffer,bufsize);
CloseDevice((struct IORequest *)&ioreq);
MUI_DisposeObject(param_app);
MUI_DeleteCustomClass(mcc);
return(DoSuperMethodA(cl,obj,msg));
}
ovviamente è lo speculare di setup etc etc.
Ho lavorato su class1.c dell'sdk di mui38 e tutto è contenuto in un unico file per cui tutto funziona.
Voglio salvare il mio oggetto in un file esterno .c .h.
Dalla guida di shinkuro (e da quelle di stuntz) leggo che un buon metodo mui esaurisce i suoi parametri esclusivamente in cl, obj e msg.
Ovviamente il metodo cleanup così come è scritto è errato: il metodo non può chiamare MUI_DisposeObject relativo all'oggetto applicazione che è di suo un oggetto esterno (fisicamente e logicamente).
Prima considerazione: il dispatcher è relativo all'oggetto custom o all'applicazione? Cioè il dispatcher dell'oggetto deve andare nei file .c del mio bravo oggetto?
Ha senso creare un metodo dispatcher per l'oggetto applicazione?
Premesso che cleanup e dispose dell'oggetto custom vengono chiamati in auto tramite il dispathcer alla chiusura di app, chi viene invocato per prima nel momento in cui chiudo app? Mui gestisce da solo questa catena, senza che mi si chiuda app senza chiudere l'oggetto (ad esempio cliccando sul pulsante di chiusura dell'applicazione)?
A questo punto altra domanda: la relazione che c'è tra app e oggetto contenuto nell'app è solo di ordine "grafico" o nel momento in cui vado a crearmi il mio bravo "script" mui si crea anche una relazione di ordine gerarchico per cui c'è effettivamente una relazione tra oggetto contenitore e oggetto contenuto, e quindi si preoccupa lui di chiudere tutto (chiaramente definendo il distruttore del mio oggetto custom)?