Originariamente pubblicato in data 31/05/1999
A
C
C
O
M
A
Z
Z
I
Dialogo di un computer!
Le finestre di dialogo e il Mac OS: una introduzione per non programmatori al funzionamento interno di Macintosh.
Questa puntata sarà dedicata in buona parte al Dialog manager, quel componente del toolbox che gestisce le finestre di dialogo e di avviso (un occhiata alla figura 1 dovrebbe chiarire i termini).Ogni applicazione su Macintosh dispone di un ingente quantitativo di codice che fa funzionare coerentemente i menu, le finestre, gli accessori di scrivania, eccetera eccetera. Questo codice, conosciuto in gergo come "Main event loop", ovvero "Ciclo principale degli eventi", inizia chiamando GetNextEvent (ricordate? Ne abbiamo parlato nella seconda puntata. E' la chiamata di Event manager che informa l'applicazione se l'utente ha compiuto qualche azione). A seconda del risultato di GetNextEvent, l'applicazione reagisce: per esempio, se è stato premuto un tasto, ne informa il Menu manager, in modo che questo possa venire trattato come sinonimo di una voce in un menu se del caso, e se Menu manager risponde asserendo che questo non è il caso, passa il tasto a TextEdit, il tool che permette di inserire brani di testo.
Tutto questo codice raggiunge dimensioni ragguardevoli, dato che deve coordinare tra di loro il Window manager - perchè gli eventi possono riguardare la manipolazione di finestre - il Menu manager, il Control manager, il Dialog manager, TextEdit, Desk manager - per gli accessori di scrivania - e Scrap manager - per il taglia e incolla.
Introduzione al Dialog Manager
Passiamo a Dialog manager. Si tratta di un tool di alto livello (cioé particolarmente sofisticato e potente) che viene utilizzato per creare i cosiddetti dialoghi, ovvero quelle speciali finestre utilizzate dal computer per chiedere istruzioni all'utente. Un tipico esempio di dialogo è quello che appare scegliendo Imposta la pagina e Stampa (in inglese Page setup e Print) in quasi tutte le applicazioni.I dialoghi del Dialog manager sono di tre tipi: dialoghi modali (modal dialogs), dialoghi non modali (modeless dialogs) e di avviso (alert dialogs). I dialoghi modali sono quelli di gran lunga più diffusi: si riconoscono dalla tipica cornice doppia. Appaiono al di sopra di tutte le finestre, non possono venire spostati, e non permettono all'utente di fare null'altro se non manipolare il dialogo: i menu e le altre finestre vengono congelati, e se si cerca di usarli non rispondono.
Quello che però caratterizza davvero i dialoghi è la presenza al loro interno dei controlli, quegli oggetti che possono venire manipolati con il mouse (figura).
Dialog manager fa dunque uso di una serie di tool del Toolbox, e li utilizza esso stesso: il Window manager per creare le finestre, il Control manager per i controlli, e TextEdit - di cui parleremo in una prossima puntata - per gli spazi contenenti del testo editabile; l'esistenza del Dialog manager rende rarissimo il caso in cui il programmatore abbia bisogno di usare direttamente il Control manager: ecco perchè non ci siamo dilungati su quest'ultimo tool nella scorsa puntata.

I dialoghi non modali
I dialoghi non modali, infatti, sono all'apparenza delle finestre come le altre (possono venire spostate e messe in secondo piano) ma si distinguono proprio perchè contengono dei controlli. Un tipico esempio di dialoghi di questo tipo sono le finestre "Cerca" di Write o di Word.I dialoghi di avviso sono un tipo speciale di dialoghi modali: contengono in genere soltanto un testo, che informa l'utente, e uno o due bottoni. Spesso, come accade nel dialogo della figura 1, sono accompagnati da una icona: le tre icone standard per i dialoghi di avviso sono l'icona Nota che... (note), raffigurante un omino che parla, l'icona Attento (caution) raffigurante un segnale stradale di pericolo, come quella di figura 1, e l'icona Stop raffigurante una mano aperta nel gesto usato per bloccare qualcuno. Ovviamente, è possibile utilizzare icone create ad hoc.
Dal punto di vista delle caratteristiche operative, un dialogo di avviso è caratterizzato dal fatto che una azione su un oggetto qualunque che esso contiene lo fa sparire (indicando che il messaggio è stato recepito).

I dialoghi e il programmatore
Creare una finestra di dialogo per il programmatore è particolarmente semplice. Si tratta di definire le dimensioni del dialogo e di stabilire quali controlli debba contenere: la definizione completa di un dialogo è conosciuta con il nome di dialog template (nome pressocché intraducibile4); su Macintosh un dialog template viene definito nelle risorse dell'applicazione. Un dialogo è costituito da una risorsa di tipo DLOG5, con le dimensioni e il nome del dialogo, e una risorsa DITL che specifica i controlli contenuti. Potete andare a sbirciare tutti i dialoghi definiti entro una applicazione usando il solito ResEdit, aprendo le risorse DLOG: provate, per esempio, con il Finder.Dialog manager è dunque composto da una serie di procedure che permettono di creare e manipolare le finestre di dialogo, e che sono vagamente simili alle loro parenti di Window manager, dato che sono fondate su quelle. Si aggiungono un piccolo numero di routine di varia utilità, come SetDAFont che permette di scegliere un font particolare per l'uso nei dialoghi, e le quattro procedure DlgCut, DlgCopy, DlgPaste, DlgDelete che vengono utilizzate per supportare le operazioni standard di taglia, copia e incolla entro i dialoghi: ovviamente queste routine collegano Dialog manager allo Scrap manager.
I dialoghi parametrici
Se andate a frugare in un numero sufficientemente alto di dialoghi (sempre ammesso che possediate un Macintosh con ResEdit), prima o poi vi imbatterete in un dialogo di avviso che contiene un testo vagamente criptico, tipicamente della forma "Impossibile salvare il documento ^0, dato che il disco è protetto contro la scrittura."Ci troviamo di fronte ad un dialogo parametrizzato: il messaggio che il dialogo comunica va completato con uno o più valori che mutano, come il nome del documento su cui stiamo lavorando nel nostro esempio. Un altro caso possibile è quello del tipico dialogo "Inserisci il disco taldeitali" dove il computer deve specificare il nome del disco che gli è necessario.
Per affrontare questa casistica di problemi, Dialog manager permette di inserire entro il testo che dovrà apparire nei dialoghi dei simboli speciali, che saranno poi sostituiti al momento opportuno con valori adeguati. I parametri vengono digitati nella forma apice-numero. Il primo parametro viene indicato con ^0, il secondo con ^1 e così via.
L'applicazione può comunicare al Dialog manager il valore da sostituire al parametro usando la chiamata ParamText: vediamo con un esempio come questa venga utilizzata. Ad una applicazione viene richiesto di aprire il documento chiamato Memo che si trova sul disco Testi, ma il dischetto è stato danneggiato ed il documento è illeggibile. L'applicazione, che ha a disposizione un dialogo di avviso che asserisce "Il documento ^0 del disco ^1 è danneggiato", esegue le seguenti chiamate del Dialog manager:
ParamText ('Memo', 'Testi', '', '');
BottoneOK := StopAlert (IlMioDialogo, nil);
L'utente vedrà apparire sullo schermo un avviso che asserisce "Il documento Memo del disco Testi è danneggiato", e potrà suicidarsi con suo comodo, rassicurato dall'eleganza con cui il suo computer gli ha comunicato il misfatto.