Bonjour
Je dois réaliser un programme permettant d'afficher, copier et trier une liste d'informations avec plusieurs lignes et colonnes.
Pour cela je pense devoir utiliser la fonction gtktreeview qui permet d'afficher, de trier les lignes voire colonnes et de les copier rapidement (à la souris).
Hélas ça fait quelques mois que je cherche et je ne trouve pas d'exemples de code source contenant l'ensemble des fonctions gtktreeview + sélectionner des lignes et-ou colonnes de façon a l'adapter à mes besoins. Je ne me suis pas encore bien intéressé au filtrage des lignes.

J'ai trouvé ce code (code1) qui me permet de générer un gtkteeview, et un autre bout de code (code2) plus loin dans ce post, qui semble t il ... me permettrait de sélectionner des lignes, mais je ne comprends pas comment assembler ces 2 bouts de codes.

Il n'y aurait pas un tuto si possible en Français expliquant comment on manipules gtktreeview, gtklist_store et leurs options, ou un exemple ?

J'ai recherché sur le web et on trouve des infos mais avec du python, du vala, php, ... etc, mais c'est le C qui nous intéresse.

(code1)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
 
/* 
 * Compile with:
 *  gcc -o helloworld helloworld.c `pkg-config --cflags --libs gtk+-2.0`
 *
 */
 
#include <gtk/gtk.h>
 
enum
{
  COL_NAME = 0,
  COL_AGE,
  NUM_COLS
} ;
 
 
static GtkTreeModel *
create_and_fill_model (void)
{
  GtkListStore  *store;
  GtkTreeIter    iter;
 
  store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_UINT);
 
  /* Append a row and fill in some data */
  gtk_list_store_append (store, &iter);
  gtk_list_store_set (store, &iter,
                      COL_NAME, "Heinz El-Mann",
                      COL_AGE, 51,
                      -1);
 
  /* append another row and fill in some data */
  gtk_list_store_append (store, &iter);
  gtk_list_store_set (store, &iter,
                      COL_NAME, "Jane Doe",
                      COL_AGE, 23,
                      -1);
 
  /* ... and a third row */
  gtk_list_store_append (store, &iter);
  gtk_list_store_set (store, &iter,
                      COL_NAME, "Joe Bungop",
                      COL_AGE, 91,
                      -1);
 
  return GTK_TREE_MODEL (store);
}
 
static GtkWidget *
create_view_and_model (void)
{
  GtkCellRenderer     *renderer;
  GtkTreeModel        *model;
  GtkWidget           *view;
 
  view = gtk_tree_view_new ();
 
  /* --- Column #1 --- */
 
  renderer = gtk_cell_renderer_text_new ();
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
                                               -1,      
                                               "Name",  
                                               renderer,
                                               "text", COL_NAME,
                                               NULL);
 
  /* --- Column #2 --- */
 
  renderer = gtk_cell_renderer_text_new ();
  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view),
                                               -1,      
                                               "Age",  
                                               renderer,
                                               "text", COL_AGE,
                                               NULL);
 
  model = create_and_fill_model ();
 
  gtk_tree_view_set_model (GTK_TREE_VIEW (view), model);
 
  /* The tree view has acquired its own reference to the
   *  model, so we can drop ours. That way the model will
   *  be freed automatically when the tree view is destroyed */
 
  g_object_unref (model);
 
  return view;
}
 
 
int
main (int argc, char **argv)
{
  GtkWidget *window;
  GtkWidget *view;
 
  gtk_init (&argc, &argv);
 
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (window, "delete_event", gtk_main_quit, NULL); /* dirty */
 
  view = create_view_and_model ();
 
  gtk_container_add (GTK_CONTAINER (window), view);
 
  gtk_widget_show_all (window);
 
  gtk_main ();
 
  return 0;
}
**********************************************************************************************************************
(code2)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
 
  ...
 
  GtkTreeSelection *selection;
  GtkTreeModel     *model;
  GtkTreeIter       iter;
 
  /* This will only work in single or browse selection mode! */
 
  selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
  if (gtk_tree_selection_get_selected(selection, &model, &iter))
  {
    gchar *name;
 
    gtk_tree_model_get (model, &iter, COL_NAME, &name, -1);
 
    g_print ("selected row is: %s\n", name);
 
    g_free(name);
  }
  else
  {
    g_print ("no row selected.\n");
  }
 
  ...
Merci d'avance