From baf6263d15a495a5f6aac67124f57da04e65fd91 Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Mon, 22 Jan 2024 21:11:51 +0100 Subject: [PATCH] =?UTF-8?q?WIP:=20on=5Fselection=5Fchange()=20affiche=20le?= =?UTF-8?q?=20premier=20=C3=A9lement=20ayant=20chang=C3=A9=20d'=C3=A9tat?= =?UTF-8?q?=20et=20le=20nombre=20d'=C3=A9l=C3=A9ments=20ayant=20chang?= =?UTF-8?q?=C3=A9=20d'=C3=A9tat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/sand_box.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/ui/sand_box.c b/src/ui/sand_box.c index 9bb22d5..1c71220 100644 --- a/src/ui/sand_box.c +++ b/src/ui/sand_box.c @@ -30,21 +30,29 @@ static void on_destroy (GtkWidget *widget, gpointer data) {if (data) g_print (data); exit(0);} -static void setup_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data) { +static void setup_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data) +{ GtkWidget *my_label = gtk_label_new (NULL); gtk_list_item_set_child (my_list_item, my_label); /* Because gtk_list_item_set_child sunk the floating reference of my_label, releasing (unref) isn't necessary for my_label. */ } -static void bind_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data) { +static void bind_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data) +{ GtkWidget *my_label = gtk_list_item_get_child (my_list_item); /* Strobj is owned by the instance. Caller mustn't change or destroy it. */ GtkStringObject *my_string_object = gtk_list_item_get_item (my_list_item); /* The string returned by gtk_string_object_get_string is owned by the instance. */ - printf("%s\n", gtk_string_object_get_string (my_string_object)); + //printf("%s\n", gtk_string_object_get_string (my_string_object)); gtk_label_set_text (GTK_LABEL (my_label), gtk_string_object_get_string (my_string_object)); } +static void on_selection_change (GtkSelectionModel* self, guint position, guint n_items, gpointer user_data) +{ + printf("Premier élement ayant changé d'état : %d (%d ont changé d'état)\n", position, n_items); +} + +enum { COLUMN_DESCRIPTION }; static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box) { @@ -54,7 +62,7 @@ static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box) GtkStringList *my_string_list = gtk_string_list_new ((const char * const *) my_array); - GtkSingleSelection *my_selection_model = gtk_single_selection_new (G_LIST_MODEL (my_string_list)); + GtkMultiSelection *my_selection_model = gtk_multi_selection_new (G_LIST_MODEL (my_string_list)); if (gtk_single_selection_get_selected_item (my_selection_model)) gtk_selection_model_selection_changed (my_selection_model, 0, 1); @@ -63,6 +71,13 @@ static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box) GtkListItemFactory *my_factory = gtk_signal_list_item_factory_new (); g_signal_connect (my_factory, "setup", G_CALLBACK (setup_cb), NULL); g_signal_connect (my_factory, "bind", G_CALLBACK (bind_cb), NULL); + g_signal_connect (my_selection_model, "selection-changed", G_CALLBACK (on_selection_change), NULL); + + GtkWidget *treeview; + treeview = gtk_tree_view_new_with_model (my_selection_model); + gtk_widget_set_vexpand (treeview, TRUE); + gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), + COLUMN_DESCRIPTION); GtkWidget *my_list_view = gtk_list_view_new (GTK_SELECTION_MODEL (my_selection_model), my_factory); gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (in_that_box), my_list_view); @@ -81,7 +96,7 @@ void on_activate_window_creation (GtkApplication *app, gpointer data) { and_now_let_s_climb_that_tree (my_scrolling_thing); - if (data) {g_print (data); g_print (" and is displayed by [sand_box.c > on_activate_window_creation()]\n");} + if (data) {g_print (data); g_print (" and is displayed by [sand_box.c / on_activate_window_creation()]\n");} } //------------------------------------------------------------------------------