WIP: cleaning
This commit is contained in:
parent
e9f147a60a
commit
22d127d1c0
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
static void on_destroy (GtkWidget *widget, gpointer data) {if (data) g_print (data); exit(0);}
|
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 on_setup_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *my_label = gtk_label_new (NULL);
|
GtkWidget *my_label = gtk_label_new (NULL);
|
||||||
gtk_list_item_set_child (my_list_item, my_label);
|
gtk_list_item_set_child (my_list_item, my_label);
|
||||||
|
@ -37,7 +37,7 @@ static void setup_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item,
|
||||||
* releasing (unref) isn't necessary for 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 on_bind_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *my_label = gtk_list_item_get_child (my_list_item);
|
GtkWidget *my_label = gtk_list_item_get_child (my_list_item);
|
||||||
/* my_string_object is owned by the instance. Caller mustn't change or destroy it. */
|
/* my_string_object is owned by the instance. Caller mustn't change or destroy it. */
|
||||||
|
@ -46,10 +46,6 @@ static void bind_cb (GtkSignalListItemFactory *self, GtkListItem *my_list_item,
|
||||||
gtk_label_set_text (GTK_LABEL (my_label), 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 unbind_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) {}
|
|
||||||
static void teardown_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) {}
|
|
||||||
/* GtkListItem instance will be destroyed soon. You don't need to set the child to NULL. */
|
|
||||||
|
|
||||||
static void on_selection_change (GtkSelectionModel* my_selection_model, guint position, guint n_items, gpointer user_data)
|
static void on_selection_change (GtkSelectionModel* my_selection_model, guint position, guint n_items, gpointer user_data)
|
||||||
{
|
{
|
||||||
printf("list size = %d item type = %d\
|
printf("list size = %d item type = %d\
|
||||||
|
@ -62,87 +58,18 @@ static void on_selection_change (GtkSelectionModel* my_selection_model, guint p
|
||||||
n_items );
|
n_items );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void on_activating_this_expander (GtkExpander *my_expander, gpointer my_data) {printf("%s\n", gtk_expander_get_label (my_expander));}
|
||||||
|
|
||||||
static void populate_tree_model (store){};
|
//-------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// ------------- Begin Matthias Clasen ------------------------------------
|
GListModel *item_create_func (gpointer item, gpointer user_data)
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
{
|
||||||
TITLE_COLUMN,
|
GtkWidget *my_expander = gtk_expander_new ("my_expander");
|
||||||
AUTHOR_COLUMN,
|
gtk_expander_set_child (my_expander, NULL); // *child); how to ?
|
||||||
CHECKED_COLUMN,
|
if (0) on_activating_this_expander (my_expander, NULL); // gpointer user_data) The “activate” signal
|
||||||
N_COLUMNS
|
return NULL;
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
setup_tree (void)
|
|
||||||
{
|
|
||||||
GtkTreeStore *store;
|
|
||||||
GtkWidget *tree;
|
|
||||||
GtkTreeViewColumn *column;
|
|
||||||
GtkCellRenderer *renderer;
|
|
||||||
|
|
||||||
/* Create a model. We are using the store model for now, though we
|
|
||||||
* could use any other GtkTreeModel */
|
|
||||||
store = gtk_tree_store_new (N_COLUMNS,
|
|
||||||
G_TYPE_STRING,
|
|
||||||
G_TYPE_STRING,
|
|
||||||
G_TYPE_BOOLEAN);
|
|
||||||
|
|
||||||
/* custom function to fill the model with data */
|
|
||||||
populate_tree_model (store);
|
|
||||||
|
|
||||||
/* Create a view */
|
|
||||||
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
|
|
||||||
|
|
||||||
/* The view now holds a reference. We can get rid of our own
|
|
||||||
* reference */
|
|
||||||
g_object_unref (G_OBJECT (store));
|
|
||||||
|
|
||||||
/* Create a cell render and arbitrarily make it red for demonstration
|
|
||||||
* purposes */
|
|
||||||
renderer = gtk_cell_renderer_text_new ();
|
|
||||||
g_object_set (G_OBJECT (renderer),
|
|
||||||
"foreground", "red",
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* Create a column, associating the "text" attribute of the
|
|
||||||
* cell_renderer to the first column of the model */
|
|
||||||
column = gtk_tree_view_column_new_with_attributes ("Author", renderer,
|
|
||||||
"text", AUTHOR_COLUMN,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* Add the column to the view. */
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
|
|
||||||
|
|
||||||
/* Second column.. title of the book. */
|
|
||||||
renderer = gtk_cell_renderer_text_new ();
|
|
||||||
column = gtk_tree_view_column_new_with_attributes ("Title",
|
|
||||||
renderer,
|
|
||||||
"text", TITLE_COLUMN,
|
|
||||||
NULL);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
|
|
||||||
|
|
||||||
/* Last column.. whether a book is checked out. */
|
|
||||||
renderer = gtk_cell_renderer_toggle_new ();
|
|
||||||
column = gtk_tree_view_column_new_with_attributes ("Checked out",
|
|
||||||
renderer,
|
|
||||||
"active", CHECKED_COLUMN,
|
|
||||||
NULL);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
|
|
||||||
|
|
||||||
/* Now we can manipulate the view just like any other GTK widget */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_activating_this_expander (GtkExpander *my_expander, gpointer my_data){}
|
|
||||||
|
|
||||||
|
|
||||||
// ------------- End Matthias Clasen --------------------------------------
|
|
||||||
|
|
||||||
enum { COLUMN_DESCRIPTION };
|
|
||||||
|
|
||||||
static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box)
|
static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box)
|
||||||
{
|
{
|
||||||
const gchar *my_array[] = {"zero", "one", "two", "three", "four", "five",
|
const gchar *my_array[] = {"zero", "one", "two", "three", "four", "five",
|
||||||
|
@ -156,61 +83,32 @@ static void and_now_let_s_climb_that_tree (GtkWidget *in_that_box)
|
||||||
gtk_selection_model_selection_changed (my_selection_model, 0, 1);
|
gtk_selection_model_selection_changed (my_selection_model, 0, 1);
|
||||||
|
|
||||||
GtkListItemFactory *my_list_item_factory = gtk_signal_list_item_factory_new ();
|
GtkListItemFactory *my_list_item_factory = gtk_signal_list_item_factory_new ();
|
||||||
g_signal_connect (my_list_item_factory, "setup", G_CALLBACK (setup_cb), NULL);
|
g_signal_connect (my_list_item_factory, "setup", G_CALLBACK (on_setup_cb), NULL);
|
||||||
g_signal_connect (my_list_item_factory, "bind", G_CALLBACK (bind_cb), NULL);
|
g_signal_connect (my_list_item_factory, "bind", G_CALLBACK (on_bind_cb), NULL);
|
||||||
if (1) { g_signal_connect (my_selection_model, "selection-changed", G_CALLBACK (on_selection_change), NULL);
|
if (1) { g_signal_connect (my_selection_model, "selection-changed", G_CALLBACK (on_selection_change), NULL);}
|
||||||
g_signal_connect (my_list_item_factory, "unbind", G_CALLBACK (unbind_cb), NULL);
|
|
||||||
g_signal_connect (my_list_item_factory, "teardown", G_CALLBACK (teardown_cb), NULL); }
|
|
||||||
|
|
||||||
|
|
||||||
// GListModel *(* GtkTreeListModelCreateModelFunc) (GObject* item, gpointer user_data) // remplacerait gtk_string_list_new() ?
|
// GListModel *(* GtkTreeListModelCreateModelFunc) (GObject* item, gpointer user_data) // remplacerait gtk_string_list_new() ?
|
||||||
// https://docs.gtk.org/gtk4/callback.TreeListModelCreateModelFunc.html
|
// https://docs.gtk.org/gtk4/callback.TreeListModelCreateModelFunc.html
|
||||||
GListModel *the_root = my_selection_model; // my_string_list; // < both can be compiled
|
|
||||||
gboolean passthrough = 1, autoexpand = 1;
|
|
||||||
GtkTreeListModelCreateModelFunc create_func = NULL; // devrait remplacer gtk_string_list_new() ?? s'appliquer à chaque nouvel item ?
|
|
||||||
gpointer user_data = NULL;
|
|
||||||
GDestroyNotify user_destroy = NULL; // < Function to call to free user_data
|
|
||||||
GtkTreeListModel *my_tree_list_model = gtk_tree_list_model_new (the_root, passthrough, autoexpand, create_func, user_data, user_destroy);
|
|
||||||
|
|
||||||
// https://docs.gtk.org/gtk4/section-tree-widget.html
|
GtkTreeListModel *my_tree_list_model =
|
||||||
GtkListStore *my_list_store = gtk_list_store_new (1, G_TYPE_STRING);
|
gtk_tree_list_model_new (my_selection_model,
|
||||||
GtkTreeIter child_iter, parent_iter;
|
1,
|
||||||
gtk_tree_store_set (my_list_store, &parent_iter, "root", -1); // equiv next line ?
|
1,
|
||||||
gtk_tree_store_append (my_list_store, &parent_iter, "root"); // Acquire a top-level iterator
|
item_create_func,
|
||||||
gtk_tree_store_append (my_list_store, &child_iter, &parent_iter); // Acquire an iterator
|
NULL,
|
||||||
// The third argument to gtk_tree_store_append() is the parent iterator.
|
NULL);
|
||||||
|
|
||||||
GtkWidget *my_tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (my_list_store));
|
|
||||||
|
|
||||||
GtkCellRenderer *my_renderer = gtk_cell_renderer_text_new ();
|
|
||||||
gtk_tree_store_set (G_OBJECT (my_renderer), "foreground", "green", NULL);
|
|
||||||
gtk_list_store_set (G_OBJECT (my_renderer), "foreground", "red", NULL);
|
|
||||||
|
|
||||||
GtkTreeViewColumn *my_column = gtk_tree_view_column_new_with_attributes ("column title", my_renderer, NULL);
|
|
||||||
// the example is : column = gtk_tree_view_column_new_with_attributes ("Author", renderer, "text", AUTHOR_COLUMN, NULL);
|
|
||||||
//
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (my_tree_view), my_column); gtk_tree_store_set (my_list_store, &child_iter, my_column, "zero", -1);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (my_tree_view), my_column); gtk_tree_store_set (my_list_store, &child_iter, my_column, "one", -1);
|
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (my_tree_view), my_column); gtk_tree_store_set (my_list_store, &child_iter, my_column, "two", -1);
|
|
||||||
|
|
||||||
GtkWidget *my_expander = gtk_expander_new ("my_expander");
|
|
||||||
gtk_expander_set_child (my_expander, NULL); // *child); how to ?
|
|
||||||
on_activating_this_expander (my_expander, NULL); // gpointer user_data) The “activate” signal
|
|
||||||
printf("%s\n", gtk_expander_get_label (my_expander)); // < OK
|
|
||||||
|
|
||||||
// GtkWidget my_column = *gtk_column_view_new (my_selection_model);
|
|
||||||
/* 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_list_item_factory);
|
GtkWidget *my_list_view = gtk_list_view_new (GTK_SELECTION_MODEL (my_selection_model), my_list_item_factory);
|
||||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (in_that_box), my_tree_view); // use my_tree_view instead of my_list_view
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (in_that_box), my_list_view); // use my_tree_view instead of my_list_view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void on_activate_window_creation (GtkApplication *app, gpointer data) {
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void on_activate_window_creation (GtkApplication *app, gpointer data)
|
||||||
|
{
|
||||||
|
|
||||||
GtkWidget *that_window = gtk_application_window_new (gtk_application_new ("org.gtk.test", 0));
|
GtkWidget *that_window = gtk_application_window_new (gtk_application_new ("org.gtk.test", 0));
|
||||||
g_signal_connect (G_OBJECT (that_window), "destroy", G_CALLBACK(on_destroy), "exit(0) closes window\n");
|
g_signal_connect (G_OBJECT (that_window), "destroy", G_CALLBACK(on_destroy), "exit(0) closes window\n");
|
||||||
|
@ -236,7 +134,8 @@ void on_activate_window_creation (GtkApplication *app, gpointer data) {
|
||||||
//
|
//
|
||||||
// GtkColumnView
|
// GtkColumnView
|
||||||
//
|
//
|
||||||
// https://toshiocp.github.io/Gtk4-tutorial/sec29.html https://docs.gtk.org/gtk4/section-tree-widget.html
|
// https://toshiocp.github.io/Gtk4-tutorial/sec29.html
|
||||||
|
// https://docs.gtk.org/gtk4/section-list-widget.html
|
||||||
// https://www.typeerror.org/docs/gtk~4.0/ https://www.typeerror.org/docs/gtk~4.0/gtktreemodel
|
// https://www.typeerror.org/docs/gtk~4.0/ https://www.typeerror.org/docs/gtk~4.0/gtktreemodel
|
||||||
// https://docs.gtk.org/#user-interface https://docs.gtk.org/gtk4/ https://docs.gtk.org/glib/ https://docs.gtk.org/gio/
|
// https://docs.gtk.org/#user-interface https://docs.gtk.org/gtk4/ https://docs.gtk.org/glib/ https://docs.gtk.org/gio/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue