📄 gtk_tut_it-9.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK Tutorial: Il Widgets Lista</TITLE> <LINK HREF="gtk_tut_it-10.html" REL=next> <LINK HREF="gtk_tut_it-8.html" REL=previous> <LINK HREF="gtk_tut_it.html#toc9" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut_it-10.html">Avanti</A><A HREF="gtk_tut_it-8.html">Indietro</A><A HREF="gtk_tut_it.html#toc9">Indice</A><HR NOSHADE><H2><A NAME="s9">9. Il Widgets Lista</A></H2><P>Il widget GtkList serve come contenitore verticale per altri widget chedevono essere di tipo GtkListItem.<P>Un widget GtkList possiede una sua propria finestra per ricevere eventie un suo proprio colore di sfondo che di solito è bianco. Dal momentoche è direttamente derivato dal widget GtkContainer, può essere trattatocome tale usando la macro GTK_CONTAINER(List); si veda il widget GtkContainerper ulteriori dettagli.Per usare il widget GtkList in tutte le sue potenzialità, si dovrebbe esseregià familiari con l'uso della GList e delle relative funzioni g_list_*().<P>All'interno della definizione della struttura del widget GtkList c'è uncampo che sarà per noi di grande interesse, cioè:<P><BLOCKQUOTE><CODE><PRE>struct _GtkList{ ... GList *selection; guint selection_mode; ...}; </PRE></CODE></BLOCKQUOTE><P>Il campo ``selection'' in un GtkList punta a una lista collegata di tuttigli elementi che sono selezionati correntemente, oppure a NULL se la selezione è vuota. Quindi, per avere informazioni sulla selezione corrente,leggiamo il campo GTK_LIST()->selection, senza però modificarlo dal momentoche i campi interni debbono essere gestiti dalle funzioni gtk_list_*(). <P>Le modalità di selezione in una GtkList, e quindi il contenuto diGTK_LIST()->selection, sono determinate dal campo selection_mode:<P>selection_mode può assumere uno dei seguenti valori:<UL><LI> GTK_SELECTION_SINGLE - La selezione può essere o NULL oppureun puntatore GList* per un singolo elementoselezionato.</LI><LI> GTK_SELECTION_BROWSE - La selezione è null se la lista non contienealcun widget o se ha solo widget non sensibili,oppure può contenere un puntatore a una strutturaGList, e quindi esattamente un elemento di lista.</LI><LI> GTK_SELECTION_MULTIPLE - La selezione è ``NULL'' se non è selezionatoalcun elemento di lista, oppure un puntatore GList alprimo elemento selezionato. Quello, a sua volta, puntaa una struttura GList per il secondo elemento selezionatoe così via.</LI><LI> GTK_SELECTION_EXTENDED - La selezione è sempre NULL.</LI></UL><P>Il valore per difetto è GTK_SELECTION_MULTIPLE.<P><H2><A NAME="ss9.1">9.1 Segnali</A></H2><P><BLOCKQUOTE><CODE><PRE>void selection_changed (GtkList *LIST)</PRE></CODE></BLOCKQUOTE><P>Questo segnale verrà invocato ogni volta che il campo diselezione di una GtkList è cambiato. Questo accade quandoun figlio della GtkList viene selezionato o deselezionato.<P><BLOCKQUOTE><CODE><PRE>void select_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>Questo segnale viene invocato quando un fuglio di una GtkListsta per essere selezionato. Questo accade principalmente inoccasione di chiamate a gtk_list_select_item() e gtk_list_select_child(),di pressioni di bottoni e a volte può venir fatto scattare indirettamentein altre occasioni, in cui vengono aggiunti o rimossi dei figlidalla GtkList.<P><BLOCKQUOTE><CODE><PRE>void unselect_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>Questo segnale viene invocato quando un figlio della GtkList staper essere deselezionato. Ciò accade principalmente in occasionedi chiamate a gtk_list_unselect_item() e gtk_list_unselect_child(),di pressioni di bottoni, e a volte può venir fatto scattare indirettamentein altre occasioni, in cui vengono aggiunti o rimossi dei figlidalla GtkList.<P><H2><A NAME="ss9.2">9.2 Funzioni</A></H2><P><BLOCKQUOTE><CODE><PRE>guint gtk_list_get_type (void)</PRE></CODE></BLOCKQUOTE><P>Restituisce l'identificatore di tipo `GtkList'.<P><BLOCKQUOTE><CODE><PRE>GtkWidget* gtk_list_new (void)</PRE></CODE></BLOCKQUOTE><P>Crea un nuovo oggetto `GtkList'. Il nuovo widget vienerestituito sotto forma di un puntoatore ad un oggetto`GtkWidgetì'. In caso di fallimento, viene ritornato NULL.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_insert_items (GtkList *LIST, GList *ITEMS, gint POSITION)</PRE></CODE></BLOCKQUOTE><P>Inserisce degli elementi di lista nella LIST, a partire daPOSITION. ITEMS ITEMS è una lista doppiamente collegata, incui ci si aspetta che i puntatori di ogni nodo puntino aun GtkListItem appena creato. I nodi GList di ITEMS vengonoassunti dalla LIST.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_append_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>Inserisce elementi di lista proprio come gtk_list_insert_items(),ma alla fine della LIST. I nodi GList di ITEMS vengonoassunti dalla LIST.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_prepend_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>Inserisce elementi di lista proprio come gtk_list_insert_items(),ma al principio della LIST. I nodi GList di ITEMS vengonoassunti dalla LIST.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_remove_items (GtkList *LIST, GList *ITEMS)</PRE></CODE></BLOCKQUOTE><P>Rimuove degli elementi di lista dalla LIST. ITEMS è una listadoppiamente collegata in cui ci si aspetta che i puntatori diogni nodo puntino a un figlio diretto di LIST. E' poi responsabilitàdel chiamante di fare una chiamata a g_list_free(ITEMS). E' anchenecessario che il chiamante distrugga lui stesso gli elementi dellalista.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_clear_items (GtkList *LIST, gint START, gint END)</PRE></CODE></BLOCKQUOTE><P>Rimuove e distrugge elementi di lista da LIST. Un widget ne èinteressato se la sua posizione corrente all'interno di LIST è compresofra START ed END.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_select_item (GtkList *LIST, gint ITEM)</PRE></CODE></BLOCKQUOTE><P>Invoca il segnale select_child per un elemento di listaspecificato dalla sua posizione corrente all'interno di LIST.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_unselect_item (GtkList *LIST, gint ITEM)</PRE></CODE></BLOCKQUOTE><P>Invoca il segnale unselect_child per un elemento di listaspecificato dalla sua posizione corrente all'interno di LIST.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_select_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>Invoca il segnale select_child per uno specifico CHILD.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_unselect_child (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>Invoca il segnale unselect_child per uno specifico CHILD.<P><BLOCKQUOTE><CODE><PRE>gint gtk_list_child_position (GtkList *LIST, GtkWidget *CHILD)</PRE></CODE></BLOCKQUOTE><P>Restituisce la posizione di CHILD all'interno di LIST. In caso di fallimento,viene restituito `-1'.<P><BLOCKQUOTE><CODE><PRE>void gtk_list_set_selection_mode (GtkList *LIST, GtkSelectionMode MODE)</PRE></CODE></BLOCKQUOTE><P>Assegna a LIST il modo di selezione MODE, che può essere uno fra GTK_SELECTION_SINGLE, GTK_SELECTION_BROWSE, GTK_SELECTION_MULTIPLE oGTK_SELECTION_EXTENDED.<P><BLOCKQUOTE><CODE><PRE>GtkList* GTK_LIST (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>Fa il cast di un generico puntatore a `GtkList*'. Per maggioriinformazioni vedere Standard Macros::.<P><BLOCKQUOTE><CODE><PRE>GtkListClass* GTK_LIST_CLASS (gpointer CLASS)</PRE></CODE></BLOCKQUOTE><P>Fa il cast di un generico puntatore a `GtkListClass*'. Per maggioriinformazioni vedere Standard Macros::.<P><BLOCKQUOTE><CODE><PRE>gint GTK_IS_LIST (gpointer OBJ)</PRE></CODE></BLOCKQUOTE><P>Determina se un generico puntatore si riferisce ad un oggetto `GtkList'.Per maggiori informazioni vedere Standard Macros::.<P><H2><A NAME="ss9.3">9.3 Esempio</A></H2><P>Diamo di seguito un programma di esempio che stamperà i campbiamentidella selezione di una GtkList, e vi lascia ``imprigionare'' gli elementidi una lista selezionandoli con il pulsante destro del mouse:<P><BLOCKQUOTE><CODE><PRE>/* list.c *//* includiamo i file header di gtk+ * includiamo stdio.h, ne abbiamo bisogno per printf() */#include <gtk/gtk.h>#include <stdio.h>/* Questa e' la nostra stringa di identificazione dei dati per assegnarli * ad elementi di lista */const gchar *list_item_data_key="list_item_data";/* prototipi per i gestori di segnale che connetteremo * al widget GtkList */static void sigh_print_selection (GtkWidget *gtklist, gpointer func_data);static void sigh_button_event (GtkWidget *gtklist, GdkEventButton *event, GtkWidget *frame);/* funzione main per predisporre l'interfaccia utente */gint main (int argc, gchar *argv[]){ GtkWidget *separator; GtkWidget *window; GtkWidget *vbox; GtkWidget *scrolled_window; GtkWidget *frame; GtkWidget *gtklist; GtkWidget *button; GtkWidget *list_item; GList *dlist; guint i; gchar buffer[64]; /* inizializza gtk+ (e di conseguenza gdk) */ gtk_init(&argc, &argv); /* crea una finestra in cui mettere tutti i widget * connette gtk_main_quit() al segnale "destroy" della finestra * per gestire le richieste di chiusura finestra del window manager */ window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "GtkList Example"); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), NULL); /* all'interno della finestra abbiamo bisogno di una scatola * in cui mettere i widget verticalmente */ vbox=gtk_vbox_new(FALSE, 5); gtk_container_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(vbox); /* questa è la finestra scorribile in cui mettere il widget GtkList */ scrolled_window=gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_usize(scrolled_window, 250, 150); gtk_container_add(GTK_CONTAINER(vbox), scrolled_window); gtk_widget_show(scrolled_window); /* crea il widget GtkList * connette il gestore di segnale sigh_print_selection() * al segnale "selection_changed" della GtkList, per stampare * gli elementi selezionati ogni volta che la selezione cambia
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -