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
|
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
enum nom_colonne
{
TEXTE,
ENTIER,
FLOTTANT,
BINAIRE,
NB_COLONNE
};
typedef struct {
GtkWidget *liste_affichable;
GtkListStore *liste;
} treeview_t;
void
renderer_edited_callback (GtkCellRendererText *renderer, gchar *path, gchar *new_text, treeview_t *treeview)
{
g_printerr ("path : %s\n", path);
g_printerr ("text : %s\n", new_text);
/* mise à jour du texte du cellrenderer */
GtkTreeModel *tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview->liste_affichable));
GtkTreeIter iter;
if (gtk_tree_model_get_iter_from_string (tree_model, &iter, path)) {
gtk_list_store_set (treeview->liste, &iter, FLOTTANT, new_text, -1);
}
}
int main (int argc, char *argv[])
{
/* Déclaration des variables */
GtkWidget *fenetre = NULL;
GtkWidget *container_principal = NULL;
/* Initialisation de GTK+ */
gtk_init (&argc, &argv);
/* Création de la fenêtre principale */
fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (fenetre), "Essai");
gtk_container_set_border_width (GTK_CONTAINER (fenetre), 0);
/* Création du container principal */
container_principal = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (fenetre), container_principal);
g_signal_connect (G_OBJECT (fenetre), "destroy", gtk_main_quit, NULL);
/* Liste */
/* Déclaration des variables */
treeview_t treeview;
GtkTreeIter element;
GtkCellRenderer *rendu = NULL;
GtkCellRenderer *rendu_1 = NULL;
GtkCellRenderer *rendu_2 = NULL;
GtkTreeViewColumn *colonne = NULL;
treeview.liste = gtk_list_store_new(NB_COLONNE, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN);
/* premier élément */
gtk_list_store_append (treeview.liste, &element);
gtk_list_store_set (treeview.liste, &element, TEXTE, "essai 1", ENTIER, 0, FLOTTANT, "0.25", BINAIRE, TRUE, -1);
/* deuxième élément */
gtk_list_store_append (treeview.liste, &element);
gtk_list_store_set (treeview.liste, &element, TEXTE, "essai 2", ENTIER, 1, FLOTTANT, "2.98", BINAIRE, FALSE, -1);
/* liste affichable */
treeview.liste_affichable = gtk_tree_view_new_with_model (GTK_TREE_MODEL (treeview.liste));
/* première colonne */
rendu = gtk_cell_renderer_text_new ();
colonne = gtk_tree_view_column_new_with_attributes ("Texte", rendu, "text", TEXTE, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview.liste_affichable), colonne);
/* deuxième colonne */
rendu = gtk_cell_renderer_text_new ();
colonne = gtk_tree_view_column_new_with_attributes ("Entier", rendu, "text", ENTIER, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview.liste_affichable), colonne);
/* troisième élément */
rendu_1 = gtk_cell_renderer_spin_new ();
g_object_set (G_OBJECT (rendu_1), "editable", TRUE, NULL);
GtkAdjustment *adjustment = gtk_adjustment_new (2.50, 0, 10., 0.01, 0.5, 2);
g_object_set (G_OBJECT (rendu_1), "adjustment", adjustment, NULL);
g_signal_connect (G_OBJECT (rendu_1), "edited", G_CALLBACK (renderer_edited_callback), &treeview);
colonne = gtk_tree_view_column_new_with_attributes ("Flottant", rendu_1, "text", FLOTTANT, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview.liste_affichable), colonne);
g_object_set (G_OBJECT (rendu_1), "digits", 2, NULL);
/* quatrième élément */
rendu_2 = gtk_cell_renderer_toggle_new ();
colonne = gtk_tree_view_column_new_with_attributes ("Binaire", rendu_2, "active", BINAIRE, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview.liste_affichable), colonne);
gtk_box_pack_start (GTK_BOX (container_principal), treeview.liste_affichable, FALSE, FALSE, 20);
/* Boucle principale */
gtk_widget_show_all (fenetre);
gtk_main ();
return (EXIT_SUCCESS);
} |
Partager