[gtk/prop-list: 87/113] column view: Add a sort-by api
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/prop-list: 87/113] column view: Add a sort-by api
- Date: Wed, 18 Dec 2019 05:09:13 +0000 (UTC)
commit 337cae1357370af7cc9ce68895a3d55a535a94b5
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Dec 3 21:31:57 2019 -0500
column view: Add a sort-by api
docs/reference/gtk/gtk4-sections.txt | 1 +
gtk/gtkcolumnview.c | 46 ++++++++++++++++++++++++++++++++++++
gtk/gtkcolumnview.h | 5 ++++
gtk/gtkcolumnviewsorter.c | 30 +++++++++++++++++++++++
gtk/gtkcolumnviewsorterprivate.h | 4 ++++
5 files changed, 86 insertions(+)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 719a5b7957..9ab86b2332 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -599,6 +599,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
<SUBSECTION Standard>
GTK_COLUMN_VIEW
GTK_COLUMN_VIEW_CLASS
diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c
index 9d3bf91299..a4c48e8334 100644
--- a/gtk/gtkcolumnview.c
+++ b/gtk/gtkcolumnview.c
@@ -736,3 +736,49 @@ gtk_column_view_get_sorter (GtkColumnView *self)
return self->sorter;
}
+void
+gtk_column_view_active_sorter_changed (GtkColumnView *self)
+{
+ guint i;
+
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->columns)); i++)
+ {
+ GtkColumnViewColumn *column = g_list_model_get_item (G_LIST_MODEL (self->columns), i);
+ gtk_column_view_column_active_sorter_changed (column);
+ 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 the sorter returned by gtk_column_view_get_sorter()
+ * is set on a sort model, and gtk_column_view_column_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 d431de0cb7..949e888b8e 100644
--- a/gtk/gtkcolumnviewsorter.c
+++ b/gtk/gtkcolumnviewsorter.c
@@ -239,6 +239,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_clear (GtkColumnViewSorter *self)
{
diff --git a/gtk/gtkcolumnviewsorterprivate.h b/gtk/gtkcolumnviewsorterprivate.h
index ce89952170..c81c565252 100644
--- a/gtk/gtkcolumnviewsorterprivate.h
+++ b/gtk/gtkcolumnviewsorterprivate.h
@@ -46,6 +46,10 @@ void gtk_column_view_sorter_clear (GtkColumnViewSo
GtkColumnViewColumn * gtk_column_view_sorter_get_sort_column (GtkColumnViewSorter *self,
gboolean *inverted);
+gboolean gtk_column_view_sorter_set_column (GtkColumnViewSorter *self,
+ GtkColumnViewColumn *column,
+ gboolean inverted);
+
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]