MINI-MANUALE SU X LIBRARY E TOOLKIT

Questo manualetto documenta le funzioni usate negli esempi.

Inizializzazione

XtVaAppInitialize
Inizializza il collegamento col server e ritorna una finestra top-level, la finestra principale dell'applicazione.

Gli argomenti principali sono: un "application context" (variabile passata per riferimento, la si passa non inizializzata e XtVaAppInitialize la inizializza), il nome dell'applicazione, il numero e gli argomenti ricevuti da command-line. Piu' altri argomenti che non utilizziamo (li poniamo a NULL o 0).

Creazione di widget

XtVaCreateManagedWidget
Crea e aggiunge un widget all'interno di una finestra (che puo' essere la finestra top-level oppure la finestra di un altro widget "contenitore").

Gli argomenti sono: il nome del widget (etichetta che apparira' sul widget), la classe del widget (nome di una classe di widget tra quelle disponibili), il widget padre (all'interno del quale il widget che definiamo ora sara' aggiunto: puo' essere la finestra top-level oppure un widget "contenitore"), ed una lista di argomenti opzionali terminata da NULL (se c'e' solo NULL vuol dire che non ci sono argomenti).

Widget contenitori: al contrario di XForms (dove, vedremo, la posizione di un widget deve essere specificata all'atto della sua creazione), Xt permette di creare un widget senza specificare dove andra' collocato. Sono previsti invece widget contenitori che si occupano di posizionare i widget secondo politiche predefinite.

Classi di widget

Da passare come secondo argomento a XtVaCreateManagedWidget. Negli esempi vediamo:

Attributi dei widget

Ciascuna classe di widget ha particolari attributi. Attributi comuni a tutte le classi sono: etichetta, larghezza, altezza...

XtVaSetValues
Assegna uno o piu' attributi di un widget. Gli argomenti sono il widget ed una lista di coppie "nome di attributo", "valore per l'attributo", terminata con NULL.

XtVaGetValues
Legge uno o piu' attributi di un widget. Gli argomenti sono il widget ed una lista di coppie "nome di attributo", "variabile per contenete il valore per l'attributo" (passata per riferimento); la lista e' terminata con NULL.

Esempi di nomi di attributo:

Attenzione all'ordine in cui si cambiano gli attributi. Esempio:
Di default quando assegno l'etichetta il widget viene ridimensionato alle minime dimensioni sufficienti per contenere l'etichetta, annullando eventuali assegnamenti di dimensione fatti in precedenza. Per evitare questo devo prima assegnare l'etichetta e poi le dimensioni al widget.

Associazione di callback ai widget

XtAddCallback
Associa una callback a un widget, tale callback sara' chiamata automaticamente ogni volta che il widget verra' sollecitato da un evento a cui e' sensibile.

Gli argomenti sono: il widget, la costante XtNcallback, il nome della funzione di callback. Inoltre un numero (che non usiamo, e poniamo =0).

La funzione di callback deve essere funzione con valore di ritorno void e come argomenti: un widget (che sara' il widget che ha scatenato la callback) piu' due puntatori (che non usiamo).

Visualizzazione dell'interfaccia

XtRealizeWidget
Ciamata sulla finestra top-level dell'applicazione, disegna sullo schermo tale finestra e tutti i widget in essa contenuti.

Ciclo degli eventi

XtAppMainLoop
Chiamata sull'application context (la variabile passata per riferimento a XtVaAppInitialize all'atto dell'inizializzazione). Realizza il ciclo degli eventi.

Aspetta un evento, dopo di che chiama la callback associata al widget nel quale si e' verificato l'evento, poi aspetta un altro evento ecc.

Finestre di dialogo

Un'applicazione puo' avere una o piu' finestre a top level: una e' la finestra principale dell'applicazione (quella ritornata da XtVaAppInitialize), le altre sono finestre secondarie e in genere temporanee, come finestre di dialogo.
XtCreatePopupShell
Crea una finestra pop-up associata ad un'altra finestra w esistente.

La finestra pop-up e' anch'essa una finestra top-level, non e' figlia (secondo la gerarchia di annidamento) della finestra w alla quale e' associata, e non viene mostrata quando w viene visualizzata.
La finestra pop-up e' pero' legata a w da alcuni vincoli (per es. sparisce quando w viene iconificata).

Gli argomenti sono come per XtVaCreateManagedWidget ma il widget esistente che si specifica non e' il padre nella gerarchia, bensi' il w di cui sopra.

Visualizzazione di finetre pop-up

XtPopup, XtPopdown
Rispettivamente, visualizza e nasconde una finestra pop-up.

Disabilitazione di widget

Puo' capitare che vi siano, durante l'esecuzione di un'applicazione, stati in cui la funzione a cui un dato widget e' preposto non e' valida (= non e' lecito o sensato invocarla). Es: non posso stampare il file corrente se non ho caricato nessun file.
In tal caso si puo' disabilitare la cattura di eventi da parte di quel widget.
XtSetSensitive
Abilita/disabilita un widget a catturate gli eventi. Gli argomenti sono: il widget e la costante TRUE (per abilitare) o FALSE (per disabilitare).

File da includere

Bisogna includere gli header generali di X:
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
e l'header di ciascuna classe di widget adoperata, es:
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Box.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Xaw/Label.h>