From 4bfc653311c8d904cc9dd48dd99bfafd6aa9cb85 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 3 Dec 2019 21:31:57 -0500 Subject: [PATCH] column view: Add a sort-by api --- docs/reference/gtk/gtk4-sections.txt | 1 + gtk/gtkcolumnview.c | 35 ++++++++++++++++++++++++++++ gtk/gtkcolumnview.h | 5 ++++ gtk/gtkcolumnviewsorter.c | 30 ++++++++++++++++++++++++ gtk/gtkcolumnviewsorterprivate.h | 4 ++++ 5 files changed, 75 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index f9e8e606fc..558f804e04 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -565,6 +565,7 @@ gtk_column_view_set_model gtk_column_view_get_sorter gtk_column_view_get_show_separators gtk_column_view_set_show_separators +gtk_column_view_sort_by_column GTK_COLUMN_VIEW GTK_COLUMN_VIEW_CLASS diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index 5762610f32..0cd4d302de 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -744,3 +744,38 @@ gtk_column_view_active_sorter_changed (GtkColumnView *self) g_object_unref (column); } } + +/** + * gtk_column_view_sort_by_column: + * @self: a #GtkColumnView + * @column: (allow-none): the #GtkColumnViewColumn to sort by, or %NULL + * @direction: the direction to sort in + * + * Sets the sorting of the view. + * + * This function should be used to set up the initial sorting. At runtime, + * users can change the sorting of a column view by clicking on the list headers. + * + * This call only has an effect if gtk_column_view_set_sort_model() has + * been called to inform the view about the underlying sort model, and + * if gtk_column_view_set_sorter() has been called on @column to associate + * a sorter with the column. + * + * If @column is %NULL, the view will be unsorted. + */ +void +gtk_column_view_sort_by_column (GtkColumnView *self, + GtkColumnViewColumn *column, + GtkSortType direction) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW (self)); + g_return_if_fail (column == NULL || GTK_IS_COLUMN_VIEW_COLUMN (column)); + g_return_if_fail (column == NULL || gtk_column_view_column_get_column_view (column) == self); + + if (column == NULL) + gtk_column_view_sorter_reset (GTK_COLUMN_VIEW_SORTER (self->sorter)); + else + gtk_column_view_sorter_set_column (GTK_COLUMN_VIEW_SORTER (self->sorter), + column, + direction == GTK_SORT_DESCENDING); +} diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h index 6ec91319e8..fd0e99a4d3 100644 --- a/gtk/gtkcolumnview.h +++ b/gtk/gtkcolumnview.h @@ -77,6 +77,11 @@ void gtk_column_view_set_show_separators (GtkColumnView GDK_AVAILABLE_IN_ALL GtkSorter * gtk_column_view_get_sorter (GtkColumnView *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_sort_by_column (GtkColumnView *self, + GtkColumnViewColumn *column, + GtkSortType direction); + G_END_DECLS #endif /* __GTK_COLUMN_VIEW_H__ */ diff --git a/gtk/gtkcolumnviewsorter.c b/gtk/gtkcolumnviewsorter.c index 18f1bfc073..78451aa431 100644 --- a/gtk/gtkcolumnviewsorter.c +++ b/gtk/gtkcolumnviewsorter.c @@ -195,6 +195,36 @@ gtk_column_view_sorter_remove_column (GtkColumnViewSorter *self, return FALSE; } +gboolean +gtk_column_view_sorter_set_column (GtkColumnViewSorter *self, + GtkColumnViewColumn *column, + gboolean inverted) +{ + GtkSorter *sorter; + Sorter *s; + + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_SORTER (self), FALSE); + g_return_val_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (column), FALSE); + + sorter = gtk_column_view_column_get_sorter (column); + if (sorter == NULL) + return FALSE; + + g_list_free_full (self->sorters, free_sorter); + + s = g_new (Sorter, 1); + s->column = g_object_ref (column); + s->sorter = g_object_ref (sorter); + s->changed_id = g_signal_connect (sorter, "changed", G_CALLBACK (changed_cb), self); + s->inverted = inverted; + + self->sorters = g_list_prepend (self->sorters, s); + + gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_DIFFERENT); + + return TRUE; +} + void gtk_column_view_sorter_reset (GtkColumnViewSorter *self) { diff --git a/gtk/gtkcolumnviewsorterprivate.h b/gtk/gtkcolumnviewsorterprivate.h index 08718323e9..9c465dd527 100644 --- a/gtk/gtkcolumnviewsorterprivate.h +++ b/gtk/gtkcolumnviewsorterprivate.h @@ -47,6 +47,10 @@ GtkColumnViewColumn * gtk_column_view_sorter_get_active (GtkColumnViewSorter *self, gboolean *inverted); +gboolean gtk_column_view_sorter_set_column (GtkColumnViewSorter *self, + GtkColumnViewColumn *column, + gboolean inverted); + G_END_DECLS