WIP: quelques briques de plus... ça passe...

This commit is contained in:
Jean Sirmai 2024-01-13 09:22:13 +01:00
parent c25cb17e94
commit 42bf1cc69d
Signed by: jean
GPG Key ID: FB3115C340E057E3
1 changed files with 56 additions and 14 deletions

View File

@ -56,17 +56,67 @@ static GtkWidget *my_tree_view;
static GListModel *my_list_model = NULL; static GListModel *my_list_model = NULL;
// view = gtk_list_view_new (model, factory); <<<<<< // erreur: un élément de l'initialisation n'est pas une constante
//model = create_application_list ();
typedef struct _GtkModel GtkModel;
GtkModel my_model();
typedef struct _GtkSignalListItemFactory GtkSignalListItemFactory; typedef struct _GtkSignalListItemFactory GtkSignalListItemFactory;
GtkSignalListItemFactory my_factory(int a);
GtkListItemFactory *gtk_signal_list_item_factory_new (void); GtkListItemFactory *gtk_signal_list_item_factory_new (void);
GtkListItemFactory *gtk_list_view_get_factory (GtkListView *self);
GtkWidget *gtk_list_view_new (GtkSelectionModel *my_model, GtkListItemFactory *my_factory);
static void setup_listitem_cb (GtkListItemFactory *factory, GtkListItem *list_item)
{
GtkWidget *label = gtk_label_new ("");
gtk_list_item_set_child (list_item, label);
GtkWidget *image = gtk_image_new ();
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
gtk_list_item_set_child (list_item, image);
}
static void bind_listitem_cb (GtkListItemFactory *factory, GtkListItem *list_item)
{
GtkWidget *image;
GAppInfo *app_info;
image = gtk_list_item_get_child (list_item);
app_info = gtk_list_item_get_item (list_item);
gtk_image_set_from_gicon (GTK_IMAGE (image), g_app_info_get_icon (app_info));
}
static void activate_cb (GtkListView *list, guint position, gpointer unused)
{
GAppInfo *app_info;
app_info = g_list_model_get_item (G_LIST_MODEL (gtk_list_view_get_model (list)), position);
g_app_info_launch (app_info, NULL, NULL, NULL);
g_object_unref (app_info);
}
// Parameters : self : the GtkSignalListItemFactory,
// listitem : the GtkListItem to bind,
// user_data : the user data set when the signal handler was connected.
// Flags: Run First
static void any_user_function (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) {}
// user_function can be : setup, bind, unbind or teardown
//
// The “setup” signal is emitted when the factory needs to create a new row widget. // The “setup” signal is emitted when the factory needs to create a new row widget.
// g_signal_connect (factory, "setup", setup_listitem_cb, NULL); <<<<<< // g_signal_connect (factory, "setup", setup_listitem_cb, NULL);
// //
// The “bind” signal is emitted when a row widget needs to be connected to an item from the model. // The “bind” signal is emitted when a row widget needs to be connected to an item from the model.
// g_signal_connect (factory, "bind", bind_listitem_cb, NULL); <<<<<< // g_signal_connect (factory, "bind", bind_listitem_cb, NULL);
// //
// Both of these signals take a GtkListItem as argument, // Both of these signals take a GtkListItem as argument,
// which is a wrapper object that lets you get at the model item (with gtk_list_item_get_item()) // which is a wrapper object that lets you get at the model item (with gtk_list_item_get_item())
@ -75,17 +125,6 @@ GtkListItemFactory *gtk_signal_list_item_factory_new (void);
// If your “bind” handler connects to signals on the item or does other things that require cleanup, // If your “bind” handler connects to signals on the item or does other things that require cleanup,
// you can use the “unbind” signal to do that cleanup. The “setup” signal has a similar counterpart called “teardown”. // you can use the “unbind” signal to do that cleanup. The “setup” signal has a similar counterpart called “teardown”.
static void setup_listitem_cb (GtkListItemFactory *factory, GtkListItem *list_item)
{
GtkWidget *label = gtk_label_new ("");
gtk_list_item_set_child (list_item, label);
}
// user_function can be : setup, bind, unbind or teardown
// Parameters : self, The GtkSignalListItemFactory, listitem, The GtkListItem to bind,
// user_data : user data set when the signal handler was connected.
// Flags: Run First
static void user_function (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) {}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -96,8 +135,11 @@ static void user_function (GtkSignalListItemFactory *self, GtkListItem *listitem
// https://gnome.pages.gitlab.gnome.org/libsoup/gio/GListModel.html // https://gnome.pages.gitlab.gnome.org/libsoup/gio/GListModel.html
// https://blog.gtk.org/2020/09/05/a-primer-on-gtklistview/ <<< Factory mechanism // https://blog.gtk.org/2020/09/05/a-primer-on-gtklistview/ <<< Factory mechanism
// https://docs.gtk.org/gtk4/class.ListItemFactory.html <<< // https://docs.gtk.org/gtk4/class.ListItemFactory.html <<<
// https://www.typeerror.org/docs/gtk~4.0/gtksignallistitemfactory
// https://developer-old.gnome.org/gtk4/stable/GtkListView.html <<< copy that !
// https://docs.gtk.org/gtk4/class.ListItem.html // https://docs.gtk.org/gtk4/class.ListItem.html
// https://docs.gtk.org/gtk4/ctor.TreeListModel.new.html *** // https://docs.gtk.org/gtk4/ctor.TreeListModel.new.html ***
// https://blog.gtk.org/2020/06/08/more-on-lists-in-gtk-4/ *** // https://blog.gtk.org/2020/06/08/more-on-lists-in-gtk-4/ ***
// https://gitlab.gnome.org/GNOME/gtk/-/blob/main/demos/gtk-demo/listview_settings.c GtkBuilder *builder; (line 216) // https://gitlab.gnome.org/GNOME/gtk/-/blob/main/demos/gtk-demo/listview_settings.c GtkBuilder *builder; (line 216)
// https://discourse.gnome.org/t/how-can-i-get-the-expanded-collapsed-items-in-the-new-gtktreelistmodel-implementation/16824 // https://discourse.gnome.org/t/how-can-i-get-the-expanded-collapsed-items-in-the-new-gtktreelistmodel-implementation/16824
// https://developer-old.gnome.org/gtk4/stable/GtkSignalListItemFactory.html