From a2dca7cfac61536ae67dacbc7ac47064ee349075 Mon Sep 17 00:00:00 2001 From: Toshio Sekiya Date: Sun, 14 Mar 2021 00:14:50 +0900 Subject: [PATCH] Add section 24. --- Readme.md | 1 + doc/GFile_example/readme.md | 4 +- doc/GFile_example/readme.src.md | 4 +- gfm/sec14.md | 2 +- gfm/sec2.md | 4 +- gfm/sec20.md | 2 +- gfm/sec24.md | 327 ++++++++++++++++++++++++++++++++ image/gtklistviewitem.png | Bin 0 -> 30532 bytes image/gtklistviewitem.xcf | Bin 0 -> 52454 bytes image/list.png | Bin 0 -> 29514 bytes image/list.xcf | Bin 0 -> 52309 bytes image/list1.png | Bin 0 -> 8676 bytes src/misc/list1.c | 76 ++++++++ src/misc/list2.c | 60 ++++++ src/sec14.src.md | 2 +- src/sec2.src.md | 4 +- src/sec20.src.md | 2 +- src/sec24.src.md | 205 ++++++++++++++++++++ 18 files changed, 681 insertions(+), 12 deletions(-) create mode 100644 gfm/sec24.md create mode 100644 image/gtklistviewitem.png create mode 100644 image/gtklistviewitem.xcf create mode 100644 image/list.png create mode 100644 image/list.xcf create mode 100644 image/list1.png create mode 100644 src/misc/list1.c create mode 100644 src/misc/list2.c create mode 100644 src/sec24.src.md diff --git a/Readme.md b/Readme.md index 6c823f5..d8cd036 100644 --- a/Readme.md +++ b/Readme.md @@ -37,3 +37,4 @@ You can read it without download. 1. [GtkDrawingArea and Cairo](gfm/sec21.md) 1. [Combine GtkDrawingArea and TfeTextView](gfm/sec22.md) 1. [Tiny turtle graphics interpreter](gfm/sec23.md) +1. [List](gfm/sec24.md) diff --git a/doc/GFile_example/readme.md b/doc/GFile_example/readme.md index b825aec..5de3e78 100644 --- a/doc/GFile_example/readme.md +++ b/doc/GFile_example/readme.md @@ -198,9 +198,9 @@ For example, gssize size = g_input_stream_read (G_INPUT_STREAM (istream), void *buffer, gsize count, GCancellable *cancellable, GError **error); ~~~ -This function reads data from `istream` and put them into `buffer`. +This function reads data from `istream` and puts them into `buffer`. -GDtaInputStream is used often. +GDataInputStream is used often. It can read structured data such as sized data (byte, int16, int32 and int64) and lines (new line terminated string). For example, diff --git a/doc/GFile_example/readme.src.md b/doc/GFile_example/readme.src.md index 1c46a30..97015a2 100644 --- a/doc/GFile_example/readme.src.md +++ b/doc/GFile_example/readme.src.md @@ -145,9 +145,9 @@ For example, gssize size = g_input_stream_read (G_INPUT_STREAM (istream), void *buffer, gsize count, GCancellable *cancellable, GError **error); ~~~ -This function reads data from `istream` and put them into `buffer`. +This function reads data from `istream` and puts them into `buffer`. -GDtaInputStream is used often. +GDataInputStream is used often. It can read structured data such as sized data (byte, int16, int32 and int64) and lines (new line terminated string). For example, diff --git a/gfm/sec14.md b/gfm/sec14.md index 58a0863..3ad6f7c 100644 --- a/gfm/sec14.md +++ b/gfm/sec14.md @@ -120,7 +120,7 @@ textview {color: yellow; ...} ~~~ Class, ID and some other things can be applied to the selector like Web CSS. -Refer [GTK4 API reference](https://gnome.pages.gitlab.gnome.org/gtk/gtk/theming.html) for further information. +Refer [GTK4 API reference](https://developer.gnome.org/gtk4/stable/theming.html) for further information. In line 30, the CSS is a string. diff --git a/gfm/sec2.md b/gfm/sec2.md index a01cc6f..676d67a 100644 --- a/gfm/sec2.md +++ b/gfm/sec2.md @@ -21,7 +21,7 @@ I installed gtk4 under the directory `$HOME/local`. This is a private user area. If you want to install it in the system area, `/opt/gtk4` is one of good choices. -[Gtk4 API Reference](https://gnome.pages.gitlab.gnome.org/gtk/gtk/gtk-building.html) gives an installation example to `/opt/gtk4`. +[Gtk4 API Reference](https://developer.gnome.org/gtk4/stable/gtk-building.html) gives an installation example to `/opt/gtk4`. Don't install it to `/usr/local` which is the default. It is used by Ubuntu applications, which are not build on gtk4. @@ -136,7 +136,7 @@ Compile and install it. $ ninja -C _build $ ninja -C _build install -If you want to know more information, refer to [Gtk4 reference manual](https://gnome.pages.gitlab.gnome.org/gtk/gtk/gtk-building.html). +If you want to know more information, refer to [Gtk4 reference manual](https://developer.gnome.org/gtk4/stable/gtk-building.html). ## Modify env.sh diff --git a/gfm/sec20.md b/gfm/sec20.md index 345d58c..62699e7 100644 --- a/gfm/sec20.md +++ b/gfm/sec20.md @@ -442,7 +442,7 @@ This XML file is the same as before except template tag. There are three public functions. The function `tfe_window_notebook_page_new` creates a new notebook page. -This is a wrapper function of `notebook_page_new`. +This is a wrapper function for `notebook_page_new`. It is called by GtkApplication object. The function `tfe_window_notebook_page_new_with_files` creates notebook pages with a contents read from the given files. The function `tfe_window_new` creates a TfeWindow instance. diff --git a/gfm/sec24.md b/gfm/sec24.md new file mode 100644 index 0000000..b865c66 --- /dev/null +++ b/gfm/sec24.md @@ -0,0 +1,327 @@ +Up: [Readme.md](../Readme.md), Prev: [Section 23](sec23.md) + +# List + +Gtk4 has added new list objects GtkListView, GtkGridView and GtkColumnView. +The new feature is described in the sections "GListModel support" and "List-based widgets" at the top of [the third chapter of the API reference](https://developer.gnome.org/gtk4/stable/gtkobjects.html). + +Gtk4 has other means to implement lists. +They are GtkListBox and GtkTreeView which are took over from Gtk3. +There's an article in [Gtk Development blog](https://blog.gtk.org/2020/06/07/scalable-lists-in-gtk-4/) about list widgets by Matthias Clasen. +He described why GtkListView are developed to replace GtkListBox and GtkTreeView. + +I want to explain GtkListView and its related objects in this tutorial. + +## Outline + +A list is a sequential data structure. +For example, an ordered string sequence "one", "two", "three", "four" is a list. +Each element of the list is called item. +A list is like an array, but in many cases it is implemented with pointers which point to the next item of the list. +And it has a start point. +So, each item can be referred by the index of the item (first item, second item, ..., nth item, ...). +There are two cases. +One is the index starts from one (one-based) and the other is it starts from zero (zero-based). + +Gio provides GListModel interface. +It is a zero-based list of the same type of GObject objects, or objects that implement the same interface. +An object implements GListModel is usually not a widget. +So, the list is not displayed on the screen directly. +There's another object GtkListView which is a widget to display the list. +The items in the list need to be connected to the items in GtkListView. +GtkListItemFactory object maps items in the list to GListView. + +![List](../image/list.png) + +The instruction to build the whole list related objects is: + +1. Implement the list object which implements GListModel. +2. Build widgets and put GtkListView as a child of GtkScrolledWindow. +3. Set GtkListItemFactory. + +## GListModel + +If you want to make a list of strings with GListModel, for example, "one", "two", "three", "four", note that strings can't be items of the list. +Because GListModel is a list of GObject objects and strings aren't GObject objects. +So, you need a wrapper which is a gobject and contains a string. +GtkStringObject is the wrapper object and GStringList, implements GListModel, is a list of GtkStringObject. + +~~~C +char *array[] = {"one", "two", "three", "four", NULL}; +GtkStringList *stringlist = gtk_string_list_new ((const char * const *) array); +~~~ + +The function `gtk_string_list_new` creates GtkStringList object. +Its items are GtkStringObject objects which contain the strings "one", "two", "three" and "four". +There are functions to add items to the list or remove items from the list. + +- `gtk_string_list_append` appends an item to the list +- `gtk_string_list_remove` removes an item from the list +- `gtk_string_list_get_string` gets a string in the list + +See [API document](https://developer.gnome.org/gtk4/stable/GtkStringList.html) for the further information. + +I'll explain the other list objects later. + +## GtkSelectionModel + +GtkSelectionModel is an interface to support for selections. +Thanks to this model, user can select items by clicking on them. +It is implemented by GtkMultiSelection, GtkNoSelection and GtkSingleSelection objects. +These three objects are usually enough to build an application. +They are created with GListModel. +You can also create them alone and add GListModel later. + +- GtkMultiSelection supports multiple selection. +- GtkNoSelection supports no selection. This is a wrapper to GListModel when GtkSelectionModel is needed. +- GtkSingleSelection supports single selection. + +## GtkListView + +GtkListView is a widget to show GListModel items. +GtkListViewItem is used by GtkListView to represent items of a list model. +But, GtkListViewItem itself is not a widget, so a user needs to set a widget, for example GtkLabel, as a child of GtkListView to display an item of the list model. +"item" property of GtkListViewItem points an object that belongs to the list model. + +![GtkListViewItem](../image/gtklistviewitem.png) + +In case the number of items is very big, for example more than a thousand, GtkListViewItem is recycled and connected to another item which is newly displayed. +This recycle makes the number of GtkListViewItem objects fairly small, less than 200. +This is very effective to restrain the growth of memory consumption so that GListModel can contain lots of items, for example, more than a million items. + +## GtkListItemFactory + +GtkListItemFactory creates or recycles GtkListViewItem and connects it with an item of the list model. +There are two child objects of this factory, GtkSignalListItemFactory and GtkBuilderListItemFactory. + +### GtkSignalListItemFactory + +GtkSignalListItemFactory provides signals for users to configure a GtkListViewItem object. +There are four signals. + +1. "setup" is emitted to set up GtkListViewItem object. +A user sets its child widget in the handler. +For example, creates a GtkLabel widget and sets the child property of GtkListViewItem object to it. +This setting is kept even the GtkListViewItem object is recycled (to bind to another item of GModelList). +2. "bind" is emitted to bind an item in the list model to the widget. +For example, a user gets the item object from "item" property of the GtkListViewItem object. +Then gets the string of the item and sets the label property of the GtkLabel object with the string. +This signal is emitted when the GtkListViewItem is newly created and set up, recycled or some changes has happened to the item of the list. +3. "unbind" is emitted to unbind an item. +A user undoes everything done in step 2 in the signal handler. +If some object are created in step 2, they must be destroyed. +4. "teardown" is emitted to undo everything done in step 1. +So, the widget created in step 1 must be destroyed. +After this signal, the list item will be destroyed. + +The following program `list1.c` shows the list of strings "one", "two", "three" and "four". +GtkNoSelection is used, so user can't select any item. + +~~~C + 1 #include + 2 + 3 static void + 4 setup_cb (GtkListItemFactory *factory, GtkListItem *listitem, gpointer user_data) { + 5 GtkWidget *lb = gtk_label_new (""); + 6 gtk_list_item_set_child (listitem, lb); + 7 } + 8 + 9 static void +10 bind_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) { +11 GtkWidget *lb = gtk_list_item_get_child (listitem); +12 GtkStringObject *strobj = gtk_list_item_get_item (listitem); +13 const char *text = gtk_string_object_get_string (strobj); +14 +15 gtk_label_set_text (GTK_LABEL (lb), text); +16 } +17 +18 static void +19 unbind_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) { +20 GtkWidget *lb = gtk_list_item_get_child (listitem); +21 gtk_label_set_text (GTK_LABEL (lb), ""); +22 } +23 +24 static void +25 teardown_cb (GtkListItemFactory *factory, GtkListItem *listitem, gpointer user_data) { +26 gtk_list_item_set_child (listitem, NULL); +27 /* When the child of listitem is set to NULL, the reference to GtkLabel will be released and lb will be destroyed. */ +28 /* Therefore, g_object_unref () for the GtkLabel object doesn't need in the user code. */ +29 } +30 +31 /* ----- activate, open, startup handlers ----- */ +32 static void +33 tfe_activate (GApplication *application) { +34 GtkApplication *app = GTK_APPLICATION (application); +35 GtkWidget *win = gtk_application_window_new (app); +36 gtk_window_set_default_size (GTK_WINDOW (win), 600, 400); +37 GtkWidget *scr = gtk_scrolled_window_new (); +38 gtk_window_set_child (GTK_WINDOW (win), scr); +39 +40 char *array[] = { +41 "one", "two", "three", "four", NULL +42 }; +43 GtkStringList *sl = gtk_string_list_new ((const char * const *) array); +44 GtkNoSelection *ns = gtk_no_selection_new (G_LIST_MODEL (sl)); +45 +46 GtkListItemFactory *factory = gtk_signal_list_item_factory_new (); +47 g_signal_connect (factory, "setup", G_CALLBACK (setup_cb), NULL); +48 g_signal_connect (factory, "bind", G_CALLBACK (bind_cb), NULL); +49 g_signal_connect (factory, "unbind", G_CALLBACK (unbind_cb), NULL); +50 g_signal_connect (factory, "teardown", G_CALLBACK (teardown_cb), NULL); +51 +52 GtkWidget *lv = gtk_list_view_new (GTK_SELECTION_MODEL (ns), factory); +53 gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scr), lv); +54 gtk_widget_show (win); +55 } +56 +57 static void +58 tfe_startup (GApplication *application) { +59 } +60 +61 /* ----- main ----- */ +62 int +63 main (int argc, char **argv) { +64 GtkApplication *app; +65 int stat; +66 +67 app = gtk_application_new ("com.github.ToshioCP.list1", G_APPLICATION_FLAGS_NONE); +68 +69 g_signal_connect (app, "startup", G_CALLBACK (tfe_startup), NULL); +70 g_signal_connect (app, "activate", G_CALLBACK (tfe_activate), NULL); +71 +72 stat =g_application_run (G_APPLICATION (app), argc, argv); +73 g_object_unref (app); +74 return stat; +75 } +76 +~~~ + +The file `list1.c` is located under the directory [src/misc](../src/misc). +Make a shell script below and save it to $HOME/local/bin/comp (comp is the filename). + +~~~Shell +gcc `pkg-config --cflags gtk4` $1.c `pkg-config --libs gtk4` +~~~ + +Change the current directory to the directory includes `list1.c` and type as follows. + +~~~ +$ chmod 755 $HOME/local/bin/comp +$ comp list1 +$ ./a.out +~~~ + +Then, `list1.c` has been compiled and executed. + +![list1](../image/list1.png) + +I think the program is not so difficult. +If you feel some difficulty, read this section again, especially GtkSignalListItemFactory subsubsection. + +### GtkBuilderListItemFactory + +GtkBuilderListItemFactory is another GtkListItemFactory. +Its behavior is defined with ui file. + +~~~xml + + + +~~~ + +Template tag is used to define GtkListItem. +And its child property is GtkLabel object. +The factory sees this template and creates GtkLabel and sets the child property of GtkListItem. +This is the same as what setup handler of GtkSignalListItemFactory did. + +Then, bind the label property of GtkLabel to string property of GtkStringObject. +The string object is referred to by item property of GtkListItem. +So, the lookup tag is like this: + +~~~ +string <- GtkStringObject <- item <- GtkListItem +~~~ + +The source code is as follows. +Its name is `list2.c` and located under [src/misc](../src/misc) directory. + +~~~C + 1 #include + 2 + 3 /* ----- activate, open, startup handlers ----- */ + 4 static void + 5 tfe_activate (GApplication *application) { + 6 GtkApplication *app = GTK_APPLICATION (application); + 7 GtkWidget *win = gtk_application_window_new (app); + 8 gtk_window_set_default_size (GTK_WINDOW (win), 600, 400); + 9 GtkWidget *scr = gtk_scrolled_window_new (); +10 gtk_window_set_child (GTK_WINDOW (win), scr); +11 +12 char *array[] = { +13 "one", "two", "three", "four", NULL +14 }; +15 GtkStringList *sl = gtk_string_list_new ((const char * const *) array); +16 GtkSingleSelection *ss = gtk_single_selection_new (G_LIST_MODEL (sl)); +17 +18 const char *ui_string = +19 "" +20 "" +31 "" +32 ; +33 GBytes *gbytes = g_bytes_new_static (ui_string, strlen (ui_string)); +34 GtkListItemFactory *factory = gtk_builder_list_item_factory_new_from_bytes (NULL, gbytes); +35 +36 GtkWidget *lv = gtk_list_view_new (GTK_SELECTION_MODEL (ss), factory); +37 gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scr), lv); +38 gtk_widget_show (win); +39 } +40 +41 static void +42 tfe_startup (GApplication *application) { +43 } +44 +45 /* ----- main ----- */ +46 int +47 main (int argc, char **argv) { +48 GtkApplication *app; +49 int stat; +50 +51 app = gtk_application_new ("com.github.ToshioCP.list2", G_APPLICATION_FLAGS_NONE); +52 +53 g_signal_connect (app, "startup", G_CALLBACK (tfe_startup), NULL); +54 g_signal_connect (app, "activate", G_CALLBACK (tfe_activate), NULL); +55 +56 stat =g_application_run (G_APPLICATION (app), argc, argv); +57 g_object_unref (app); +58 return stat; +59 } +60 +~~~ + +No signal handler is needed for GtkBulderListItemFactory. +GtkSingleSelection is used, so user can select one item at a time. + +Because this is a small program, the ui data is given as strings. +However, generally, ui file is better than string and using resource compiler is the best choice. + +Up: [Readme.md](../Readme.md), Prev: [Section 23](sec23.md) diff --git a/image/gtklistviewitem.png b/image/gtklistviewitem.png new file mode 100644 index 0000000000000000000000000000000000000000..c18fdc12a4718d2f71c61450eb2f693757de3035 GIT binary patch literal 30532 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 T-TnPKxnR`&TKiJ>nqK-3I8ULA literal 0 HcmV?d00001 diff --git a/image/gtklistviewitem.xcf b/image/gtklistviewitem.xcf new file mode 100644 index 0000000000000000000000000000000000000000..bfdc01a92425a5a05d3bffd521688634f7662dc8 GIT binary patch literal 52454 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 G`u_va1>C9t literal 0 HcmV?d00001 diff --git a/image/list.png b/image/list.png new file mode 100644 index 0000000000000000000000000000000000000000..99e282d8b70a20956cf2b06508e8f16d04d4f637 GIT binary patch literal 29514 zcmc$`cU;fy-#-3osHB|;EeWYqO3^Mw$Vx>ygOh27+%v8 zUPb%q+TE`olrKaWN;qfLzE8D1^G@&G7K1OFjLY3p9ol}R8Vsa*9b70ruVH+wTQQCE zNoLUc-5d`e++a@540~X-@%@f~>RYM{rj1fzI%|(ExyH9FQN!=oOwnS8t9{y!&MQ&N z576dI-5A}%e8uI`k&+7qq5KKXwDfV8#Pfe<$X$v)Si6RQvkN`TIl7gN{QJMsNxJ$z z+^8vUag@21>*~&q`D+E6*tO1GT9C`I|Lqu~N*(Jrm|@tyo&LxA%2ShWuEwtI3u!i! zgN&*s4&mkXs@a$p1~VOPEozbc_aHyv7Jjqz{O)6p6eYQi{H3`VujYbZGCJ+qzmu_x zj)j#=X&1|&5q`DGX{Vu+roEk=#W^QR)4{^j$>Ow-tBsSjkoKPahmKxiTS-wu)E+Gj z{fo`NTHQ|WpI&4fYP7pmUTr876l_|zFM{FguJBUPO$8Gc5<6dPsEx?3x^4GJV!HO_ z!vc$IS@)RwlCMZ`*6ynz$07Xphe1e-{Jf*C{PRp2roRtwq1OKQhqYML|Hs4s zzTAx3@%QEbKK#GD`@awWFYo^E!~e^>|NHR2_x}In-T%FK(Eo4X$juoP7ZuS6hcWrg zkFS*V!vK;yycrc0IMA43{^jX@-fidj+{gRiB0tR-wo z8+lKNss8T5mxO~^p3@HW^z_ST7mEBCYkkhz*qAOZ%u8?GDj|3M$`$(M%a^NbYCb;F zlOxfi`)#D7`{TWu`ua4-#!Ep#{gMs79Q8DlgY9KE*J^Tba8M^soM?INyv)YNru@?< zZA;4yv8rBI{TSJWH*8?=V_@BJ=+L3ytvhz?s44LB$h$cFCv9GOtdrO14sL| zo>pLYEBAYS*=>)OmW3%RlkVoIh=?nzWGy@Jtf7&S;%lp9A3PZ=JaJ-`LXrlYgz=}J5C(px%TZE=oUQBkqCDQn%I_Cl#I)7zDl zG)1_+e|={4zTn`VJw*>S15GR}{QtDRG5^(+)s*XKl{H`CAi(qWh;Ud(ZM@F;^XK0- z8vC$%d3ntZm9TI3n2^YR_DpBLPi4d=j$kc}XW8{N+cKT{4v+PHVZ_9hCFvz#JSi&Z z`t|o1zb)rG)UU0UV`gOIQ$KU&Ok~u(&d$?Qv$N*aF$y)GKNppUt^5Ax≠d_Q<%n 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 literal 0 HcmV?d00001 diff --git a/image/list.xcf b/image/list.xcf new file mode 100644 index 0000000000000000000000000000000000000000..cec6fc487c0daa3beb550a2948855bacae95aa47 GIT binary patch literal 52309 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 literal 0 HcmV?d00001 diff --git a/image/list1.png b/image/list1.png new file mode 100644 index 0000000000000000000000000000000000000000..df809ea9b739fce51edee5b8973cec33722801c6 GIT binary patch literal 8676 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 literal 0 HcmV?d00001 diff --git a/src/misc/list1.c b/src/misc/list1.c new file mode 100644 index 0000000..a38ec4d --- /dev/null +++ b/src/misc/list1.c @@ -0,0 +1,76 @@ +#include + +static void +setup_cb (GtkListItemFactory *factory, GtkListItem *listitem, gpointer user_data) { + GtkWidget *lb = gtk_label_new (""); + gtk_list_item_set_child (listitem, lb); +} + +static void +bind_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) { + GtkWidget *lb = gtk_list_item_get_child (listitem); + GtkStringObject *strobj = gtk_list_item_get_item (listitem); + const char *text = gtk_string_object_get_string (strobj); + + gtk_label_set_text (GTK_LABEL (lb), text); +} + +static void +unbind_cb (GtkSignalListItemFactory *self, GtkListItem *listitem, gpointer user_data) { + GtkWidget *lb = gtk_list_item_get_child (listitem); + gtk_label_set_text (GTK_LABEL (lb), ""); +} + +static void +teardown_cb (GtkListItemFactory *factory, GtkListItem *listitem, gpointer user_data) { + gtk_list_item_set_child (listitem, NULL); +/* When the child of listitem is set to NULL, the reference to GtkLabel will be released and lb will be destroyed. */ +/* Therefore, g_object_unref () for the GtkLabel object doesn't need in the user code. */ +} + +/* ----- activate, open, startup handlers ----- */ +static void +tfe_activate (GApplication *application) { + GtkApplication *app = GTK_APPLICATION (application); + GtkWidget *win = gtk_application_window_new (app); + gtk_window_set_default_size (GTK_WINDOW (win), 600, 400); + GtkWidget *scr = gtk_scrolled_window_new (); + gtk_window_set_child (GTK_WINDOW (win), scr); + + char *array[] = { + "one", "two", "three", "four", NULL + }; + GtkStringList *sl = gtk_string_list_new ((const char * const *) array); + GtkNoSelection *ns = gtk_no_selection_new (G_LIST_MODEL (sl)); + + GtkListItemFactory *factory = gtk_signal_list_item_factory_new (); + g_signal_connect (factory, "setup", G_CALLBACK (setup_cb), NULL); + g_signal_connect (factory, "bind", G_CALLBACK (bind_cb), NULL); + g_signal_connect (factory, "unbind", G_CALLBACK (unbind_cb), NULL); + g_signal_connect (factory, "teardown", G_CALLBACK (teardown_cb), NULL); + + GtkWidget *lv = gtk_list_view_new (GTK_SELECTION_MODEL (ns), factory); + gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scr), lv); + gtk_widget_show (win); +} + +static void +tfe_startup (GApplication *application) { +} + +/* ----- main ----- */ +int +main (int argc, char **argv) { + GtkApplication *app; + int stat; + + app = gtk_application_new ("com.github.ToshioCP.list1", G_APPLICATION_FLAGS_NONE); + + g_signal_connect (app, "startup", G_CALLBACK (tfe_startup), NULL); + g_signal_connect (app, "activate", G_CALLBACK (tfe_activate), NULL); + + stat =g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + return stat; +} + diff --git a/src/misc/list2.c b/src/misc/list2.c new file mode 100644 index 0000000..54b9a80 --- /dev/null +++ b/src/misc/list2.c @@ -0,0 +1,60 @@ +#include + +/* ----- activate, open, startup handlers ----- */ +static void +tfe_activate (GApplication *application) { + GtkApplication *app = GTK_APPLICATION (application); + GtkWidget *win = gtk_application_window_new (app); + gtk_window_set_default_size (GTK_WINDOW (win), 600, 400); + GtkWidget *scr = gtk_scrolled_window_new (); + gtk_window_set_child (GTK_WINDOW (win), scr); + + char *array[] = { + "one", "two", "three", "four", NULL + }; + GtkStringList *sl = gtk_string_list_new ((const char * const *) array); + GtkSingleSelection *ss = gtk_single_selection_new (G_LIST_MODEL (sl)); + + const char *ui_string = +"" + "" +"" +; + GBytes *gbytes = g_bytes_new_static (ui_string, strlen (ui_string)); + GtkListItemFactory *factory = gtk_builder_list_item_factory_new_from_bytes (NULL, gbytes); + + GtkWidget *lv = gtk_list_view_new (GTK_SELECTION_MODEL (ss), factory); + gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scr), lv); + gtk_widget_show (win); +} + +static void +tfe_startup (GApplication *application) { +} + +/* ----- main ----- */ +int +main (int argc, char **argv) { + GtkApplication *app; + int stat; + + app = gtk_application_new ("com.github.ToshioCP.list2", G_APPLICATION_FLAGS_NONE); + + g_signal_connect (app, "startup", G_CALLBACK (tfe_startup), NULL); + g_signal_connect (app, "activate", G_CALLBACK (tfe_activate), NULL); + + stat =g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + return stat; +} + diff --git a/src/sec14.src.md b/src/sec14.src.md index b3d355e..1977492 100644 --- a/src/sec14.src.md +++ b/src/sec14.src.md @@ -81,7 +81,7 @@ textview {color: yellow; ...} ~~~ Class, ID and some other things can be applied to the selector like Web CSS. -Refer [GTK4 API reference](https://gnome.pages.gitlab.gnome.org/gtk/gtk/theming.html) for further information. +Refer [GTK4 API reference](https://developer.gnome.org/gtk4/stable/theming.html) for further information. In line 30, the CSS is a string. diff --git a/src/sec2.src.md b/src/sec2.src.md index 161289d..b4335c8 100644 --- a/src/sec2.src.md +++ b/src/sec2.src.md @@ -19,7 +19,7 @@ I installed gtk4 under the directory `$HOME/local`. This is a private user area. If you want to install it in the system area, `/opt/gtk4` is one of good choices. -[Gtk4 API Reference](https://gnome.pages.gitlab.gnome.org/gtk/gtk/gtk-building.html) gives an installation example to `/opt/gtk4`. +[Gtk4 API Reference](https://developer.gnome.org/gtk4/stable/gtk-building.html) gives an installation example to `/opt/gtk4`. Don't install it to `/usr/local` which is the default. It is used by Ubuntu applications, which are not build on gtk4. @@ -134,7 +134,7 @@ Compile and install it. $ ninja -C _build $ ninja -C _build install -If you want to know more information, refer to [Gtk4 reference manual](https://gnome.pages.gitlab.gnome.org/gtk/gtk/gtk-building.html). +If you want to know more information, refer to [Gtk4 reference manual](https://developer.gnome.org/gtk4/stable/gtk-building.html). ## Modify env.sh diff --git a/src/sec20.src.md b/src/sec20.src.md index ad8be17..f0e86be 100644 --- a/src/sec20.src.md +++ b/src/sec20.src.md @@ -174,7 +174,7 @@ tfe7/tfewindow.h There are three public functions. The function `tfe_window_notebook_page_new` creates a new notebook page. -This is a wrapper function of `notebook_page_new`. +This is a wrapper function for `notebook_page_new`. It is called by GtkApplication object. The function `tfe_window_notebook_page_new_with_files` creates notebook pages with a contents read from the given files. The function `tfe_window_new` creates a TfeWindow instance. diff --git a/src/sec24.src.md b/src/sec24.src.md new file mode 100644 index 0000000..75125b2 --- /dev/null +++ b/src/sec24.src.md @@ -0,0 +1,205 @@ +# List + +Gtk4 has added new list objects GtkListView, GtkGridView and GtkColumnView. +The new feature is described in the sections "GListModel support" and "List-based widgets" at the top of [the third chapter of the API reference](https://developer.gnome.org/gtk4/stable/gtkobjects.html). + +Gtk4 has other means to implement lists. +They are GtkListBox and GtkTreeView which are took over from Gtk3. +There's an article in [Gtk Development blog](https://blog.gtk.org/2020/06/07/scalable-lists-in-gtk-4/) about list widgets by Matthias Clasen. +He described why GtkListView are developed to replace GtkListBox and GtkTreeView. + +I want to explain GtkListView and its related objects in this tutorial. + +## Outline + +A list is a sequential data structure. +For example, an ordered string sequence "one", "two", "three", "four" is a list. +Each element of the list is called item. +A list is like an array, but in many cases it is implemented with pointers which point to the next item of the list. +And it has a start point. +So, each item can be referred by the index of the item (first item, second item, ..., nth item, ...). +There are two cases. +One is the index starts from one (one-based) and the other is it starts from zero (zero-based). + +Gio provides GListModel interface. +It is a zero-based list of the same type of GObject objects, or objects that implement the same interface. +An object implements GListModel is usually not a widget. +So, the list is not displayed on the screen directly. +There's another object GtkListView which is a widget to display the list. +The items in the list need to be connected to the items in GtkListView. +GtkListItemFactory object maps items in the list to GListView. + +![List](../image/list.png){width=10cm height=7.5cm} + +The instruction to build the whole list related objects is: + +1. Implement the list object which implements GListModel. +2. Build widgets and put GtkListView as a child of GtkScrolledWindow. +3. Set GtkListItemFactory. + +## GListModel + +If you want to make a list of strings with GListModel, for example, "one", "two", "three", "four", note that strings can't be items of the list. +Because GListModel is a list of GObject objects and strings aren't GObject objects. +So, you need a wrapper which is a gobject and contains a string. +GtkStringObject is the wrapper object and GStringList, implements GListModel, is a list of GtkStringObject. + +@@@if gfm +~~~C +@@@elif html +~~~{.C} +@@@elif latex +~~~{.C} +@@@else +~~~ +@@@end +char *array[] = {"one", "two", "three", "four", NULL}; +GtkStringList *stringlist = gtk_string_list_new ((const char * const *) array); +~~~ + +The function `gtk_string_list_new` creates GtkStringList object. +Its items are GtkStringObject objects which contain the strings "one", "two", "three" and "four". +There are functions to add items to the list or remove items from the list. + +- `gtk_string_list_append` appends an item to the list +- `gtk_string_list_remove` removes an item from the list +- `gtk_string_list_get_string` gets a string in the list + +See [API document](https://developer.gnome.org/gtk4/stable/GtkStringList.html) for the further information. + +I'll explain the other list objects later. + +## GtkSelectionModel + +GtkSelectionModel is an interface to support for selections. +Thanks to this model, user can select items by clicking on them. +It is implemented by GtkMultiSelection, GtkNoSelection and GtkSingleSelection objects. +These three objects are usually enough to build an application. +They are created with GListModel. +You can also create them alone and add GListModel later. + +- GtkMultiSelection supports multiple selection. +- GtkNoSelection supports no selection. This is a wrapper to GListModel when GtkSelectionModel is needed. +- GtkSingleSelection supports single selection. + +## GtkListView + +GtkListView is a widget to show GListModel items. +GtkListViewItem is used by GtkListView to represent items of a list model. +But, GtkListViewItem itself is not a widget, so a user needs to set a widget, for example GtkLabel, as a child of GtkListView to display an item of the list model. +"item" property of GtkListViewItem points an object that belongs to the list model. + +![GtkListViewItem](../image/gtklistviewitem.png){width=10cm height=7.5cm} + +In case the number of items is very big, for example more than a thousand, GtkListViewItem is recycled and connected to another item which is newly displayed. +This recycle makes the number of GtkListViewItem objects fairly small, less than 200. +This is very effective to restrain the growth of memory consumption so that GListModel can contain lots of items, for example, more than a million items. + +## GtkListItemFactory + +GtkListItemFactory creates or recycles GtkListViewItem and connects it with an item of the list model. +There are two child objects of this factory, GtkSignalListItemFactory and GtkBuilderListItemFactory. + +### GtkSignalListItemFactory + +GtkSignalListItemFactory provides signals for users to configure a GtkListViewItem object. +There are four signals. + +1. "setup" is emitted to set up GtkListViewItem object. +A user sets its child widget in the handler. +For example, creates a GtkLabel widget and sets the child property of GtkListViewItem object to it. +This setting is kept even the GtkListViewItem object is recycled (to bind to another item of GModelList). +2. "bind" is emitted to bind an item in the list model to the widget. +For example, a user gets the item object from "item" property of the GtkListViewItem object. +Then gets the string of the item and sets the label property of the GtkLabel object with the string. +This signal is emitted when the GtkListViewItem is newly created and set up, recycled or some changes has happened to the item of the list. +3. "unbind" is emitted to unbind an item. +A user undoes everything done in step 2 in the signal handler. +If some object are created in step 2, they must be destroyed. +4. "teardown" is emitted to undo everything done in step 1. +So, the widget created in step 1 must be destroyed. +After this signal, the list item will be destroyed. + +The following program `list1.c` shows the list of strings "one", "two", "three" and "four". +GtkNoSelection is used, so user can't select any item. + +@@@include +misc/list1.c +@@@ + +The file `list1.c` is located under the directory [src/misc](misc). +Make a shell script below and save it to $HOME/local/bin/comp (comp is the filename). + +@@@if gfm +~~~Shell +@@@elif html +~~~{.bash} +@@@elif latex +~~~{.bash} +@@@else +~~~ +@@@end +gcc `pkg-config --cflags gtk4` $1.c `pkg-config --libs gtk4` +~~~ + +Change the current directory to the directory includes `list1.c` and type as follows. + +~~~ +$ chmod 755 $HOME/local/bin/comp +$ comp list1 +$ ./a.out +~~~ + +Then, `list1.c` has been compiled and executed. + +![list1](../image/list1.png){width=6.04cm height=4.40cm} + +I think the program is not so difficult. +If you feel some difficulty, read this section again, especially GtkSignalListItemFactory subsubsection. + +### GtkBuilderListItemFactory + +GtkBuilderListItemFactory is another GtkListItemFactory. +Its behavior is defined with ui file. + +~~~xml + + + +~~~ + +Template tag is used to define GtkListItem. +And its child property is GtkLabel object. +The factory sees this template and creates GtkLabel and sets the child property of GtkListItem. +This is the same as what setup handler of GtkSignalListItemFactory did. + +Then, bind the label property of GtkLabel to string property of GtkStringObject. +The string object is referred to by item property of GtkListItem. +So, the lookup tag is like this: + +~~~ +string <- GtkStringObject <- item <- GtkListItem +~~~ + +The source code is as follows. +Its name is `list2.c` and located under [src/misc](misc) directory. + +@@@include +misc/list2.c +@@@ + +No signal handler is needed for GtkBulderListItemFactory. +GtkSingleSelection is used, so user can select one item at a time. + +Because this is a small program, the ui data is given as strings. +However, generally, ui file is better than string and using resource compiler is the best choice.