#include #include #include enum { TEXT_COLUMN, TOGGLE_COLUMN, TEXT_COLUMN3, // je cree une 3eme colonne N_COLUMN }; int main(int argc, char **argv) { GtkWidget *pWindow; GtkWidget *pListView; GtkWidget *pScrollbar; GtkListStore *pListStore; GtkTreeViewColumn *pColumn; GtkCellRenderer *pCellRenderer; gchar *sTexte, *scol3; gint i; gtk_init(&argc, &argv); /* Creation de la fenetre principale */ pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200); gtk_window_set_title(GTK_WINDOW(pWindow), "GtkTreeView et GtkListStore"); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); /* Creation du modele ajout colonne*/ pListStore = gtk_list_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING); sTexte = g_malloc(12); scol3 = g_malloc(20); /* Insertion des elements */ for (i = 0 ; i < 50 ; ++i) { GtkTreeIter pIter; sprintf(sTexte, "Ligne %d\0", i); sprintf(scol3, "azerty %d\0", i); gtk_list_store_append(pListStore, &pIter); gtk_list_store_set(pListStore, &pIter, TEXT_COLUMN, sTexte, TOGGLE_COLUMN, TRUE, TEXT_COLUMN3, scol3, -1); } g_free(sTexte); g_free(scol3); /* Creation de la vue */ pListView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pListStore)); /* Creation de la premiere colonne */ pCellRenderer = gtk_cell_renderer_text_new(); pColumn = gtk_tree_view_column_new_with_attributes("Titre", pCellRenderer, "text", TEXT_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn); /* Creation de la deuxieme colonne */ pCellRenderer = gtk_cell_renderer_toggle_new(); pColumn = gtk_tree_view_column_new_with_attributes("CheckBox", pCellRenderer, "active", TOGGLE_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn); /* Creation de la 3eme colonne */ pCellRenderer = gtk_cell_renderer_text_new(); pColumn = gtk_tree_view_column_new_with_attributes("Macol3", pCellRenderer, "text", TEXT_COLUMN3, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(pListView), pColumn); /* Ajout de la vue a la fenetre */ GtkAdjustment *vadj; GtkObject *vadjo; // (gdouble value, lower, upper, step_increment, page_increment, page_size); vadjo = gtk_adjustment_new(0, 0, 256, 1, 10, 16); pScrollbar = gtk_scrolled_window_new(NULL,GTK_ADJUSTMENT (vadjo)); // pScrollbar = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(pScrollbar), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(pWindow), pScrollbar); gtk_container_add(GTK_CONTAINER(pScrollbar), pListView); // affiche derniere page double dd,ddu,ddps; vadj = gtk_scrolled_window_get_vadjustment((GtkScrolledWindow*) pScrollbar); ddu = GTK_ADJUSTMENT(vadj)->upper; ddps = GTK_ADJUSTMENT(vadj)->page_size; dd = GTK_ADJUSTMENT(vadj)->upper - GTK_ADJUSTMENT(vadj)->page_size; printf(" ddu=%lf ddps=%lf dd=%lf\n",ddu, ddps, dd); gtk_adjustment_set_value(GTK_ADJUSTMENT(vadj),dd); gtk_scrolled_window_set_vadjustment((GtkScrolledWindow*) pScrollbar,(GtkAdjustment*) vadj); gtk_adjustment_value_changed (GTK_ADJUSTMENT(vadj)); gtk_widget_show_all(pWindow); gtk_main(); return EXIT_SUCCESS; }