forked from AuroraMiddleware/gtk
columnview: Add a sort-by api
This commit is contained in:
parent
66500a6882
commit
2945430ad7
@ -503,6 +503,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
|
||||
|
@ -736,3 +736,36 @@ gtk_column_view_get_sorter (GtkColumnView *self)
|
||||
return self->sorter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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_clear (GTK_COLUMN_VIEW_SORTER (self->sorter));
|
||||
else
|
||||
gtk_column_view_sorter_set_column (GTK_COLUMN_VIEW_SORTER (self->sorter),
|
||||
column,
|
||||
direction == GTK_SORT_DESCENDING);
|
||||
}
|
||||
|
@ -77,6 +77,10 @@ void gtk_column_view_set_show_separators (GtkColumnView
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkSorter * gtk_column_view_get_sorter (GtkColumnView *self);
|
||||
|
||||
void gtk_column_view_sort_by_column (GtkColumnView *self,
|
||||
GtkColumnViewColumn *column,
|
||||
GtkSortType direction);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GTK_COLUMN_VIEW_H__ */
|
||||
|
@ -239,6 +239,43 @@ 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_object_ref (column);
|
||||
|
||||
g_sequence_remove_range (g_sequence_get_begin_iter (self->sorters),
|
||||
g_sequence_get_end_iter (self->sorters));
|
||||
|
||||
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 (gtk_column_view_sorter_changed_cb), self);
|
||||
s->inverted = inverted;
|
||||
|
||||
g_sequence_prepend (self->sorters, s);
|
||||
|
||||
gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_DIFFERENT);
|
||||
|
||||
gtk_column_view_column_notify_sort (column);
|
||||
|
||||
g_object_unref (column);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_column_view_sorter_clear (GtkColumnViewSorter *self)
|
||||
{
|
||||
@ -253,12 +290,16 @@ gtk_column_view_sorter_clear (GtkColumnViewSorter *self)
|
||||
|
||||
iter = g_sequence_get_begin_iter (self->sorters);
|
||||
s = g_sequence_get (iter);
|
||||
column = s->column;
|
||||
|
||||
column = g_object_ref (s->column);
|
||||
|
||||
g_sequence_remove_range (iter, g_sequence_get_end_iter (self->sorters));
|
||||
|
||||
gtk_sorter_changed (GTK_SORTER (self), GTK_SORTER_CHANGE_DIFFERENT);
|
||||
|
||||
gtk_column_view_column_notify_sort (column);
|
||||
|
||||
g_object_unref (column);
|
||||
}
|
||||
|
||||
GtkColumnViewColumn *
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user