vai alla Homepage di Apogeonline

 



Cos'è OpenPress
Glossario
Linux-FAQ
Documenti:

Open Source Definition

GNU General Public License

La cattedrale e il bazaar

Colonizzare la noosfera

Il calderone magico


Libri:

Italian crackdown

Open Sources

MediaMorfosi

GTK+/GNOME
sviluppo applicazioni


Telematica per la pace

Linux HOWTO: Installazione e configurazione

Linux HOWTO: Networking


Risorse
Feedback
vai alla Homepage di Apogeo Editore

Vai alla homepage di OpenPress

GTK+ / Gnome Sviluppo di Applicazioni


Finestre di dialogo particolari

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.

GnomeAbout

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.

#include <libgnomeui/gnome-about.h>

GtkWidget* gnome_about_new(const gchar* title, const gchar* version, const gchar* copyright, const gchar** authors, const gchar* comments, const gchar* logo);

Figura 7. GnomeAbout

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 .

GnomePropertyBox

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:


void gestore(GtkWidget* propertybox, gint page_num, gpointer data);

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.

#include <libgnomeui/gnome-propertybox.h>

GtkWidget* gnome_property_box_new(void);

gint gnome_property_box_append_page(GnomePropertyBox* pb, GtkWidget* page, GtkWidget* tab);

Figura 8. GnomePropertyBox

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 .

#include <libgnomeui/gnome-propertybox.h>

void gnome_property_box_changed(GnomePropertyBox* pb);

void gnome_property_box_set_state(GnomePropertyBox* pb, gboolean setting);

Figura 9. Lo stato del GnomePropertyBox

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().

GnomeMessageBox

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().

#include <libgnomeui/gnome-messagebox.h>

GtkWidget* gnome_message_box_new (const gchar* message, const gchar* messagebox_type, ...);

Figura 10. Costruttore per il MessageBox

Sono fornite delle macro per classificare i vari tipi di MessageBox disponibili.

  • GNOME_MESSAGE_BOX_INFO viene utilizzato per i messaggi di tipo informativo.

  • GNOME_MESSAGE_BOX_WARNING per mostrare errori non fatali.

  • GNOME_MESSAGE_BOX_ERROR per errori fatali per l'intera applicazione.

  • GNOME_MESSAGE_BOX_QUESTION vengono impiegati se bisogna rispondere ad una domanda, presentata nel dialogo.

  • GNOME_MESSAGE_BOX_GENERIC, infine, viene utilizzata per tutti gli altri usi.

Ecco come impiegare GnomeMessageBox:


  GtkWidget * mbox;

  mbox = gnome_message_box_new (message,
                                GNOME_MESSAGE_BOX_INFO,
                                GNOME_STOCK_BUTTON_OK,
                                NULL);

  gtk_widget_show (mbox);

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.


Copyright © 1995-1999 Apogeo srl, Milano