⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_it-9.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!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 &egrave; bianco. Dal momentoche &egrave; direttamente derivato dal widget GtkContainer, pu&ograve; 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&agrave;, si dovrebbe esseregi&agrave; familiari con l'uso della GList e delle relative funzioni g_list_*().<P>All'interno della definizione della struttura del widget GtkList c'&egrave; uncampo che sar&agrave; per noi di grande interesse, cio&egrave;:<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 &egrave; vuota. Quindi, per avere informazioni sulla selezione corrente,leggiamo il campo GTK_LIST()->selection, senza per&ograve; modificarlo dal momentoche i campi interni debbono essere gestiti dalle funzioni gtk_list_*(). <P>Le modalit&agrave; di selezione in una GtkList, e quindi il contenuto diGTK_LIST()->selection, sono determinate dal campo selection_mode:<P>selection_mode pu&ograve; assumere uno dei seguenti valori:<UL><LI> GTK_SELECTION_SINGLE - La selezione pu&ograve; essere o NULL oppureun puntatore GList* per un singolo elementoselezionato.</LI><LI> GTK_SELECTION_BROWSE - La selezione &egrave; null se la lista non contienealcun widget o se ha solo widget non sensibili,oppure pu&ograve; contenere un puntatore a una strutturaGList, e quindi esattamente un elemento di lista.</LI><LI> GTK_SELECTION_MULTIPLE - La selezione &egrave; ``NULL'' se non &egrave; 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&igrave; via.</LI><LI> GTK_SELECTION_EXTENDED - La selezione &egrave; sempre NULL.</LI></UL><P>Il valore per difetto &egrave;  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&agrave; invocato ogni volta che il campo diselezione di una GtkList &egrave; 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&ograve; 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&ograve; accade principalmente in occasionedi chiamate a gtk_list_unselect_item() e gtk_list_unselect_child(),di pressioni di bottoni, e a volte pu&ograve; 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&igrave;'. 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 &egrave; 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 &egrave; una listadoppiamente collegata in cui ci si aspetta che i puntatori diogni nodo puntino a un figlio diretto di LIST. E' poi responsabilit&agrave;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 &egrave;interessato se la sua posizione corrente all'interno di LIST &egrave; 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&ograve; 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&agrave; 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        &lt;gtk/gtk.h>#include        &lt;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(&amp;argc, &amp;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 &egrave; 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 + -