Questa sezione descrive alcuni tipi particolari di dialogo che esistono per convenienza e per una coerenza nella interfaccia utente. Ovviamente tutto ciò che è stato detto riguardo GnomeDialog è valido e applicabile a tutte le sottoclassi.
Le applicazioni Gnome dovrebbero avere una voce del menu "Informazioni su..." che visualizza questo widget. Il suo utilizzo è veramente banale, è coinvolta un'unica funzione, gnome_about_new() (
Figura 7
). Gli argomenti sono, rispettivamente: il titolo della vostra applicazione, la versione di questa, una notifica di copyright, un vettore di nomi degli autori terminato da NULL, un piccolo paragrafo dove spendere due parole riguardo l'applicazione stessa e il nome di un file di immagine come logo. È obbligatorio solo l'argomento authors, gli altri possono essere equivalenti a NULL, ma il dialogo si mostrerà moooolto strano se tutti questi vengono a mancare.
GnomeAbout si chiude automaticamente quando viene premuto il pulsante, quindi non dovete affatto preoccuparvi di questo aspetto. Basta creare e visualizzare il dialogo. Ricordate di assicurarvi di creare una solo istanza alla volta, come descritto in
la sezione Gli ultimi ritocchi.
Ecco un esempio di callback per il menu che mostra un dialogo di informazioni, dal Calendario di Gnome:
static void
about_calendar_cmd (GtkWidget *widget, void *data)
{
GtkWidget *about;
const gchar *authors[] = {
"Miguel de Icaza <miguel@kernel.org>",
"Federico Mena <federico@gimp.org>",
"Arturo Espinosa <arturo@nuclecu.unam.mx>",
NULL
};
about = gnome_about_new (_("Calendario di Gnome"), VERSION,
"(C) 1998 the Free Software Foundation",
authors,
_("Il Calendario personale e agenda di GNOME."),
NULL);
gtk_window_set_modal (GTK_WINDOW (about), TRUE);
gtk_widget_show (about);
}
Notate che gli autori vengono passati con nome e indirizzo di posta elettronica. In questo modo gli utenti possono sfruttare il dialogo per inviare offese e notiche di errori. La macro VERSIONE proviene dal file config.h, e viene definita in configure. Gli autori del Calendario di Gnome hanno scelto di evitare multiple istanze del dialogo rendendo quest'ultimo modale: l'utente non può selezionare nuovamente la voce del menu che chiama il dialogo. È consigliato tuttavia sfruttare la tecnica descritta in
la sezione Gli ultimi ritocchi.
Il widget GnomePropertyBox viene utilizzato per le preferenze dell'applicazione, oppure per modificare le proprietà dell'interfaccia grafica. È un dialogo con al suo interno un GtkNotebook, e quattro pulsanti: "OK", "Applica", "Chiudi" e "Aiuto". Il pulsante "OK" è equivalente al pulsante "Applica" seguito da pulsante "Chiudi". "Applica" rende le modifiche richieste dall'utente immediatamente effettive utilizzando i widget posizionati all'interno del GnomePropertyBox. Sorprendentemente, "Aiuto" visualizza la guida in linea. "OK" e "Chiudi" vengono automaticamente gestite dalla finestra delle proprietà, quindi potete tranquillamente ignorarli.
Non dovete preoccuparvi di gestire direttamente i pulsanti del GnomePropertyBox: questo emette i segnali "apply" e "help". Le callback per questi segnali sono sotto la seguente forma:
page_num è la pagina corrente attiva del GtkNotebook che si trova all'interno del dialogo. (le pagine del GtkNotebook vengono numerate dal fronte al retro, iniziando da zero. La prima pagine è la prima che aggiungete al notebook.) Per "help" il numero della pagine vi permette di fornire un aiuto sensibile al contesto. Quando l'utente preme il pulsante "Applica" oppure "OK" viene emesso il segnale "apply" per ciascuna pagina, quindi emesso l'ultima volta utilizzando -1 come valore dell'argomento page_num.
Per creare un GnomePropertyBox la procedura è la seguente: si crea prima di tutto il dialogo, poi ciascuna pagina e la si aggiunge. La prima operazione si svolge con gnome_property_box_new(), che non accetta argomenti.
Quindi create un widget per ciascuna pagina (si tratta usualmente un contenitore con una serie di strumenti di controllo al suo interno), e aggiungetelo al dialogo utilizzando gnome_property_box_append_page() (fl-propertybox">). L'argomento page si tratta del widget da posizione all'interno della nuova pagina del notebook, mentre tab è il widget da utilizzare per il titolo della pagina. Il numero della pagina aggiunta viene tornato, quindi non dovete tenere traccia della numerazione manualmente.
Ricade fra le vostre responsabilità di tener traccia di qualunque interazione che l'utente ha con il contenuto di ciascuna pagina. Quando l'utente modifica una impostazione, dovete notificarla al GnomePropertyBox, il quale imposta di conseguenza la sensitività dei pulsanti "Applica" e "OK". Le istruzioni di rilievo si trovano in
Figura 9
.
gnome_property_box_changed() notifica i cambiamenti al PropertyBox stesso, il quale modificherà automaticamente i flag interni per gestire i cambiamenti quando il segnale "apply" viene emesso. Se desiderate modificare questi flag interni, per qualunque ragione, potete utilizzare la funzione gnome_property_box_set_state().
Un GnomeMessageBox è una sottoclasse di GnomeDialog che permette la visualizzazione di un breve messaggio oppure la risposta ad una semplice domanda. Gnome fornisce diversi "tipi" di MessageBox. Questi anno icone differenti vicino al testo, con titoli diversi. Le icone sono molto carine, e permettono agli utenti di riconoscere rapidamente il tipo di messaggio presentato.
La API è molto semplice: non esistono funzioni specifiche per GnomeMessageBox all'infuori del costruttore, mostrato in
Figura 10
. Il primo argomento è il testo del messaggio da mostrare, mentre il secondo è la che rappresenta il tipo di messaggio. Potete elencare qualunque pulsante, come fareste in gnome_dialog_new(). Diversamente dallo spoglio GnomeDialog, GnomeMessageBox ci chiude, per default, alla pressione di qualunque pulsante. È ovviamente possibile modificare questo aspetto tulizzando gnome_dialog_set_close().
GnomeMessageBox, come la maggior parte delle sottoclassi di GnomeDialog, escluso GnomeDialog stesso, vengono automaticamente chiusi quando cliccati. In questo modo non necessita distruggere il widget manualmente.