From a25b7a81413a731f667a99fbbd481c597a7d4563 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 15 Jun 2023 12:34:49 -0700 Subject: [PATCH] libsysprof-gtk: add columnview header-factory experiment --- src/libsysprof-gtk/sysprof-mark-chart.c | 33 +++++++++++++++--------- src/libsysprof-gtk/sysprof-mark-chart.ui | 30 +++++++++++++++++++-- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/libsysprof-gtk/sysprof-mark-chart.c b/src/libsysprof-gtk/sysprof-mark-chart.c index 650253ab..481923c0 100644 --- a/src/libsysprof-gtk/sysprof-mark-chart.c +++ b/src/libsysprof-gtk/sysprof-mark-chart.c @@ -45,6 +45,17 @@ G_DEFINE_FINAL_TYPE (SysprofMarkChart, sysprof_mark_chart, GTK_TYPE_WIDGET) static GParamSpec *properties [N_PROPS]; +static GListModel * +create_model_func (gpointer item, + gpointer user_data) +{ + if (SYSPROF_IS_MARK_CATALOG (item) && + sysprof_mark_catalog_get_kind (item) == SYSPROF_MARK_CATALOG_KIND_GROUP) + return g_object_ref (item); + + return NULL; +} + static void sysprof_mark_chart_disconnect (SysprofMarkChart *self) { @@ -57,12 +68,12 @@ sysprof_mark_chart_disconnect (SysprofMarkChart *self) static void sysprof_mark_chart_connect (SysprofMarkChart *self) { -#if 0 g_autoptr(GtkSingleSelection) single = NULL; - GtkFilterListModel *model; + GtkFilterListModel *filtered; + GtkTreeListModel *marks_tree; SysprofDocument *document; - GtkSorter *column_sorter; GtkSortListModel *sort_model; + GtkSorter *column_sorter; g_assert (SYSPROF_IS_MARK_CHART (self)); g_assert (SYSPROF_IS_SESSION (self->session)); @@ -70,18 +81,16 @@ sysprof_mark_chart_connect (SysprofMarkChart *self) column_sorter = gtk_column_view_get_sorter (self->column_view); document = sysprof_session_get_document (self->session); - model = gtk_filter_list_model_new (sysprof_document_list_marks (document), NULL); - g_object_bind_property (self->session, "filter", model, "filter", - G_BINDING_SYNC_CREATE); - sort_model = gtk_sort_list_model_new (G_LIST_MODEL (model), g_object_ref (column_sorter)); + marks_tree = gtk_tree_list_model_new (sysprof_document_catalog_marks (document), + FALSE, TRUE, + create_model_func, + NULL, NULL); + filtered = gtk_filter_list_model_new (G_LIST_MODEL (marks_tree), NULL); + g_object_bind_property (self->session, "filter", filtered, "filter", G_BINDING_SYNC_CREATE); + sort_model = gtk_sort_list_model_new (G_LIST_MODEL (filtered), g_object_ref (column_sorter)); single = gtk_single_selection_new (G_LIST_MODEL (sort_model)); gtk_column_view_set_model (self->column_view, GTK_SELECTION_MODEL (single)); - - gtk_column_view_sort_by_column (self->column_view, - self->start_column, - GTK_SORT_ASCENDING); -#endif } static void diff --git a/src/libsysprof-gtk/sysprof-mark-chart.ui b/src/libsysprof-gtk/sysprof-mark-chart.ui index e45fa311..42b2b079 100644 --- a/src/libsysprof-gtk/sysprof-mark-chart.ui +++ b/src/libsysprof-gtk/sysprof-mark-chart.ui @@ -12,6 +12,30 @@ + + + + + + +]]> + + + true @@ -24,8 +48,10 @@ - - GtkListItem + + + GtkListItem +