[Résolu tout seul] [GTK] GTK Cell Renderer ne dessine qu'une ligne ?

GTK Cell Renderer ne dessine qu'une ligne ? [Résolu tout seul] [GTK] - C++ - Programmation

Marsh Posté le 16-09-2009 à 11:23:30    

Salut à tous,
 
Je débute en GTK+, et j'aimerai remplir un GTKTreeView avec le contenu d'un dossier.
 
Donc, j'ai suivie ce tuto: http://scentric.net/tutorial/, mais j'ai un petit soucis:
- Seul la première ligne de ma GtkListStore est affichée  :heink:  
 
Voici mon code:

Code :
  1. extern GtkTreeModel * create_and_fill_model(char p_path[])
  2. {
  3.     GtkListStore *liststore;
  4.     GtkTreeIter toplevel;
  5.     struct dirent *de = NULL;
  6.     DIR *d = NULL;
  7.     liststore =  gtk_list_store_new(NUM_COLS,
  8.                                    GDK_TYPE_PIXBUF,
  9.                                    G_TYPE_STRING,
  10.                                    G_TYPE_STRING);
  11.     // Append a top level row and leave it empty
  12.     gtk_list_store_append(liststore, &toplevel);
  13.     // Reading the directory and filling the list store.
  14.     d = opendir(p_path);
  15.     if (d == NULL)
  16.         return GTK_TREE_MODEL(liststore);
  17.    
  18.     // Loop while not NULL
  19.     while (de = readdir(d))
  20.     {
  21.         gtk_list_store_set(liststore, &toplevel,
  22.                            COL_ICON, NULL,
  23.                            COL_FILENAME, de->d_name,
  24.                            COL_AUTH, "toto",
  25.                            -1);
  26.     }
  27.     // Closing the dir.
  28.     closedir(d);
  29.     return GTK_TREE_MODEL(liststore);
  30. }


 

Code :
  1. extern void create_view_and_model(GtkWidget * p_widget)
  2. {
  3.     GtkTreeViewColumn *col;
  4.     GtkCellRenderer *renderer;
  5.     GtkTreeModel *model;
  6.     /* --- Column #1 --- */
  7.     col = gtk_tree_view_column_new();
  8.     gtk_tree_view_column_set_title(col, "" );
  9.     // pack tree view column into tree view
  10.     gtk_tree_view_append_column(GTK_TREE_VIEW(p_widget), col);
  11.     renderer = gtk_cell_renderer_pixbuf_new();
  12.     // pack cell renderer into tree view column
  13.     gtk_tree_view_column_pack_start(col, renderer, TRUE);
  14.     // connect 'pixbuf' property of the cell renderer to
  15.     //  model column that contains the first name
  16.     gtk_tree_view_column_add_attribute(col, renderer, "pixbuf", COL_ICON);
  17.     /* --- Column #2 --- */
  18.     col = gtk_tree_view_column_new();
  19.     gtk_tree_view_column_set_title(col, "Name" );
  20.     // pack tree view column into tree view
  21.     gtk_tree_view_append_column(GTK_TREE_VIEW(p_widget), col);
  22.     renderer = gtk_cell_renderer_text_new();
  23.     // pack cell renderer into tree view column
  24.     gtk_tree_view_column_pack_start(col, renderer, TRUE);
  25.     // connect 'text' property of the cell renderer to
  26.     //  model column that contains the last name
  27.     gtk_tree_view_column_add_attribute(col, renderer, "text", COL_FILENAME);
  28.     // set 'weight' property of the cell renderer to
  29.     //  bold print (we want all last names in bold)
  30.     g_object_set(renderer,
  31.                  "weight", PANGO_WEIGHT_BOLD,
  32.                  "weight-set", TRUE,
  33.                  NULL);
  34.     /* --- Column #3 --- */
  35.     col = gtk_tree_view_column_new();
  36.     gtk_tree_view_column_set_title(col, "Rights" );
  37.     // pack tree view column into tree view
  38.     gtk_tree_view_append_column(GTK_TREE_VIEW(p_widget), col);
  39.     renderer = gtk_cell_renderer_text_new();
  40.     // pack cell renderer into tree view column
  41.     gtk_tree_view_column_pack_start(col, renderer, TRUE);
  42.     // connect 'text' property of the cell renderer to
  43.     //  model column that contains the last name
  44.     gtk_tree_view_column_add_attribute(col, renderer, "text", COL_AUTH);
  45.    
  46.     // connect a cell data function
  47.     //gtk_tree_view_column_set_cell_data_func(col, renderer, age_cell_data_func, NULL, NULL);
  48.     model = create_and_fill_model("/" );
  49.     gtk_tree_view_set_model(GTK_TREE_VIEW(p_widget), model);
  50.     g_object_unref(model); /* destroy model automatically with view */
  51.     gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(p_widget)),
  52.                                 GTK_SELECTION_MULTIPLE);
  53. }


 
Merci, car j'ai beau regarder, je ne vois pas pourquoi il ne m'affiche qu'une seule ligne. (et google ne m'aide pas beaucoups...)
 
Willits
 
 
Edit: Résolu.
 
Avant de set une ligne, il faut la créer avec gtk_list_store_append(liststore, &toplevel);.
 
Cela donne donc:

Code :
  1. // Loop while not NULL
  2.     while (de = readdir(d))
  3.     {
  4.         gtk_list_store_append(liststore, &toplevel); // Ne pas oublier ce truc.
  5.         gtk_list_store_set(liststore, &toplevel,
  6.                            COL_ICON, NULL,
  7.                            COL_FILENAME, de->d_name,
  8.                            COL_AUTH, "toto",
  9.                            -1);
  10.     }


Message édité par Willits le 16-09-2009 à 11:36:46
Reply

Marsh Posté le 16-09-2009 à 11:23:30   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed