From ef3e64dbc3774b7e315dc253990a753793ff279b Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Sat, 3 Feb 2024 23:57:53 +0100 Subject: [PATCH] WIP: comment 72 instead of 71 to observe the list --- mes notes et liens Gtk4 (2024-02-02) | 41 +++++++++++++++++++++++++++- src/ui/sand_box.c | 16 +++++++++-- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/mes notes et liens Gtk4 (2024-02-02) b/mes notes et liens Gtk4 (2024-02-02) index 9fcc6f1..d4f72b1 100644 --- a/mes notes et liens Gtk4 (2024-02-02) +++ b/mes notes et liens Gtk4 (2024-02-02) @@ -20,6 +20,45 @@ It is possible to refer to the contents of a row in the model directly by keepin GListModel, guint position, GtkTreeListRow, GObject item, GListStore, GtkTreeListModel, GtkTreeExpander, GtkSelectionModel, GtkColumnView, GtkListView, GtkListItem, GtkSortListModel, GtkFilterListModel, GtkListItemFactory, GtkWidget +//--------------------------------------------------------------------------------------------------------------------------- +https://discourse.gnome.org/t/tips-to-initialize-gtk4s-columnview-python/19028 +factory = Gtk.SignalListItemFactory() +factory.connect( 'bind', bindCallback ) +def bindCallback( factory, item ): + item.set_child( item.get_item().end_item ) + + +//--------------------------------------------------------------------------------------------------------------------------- + +alors qu’une fonction normale est appelée directement, +la fonction de rappel G_CALLBACK est simplement définie au départ +et n’est appelée et exécutée que lorsqu’un certain événement se produit. + + +https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-quun-callback/ + +Voici un exemple de callback function en C : + +void A() +{ + printf("Je suis une fonction A\n"); +} +// La fonction callback +void B(void (*ptr)()) +{ + (*ptr) (); // Appel du callback à A +} +int main() +{ + void (*ptr)() = &A; + // Appel de la fonction B + // La fonction A est passée en argument + B(ptr); + return 0; +} + +Le résultat de ce code est donc : "Je suis une fonction A". Comme en JavaScript, une fonction de rappel est appelée chaque fois qu’un certain événement se produit. En C, ces fonctions sont utilisées pour créer diverses nouvelles bibliothèques pour des travaux de programmation ultérieurs, et pour émettre les signaux du noyau qui sont nécessaires à la gestion des événements asynchrones. + //--------------------------------------------------------------------------------------------------------------------------- https://discourse.gnome.org/t/documentation-by-gtk-list-view-tree/18978 How to set up the tree gtklistview ? @@ -80,7 +119,7 @@ def setup(widget, item): label = Gtk.Label() expander = Gtk.TreeExpander.new() expander.set_child(label) - item.set_child(expander) + item.set_child(expander)https://discourse.gnome.org/t/tips-to-initialize-gtk4s-columnview-python/19028 def bind(widget, item): diff --git a/src/ui/sand_box.c b/src/ui/sand_box.c index efb8a41..96c6c29 100644 --- a/src/ui/sand_box.c +++ b/src/ui/sand_box.c @@ -38,7 +38,8 @@ void on_activate_window_creation (GtkApplication *app, gpointer data) GtkTreeListRow is used by GtkTreeListModel to represent items.\ It allows navigating the model as a tree and modify the state of rows.\n\ https://docs.gtk.org/gtk4/class.TreeListRow.html\n\ - assertion 'GTK_IS_TREE_LIST_MODEL (self)' failed (ligne 69)\n"); + assertion 'GTK_IS_TREE_LIST_MODEL (self)' failed (ligne 69)\n\n\ + https://github.com/kriptolix/gtk4_python3_exemples/blob/main/ListView/tree_view.py\n"); gtk_window_set_title (GTK_WINDOW(that_window), "Ignition !"); gtk_window_set_default_size (GTK_WINDOW(that_window), 180, 140); GtkWidget *my_scrolling_thing = gtk_scrolled_window_new (); @@ -57,8 +58,19 @@ static void on_setup_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_it } static void on_bind_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data) +/* trying to copy : https://github.com/kriptolix/gtk4_python3_exemples/blob/main/ListView/tree_view.py */ +/* def bind(widget, item): """bind data from the store object to the widget""" */ +/* expander = item.get_child() */ +/* label = expander.get_child() */ +/* row = item.get_item() */ +/* expander.set_list_row(row) */ +/* obj = row.get_item() */ +/* label.set_label(obj.data) */ { - GtkWidget *my_label = gtk_list_item_get_child (my_list_item); + GtkWidget *my_expander = gtk_list_item_get_child (my_list_item); +// GtkWidget *my_label = gtk_list_item_get_child (my_list_item); + GtkWidget *my_label = gtk_list_item_get_child (my_expander); +// GtkTreeListRow *my_row = gtk_tree_list_model_get_row (my_list_item, 0); /* my_string_object 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. */