From afc2be4b14fcc65922a1738c8dfa9980d9cced69 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 26 Feb 2022 02:18:34 +0100 Subject: [PATCH] gtk-demo: Add a sectioned view to the filebrowser demo --- demos/gtk-demo/listview_filebrowser.c | 62 +++++++++++++----- demos/gtk-demo/listview_filebrowser.ui | 90 +++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 17 deletions(-) diff --git a/demos/gtk-demo/listview_filebrowser.c b/demos/gtk-demo/listview_filebrowser.c index e73ad41a0d..ce19060bbe 100644 --- a/demos/gtk-demo/listview_filebrowser.c +++ b/demos/gtk-demo/listview_filebrowser.c @@ -18,6 +18,8 @@ struct _FileBrowserView GObject parent_instance; GtkListItemFactory *factory; + GtkListItemFactory *section_factory; + GtkSorter *section_sorter; char *icon_name; char *title; GtkOrientation orientation; @@ -27,8 +29,10 @@ enum { PROP_0, PROP_FACTORY, PROP_ICON_NAME, - PROP_TITLE, PROP_ORIENTATION, + PROP_SECTION_FACTORY, + PROP_SECTION_SORTER, + PROP_TITLE, N_PROPS }; @@ -58,14 +62,22 @@ file_browser_view_get_property (GObject *object, g_value_set_string (value, self->icon_name); break; - case PROP_TITLE: - g_value_set_string (value, self->title); - break; - case PROP_ORIENTATION: g_value_set_enum (value, self->orientation); break; + case PROP_SECTION_FACTORY: + g_value_set_object (value, self->section_factory); + break; + + case PROP_SECTION_SORTER: + g_value_set_object (value, self->section_sorter); + break; + + case PROP_TITLE: + g_value_set_string (value, self->title); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -91,15 +103,23 @@ file_browser_view_set_property (GObject *object, self->icon_name = g_value_dup_string (value); break; + case PROP_ORIENTATION: + self->orientation = g_value_get_enum (value); + break; + + case PROP_SECTION_FACTORY: + g_set_object (&self->section_factory, g_value_get_object (value)); + break; + + case PROP_SECTION_SORTER: + g_set_object (&self->section_sorter, g_value_get_object (value)); + break; + case PROP_TITLE: g_free (self->title); self->title = g_value_dup_string (value); break; - case PROP_ORIENTATION: - self->orientation = g_value_get_enum (value); - break; - default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -139,12 +159,6 @@ file_browser_view_class_init (FileBrowserViewClass *klass) "icon to display for selecting this view", NULL, G_PARAM_READWRITE); - properties[PROP_TITLE] = - g_param_spec_string ("title", - "title", - "title to display for selecting this view", - NULL, - G_PARAM_READWRITE); properties[PROP_ORIENTATION] = g_param_spec_enum ("orientation", "orientation", @@ -152,6 +166,24 @@ file_browser_view_class_init (FileBrowserViewClass *klass) GTK_TYPE_ORIENTATION, GTK_ORIENTATION_VERTICAL, G_PARAM_READWRITE); + properties[PROP_SECTION_FACTORY] = + g_param_spec_object ("section-factory", + "section factory", + "factory to use for sections or NULL", + GTK_TYPE_LIST_ITEM_FACTORY, + G_PARAM_READWRITE); + properties[PROP_SECTION_SORTER] = + g_param_spec_object ("section-sorter", + "section sorter", + "sorter to split files into sections or NULL", + GTK_TYPE_SORTER, + G_PARAM_READWRITE); + properties[PROP_TITLE] = + g_param_spec_string ("title", + "title", + "title to display for selecting this view", + NULL, + G_PARAM_READWRITE); g_object_class_install_properties (gobject_class, N_PROPS, properties); } diff --git a/demos/gtk-demo/listview_filebrowser.ui b/demos/gtk-demo/listview_filebrowser.ui index 3fe307d702..ec3bf1e15a 100644 --- a/demos/gtk-demo/listview_filebrowser.ui +++ b/demos/gtk-demo/listview_filebrowser.ui @@ -91,6 +91,78 @@ vertical + + + + + + + + + ]]> + + + + + + + + + ]]> + + + + + + + + + + view-continuous-symbolic + Sections + vertical + + view-paged-symbolic @@ -167,8 +239,17 @@ - - standard::name,standard::display-name,standard::icon,standard::size,standard::content-type + + + + selected-view + + + + + standard::name,standard::display-name,standard::icon,standard::size,standard::content-type + + @@ -238,6 +319,11 @@ selected-view + + + selected-view + + selected-view