Laboratorio di Interfacce Grafiche
Esercizio 0 (X Toolkit)
Nota: i file si compilano con:
gcc -o nome_eseguibile nome_sorgente.c -I/usr/X11R6/include
-I/usr/X11R6/include/X11 -L/usr/X11R6/lib -lX11 -lXt -lXaw
Il punto A contiene esercizi facili, il punto B e' piu' difficile.
Ovviamente non e' necessario fare tutto...
Usare come base di partenza i sorgenti degli esempi visti a lezione:
basicxt.c,
nextxt.c.
Punto A
-
Realizzare un bottone di exit che, se cliccato, chiama una finestra
di dialogo con le alternative
yes/no per conferma, e si comporta come ragionevole.
-
Realizzare un bottone che ogni volta che viene cliccato cambia la
sua etichetta (per es. mostrando il numero di volte in cui
e' stato cliccato finora).
-
Come sopra, ma contando alla rovescia da un numero fissato,
e quando arriva a zero il programma termina.
Punto B
Provare a realizzare un semplice programma "calcolatrice" che gestisce numeri
naturali con l'operazione di addizione.
L'interfaccia consistera' in una finestra top-level con (almeno):
- 10 tasti per le 10 cifre numeriche, realizzati come widget "command
button"
- un tasto per l'operazione, realizzato come widget "command button"
- un tasto "uguale" per invocare l'esecuzione dell'operazione,
realizzato come widget "command button"
- un display per visualizzare gli operandi e il risultato,
realizzato come widget "label"
Non preoccuparsi di disporre esteticamente questi elementi nella finestra
dell'interfaccia, lasciare pure che siano gestiti da un widget "box".
Le variabili interne del programma saranno (almeno):
- il numero num da mostrare sul display
- due operandi n1, n2 (numeri interi)
- una variabile che indica la fase corrente (vedere sotto)
L'interazione tipica avviene cosi':
-
All'inizio non abbiamo nessun operando, chiamo questa la FASE 1.
-
L'utente introduce un numero cifra per cifra, l'interfaccia
mostra nel display il numero man mano che si forma (chiamo FASE 2 questa
fase).
-
Poi l'utente introduce un operatore, il display rimane inalterato,
il numero correntemente mostrato sul display diventa il primo operando
n1.
Adesso abbiamo il primo operando ma non il secondo, chiamo FASE 3 questa
fase.
-
Poi l'utente introduce un altro numero cifra per cifra, l'interfaccia
mostra nel display il numero man mano che si forma (chiamo FASE 4 questa
fase).
-
A questo punto l'utente seleziona il tasto "uguale"
(selezionare un operatore genera errore),
il numero correntemente mostrato sul display diventa il secondo operando
n2, viene effettuata l'operazione (n1+n2),
il risultato viene mostrato sul display.
-
Si ritorna al passo 1.
Le callback associate ai vari dispositivi dovranno quindi agire
come segue:
-
La callback di un tasto "cifra" modifica il valore del numero
correntemente mostrato sul display.
Se eravamo in fase 1, passa in fase 2;
se eravamo in fase 3, passa in fase 4.
-
La callback del tasto "operazione" prima controlla che siamo
in fase 2, in caso affermativo assegna n1 e passa in fase 3.
-
La callback del tasto "uguale" prima controlla che siamo in fase 4,
in caso affermativo assegna il secondo operando n2,
esegue l'operazione,
aggiorna il contento del display con il risultato dell'operazione, e
torna in fase 1.
NOTE / SUGGERIMENTI:
-
L'aggiornamento del numero corrent num in seguito ad una nuova
cifra c avviene secondo la formula: num = num*10+c.
-
Il modo piu' facile per trasformare un numero nella stringa corrispondente
(da visualizzare sul display) e' "stamparlo" su una stringa con sprintf.
-
La pressione di un tasto "operazione" o del tasto "uguale" non e' sempre
un'azione valida.
Lo stato di non validita' si puo' gestire o producendo un
messaggio di errore se il tasto viene selezionato,
oppure disabilitando il tasto.