From 9898be565d0043b515e1c7d1250ddd92a1591b60 Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Fri, 24 Nov 2023 18:18:32 +0100 Subject: [PATCH] WIP: Now : how to display in our window (/panel) what was stored in these models ? --- src/ui/tree.c | 177 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 170 insertions(+), 7 deletions(-) diff --git a/src/ui/tree.c b/src/ui/tree.c index 4d8f243..ed1838e 100644 --- a/src/ui/tree.c +++ b/src/ui/tree.c @@ -29,7 +29,8 @@ #include "../../include/ui.h" GtkListStore *list_store; -GtkTreeIter iter; +GtkTreeStore *tree_store; +GtkTreeIter iter, child; /*********************************************************** * * @@ -40,7 +41,6 @@ GtkTreeIter iter; void traverse_list_store (GtkListStore *liststore) { - GtkTreeIter iter; gboolean valid; g_return_if_fail ( liststore != NULL ); @@ -74,7 +74,6 @@ void onTreeViewRowActivated (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *col, gpointer userdata) { - GtkTreeIter iter; GtkTreeModel *model; model = gtk_tree_view_get_model(view); @@ -101,12 +100,176 @@ tree_c_printing_test(void) gtk_list_store_append(list_store, &iter); gtk_list_store_append(list_store, &iter); + tree_store = gtk_tree_store_new(1, G_TYPE_STRING); + + /* Append an empty top-level row to the tree store. + * Iter will point to the new row */ + gtk_tree_store_append(tree_store, &iter, NULL); + + /* Append another empty top-level row to the tree store. + * Iter will point to the new row */ + gtk_tree_store_append(tree_store, &iter, NULL); + + /* Append a child to the row we just added. + * Child will point to the new row */ + gtk_tree_store_append(tree_store, &child, &iter); + + /* Get the first row, and add a child to it as well (could have been done + * right away earlier of course, this is just for demonstration purposes) */ + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(tree_store), &iter)) + { + /* Child will point to new row */ + gtk_tree_store_append(tree_store, &child, &iter); + } + else + { + g_error("Oops, we should have a first row in the tree store!\n"); + } + + printf("tree_c_printing_test() \ ---------------------------------------------------------\n\n\ (https://en.wikibooks.org/wiki/GTK (modulo) 2B_By_Example/Tree_View/Tree_Models)\n\n\ -cf. tuto : gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_UINT) - (cf. line 69)\n\ - creates a new list store with two columns.\n\ -Column 0 stores a string and column 1 stores an unsigned integer for each row.\n\ -Three empty lines have been added to the model - (cf. line 100).\n"); +cf. tuto : gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_UINT); - (cf. line 69)\n\ + creates a new list store with two columns.\n\n\ + gtk_tree_store_new(1, G_TYPE_STRING); - (cf. line 108)\n\ + creates a new tree store with one column.\n\n\ +Now : how to display in our window (/panel) what was stored in these models ?.\n\ + (see the commented code at the end)\n"); } +/* +https://stackoverflow.com/questions/51002454/how-to-list-all-the-rows-of-a-gtk-treeview + + +using System; +using System.Collections; +using Gtk; + +public class Actress +{ + public string Name; + public string Place; + public int Year; + + public Actress(string name, string place, int year) + { + Name = name; + Place = place; + Year = year; + } +} + +public class SharpApp : Window +{ + ListStore store; + Statusbar statusbar; + + enum Column + { + Name, + Place, + Year + } + + Actress[] actresses = + { + new Actress("Jessica Alba", "Pomona", 1981), + new Actress("Sigourney Weaver", "New York", 1949), + new Actress("Angelina Jolie", "Los Angeles", 1975), + new Actress("Natalie Portman", "Jerusalem", 1981), + new Actress("Rachel Weissz", "London", 1971), + new Actress("Scarlett Johansson", "New York", 1984) + }; + + public SharpApp() : base ("ListView") + { + BorderWidth = 8; + + SetDefaultSize(350, 250); + SetPosition(WindowPosition.Center); + DeleteEvent += delegate { Application.Quit(); }; + + VBox vbox = new VBox(false, 8); + + + ScrolledWindow sw = new ScrolledWindow(); + sw.ShadowType = ShadowType.EtchedIn; + sw.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); + vbox.PackStart(sw, true, true, 0); + + store = CreateModel(); + + TreeView treeView = new TreeView(store); + treeView.RulesHint = true; + treeView.RowActivated += OnRowActivated; + sw.Add(treeView); + + AddColumns(treeView); + + statusbar = new Statusbar(); + + vbox.PackStart(statusbar, false, false, 0); + + Add(vbox); + ShowAll(); + } + + void OnRowActivated (object sender, RowActivatedArgs args) { + + TreeIter iter; + TreeView view = (TreeView) sender; + + if (view.Model.GetIter(out iter, args.Path)) { + string row = (string) view.Model.GetValue(iter, (int) Column.Name ); + row += ", " + (string) view.Model.GetValue(iter, (int) Column.Place ); + row += ", " + view.Model.GetValue(iter, (int) Column.Year ); + statusbar.Push(0, row); + } + // *** if I can dump treeview to the console here I'll be happy *** + // *** I'd prefer a foreach or do/while *** + } + + void AddColumns(TreeView treeView) + { + CellRendererText rendererText = new CellRendererText(); + TreeViewColumn column = new TreeViewColumn("Name", rendererText, + "text", Column.Name); + column.SortColumnId = (int) Column.Name; + treeView.AppendColumn(column); + + rendererText = new CellRendererText(); + column = new TreeViewColumn("Place", rendererText, + "text", Column.Place); + column.SortColumnId = (int) Column.Place; + treeView.AppendColumn(column); + + rendererText = new CellRendererText(); + column = new TreeViewColumn("Year", rendererText, + "text", Column.Year); + column.SortColumnId = (int) Column.Year; + treeView.AppendColumn(column); + } + + + ListStore CreateModel() + { + ListStore store = new ListStore( typeof(string), + typeof(string), typeof(int) ); + + foreach (Actress act in actresses) { + store.AppendValues(act.Name, act.Place, act.Year ); + } + + return store; + } + + public static void Main() + { + Application.Init(); + new SharpApp(); + Application.Run(); + } +} +*/ +