## GtkTreeSortable

GtkTreeSortable — The interface for sortable models used by GtkTreeView

## Synopsis

    #include <gtk/gtk.h>

    struct      GtkTreeSortable;
    struct      GtkTreeSortableIface;
    gint        (*GtkTreeIterCompareFunc)       (GtkTreeModel *model,
                                                 GtkTreeIter *a,
                                                 GtkTreeIter *b,
                                                 gpointer user_data);
    void        gtk_tree_sortable_sort_column_changed
                                                (GtkTreeSortable *sortable);
    gboolean    gtk_tree_sortable_get_sort_column_id
                                                (GtkTreeSortable *sortable,
                                                 gint *sort_column_id,
                                                 GtkSortType *order);
    void        gtk_tree_sortable_set_sort_column_id
                                                (GtkTreeSortable *sortable,
                                                 gint sort_column_id,
                                                 GtkSortType order);
    void        gtk_tree_sortable_set_sort_func (GtkTreeSortable *sortable,
                                                 gint sort_column_id,
                                                 GtkTreeIterCompareFunc sort_func,
                                                 gpointer user_data,
                                                 GtkDestroyNotify destroy);
    void        gtk_tree_sortable_set_default_sort_func
                                                (GtkTreeSortable *sortable,
                                                 GtkTreeIterCompareFunc sort_func,
                                                 gpointer user_data,
                                                 GtkDestroyNotify destroy);
    gboolean    gtk_tree_sortable_has_default_sort_func
                                                (GtkTreeSortable *sortable);

## Object Hierarchy

      GInterface
       +----GtkTreeSortable

## Prerequisites

GtkTreeSortable requires GtkTreeModel and GObject.

## Known Implementations

GtkTreeSortable is implemented by GtkTreeModelSort, GtkTreeStore and GtkListStore.

## Signal Prototypes

    "sort-column-changed"
                void        user_function      (GtkTreeSortable *treesortable,
                                                gpointer user_data);

## Description

## Details

### struct GtkTreeSortable

    struct GtkTreeSortable;

### struct GtkTreeSortableIface

    struct GtkTreeSortableIface {

      GTypeInterface g_iface;

      /* signals */
      void     (* sort_column_changed)   (GtkTreeSortable        *sortable);

      /* virtual table */
      gboolean (* get_sort_column_id)    (GtkTreeSortable        *sortable,
    				      gint                   *sort_column_id,
    				      GtkSortType            *order);
      void     (* set_sort_column_id)    (GtkTreeSortable        *sortable,
    				      gint                    sort_column_id,
    				      GtkSortType             order);
      void     (* set_sort_func)         (GtkTreeSortable        *sortable,
    				      gint                    sort_column_id,
    				      GtkTreeIterCompareFunc  func,
    				      gpointer                data,
    				      GtkDestroyNotify        destroy);
      void     (* set_default_sort_func) (GtkTreeSortable        *sortable,
    				      GtkTreeIterCompareFunc  func,
    				      gpointer                data,
    				      GtkDestroyNotify        destroy);
      gboolean (* has_default_sort_func) (GtkTreeSortable        *sortable);
    };

### GtkTreeIterCompareFunc ()

    gint        (*GtkTreeIterCompareFunc)       (GtkTreeModel *model,
                                                 GtkTreeIter *a,
                                                 GtkTreeIter *b,
                                                 gpointer user_data);

`model` : |
`a` : |
`b` : |
`user_data` : |
Returns : |

### gtk_tree_sortable_sort_column_changed ()

    void        gtk_tree_sortable_sort_column_changed
                                                (GtkTreeSortable *sortable);

Emits a GtkTreeSortable::sort_column_changed signal on

`sortable` : | A GtkTreeSortable

### gtk_tree_sortable_get_sort_column_id ()

    gboolean    gtk_tree_sortable_get_sort_column_id
                                                (GtkTreeSortable *sortable,
                                                 gint *sort_column_id,
                                                 GtkSortType *order);

Fills in `sort_column_id` and `order` with the current sort column and the order, if applicable. If the sort column is not set, then FALSE is returned, and the values in `sort_column_id` and `order` are unchanged.

`sortable` : | A GtkTreeSortable
`sort_column_id` : | The sort column id to be filled in
`order` : | The GtkSortType to be filled in
Returns : | `TRUE`, if the sort column has been set

### gtk_tree_sortable_set_sort_column_id ()

    void        gtk_tree_sortable_set_sort_column_id
                                                (GtkTreeSortable *sortable,
                                                 gint sort_column_id,
                                                 GtkSortType order);

Sets the current sort column to be `sort_column_id`. The `sortable` will resort itself to reflect this change, after emitting a GtkTreeSortable::sort_column_changed signal. If `sort_column_id` is `GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID`, then the default sort function will be used, if it is set.

`sortable` : | A GtkTreeSortable
`sort_column_id` : | the sort column id to set
`order` : | The sort order of the column

### gtk_tree_sortable_set_sort_func ()

    void        gtk_tree_sortable_set_sort_func (GtkTreeSortable *sortable,
                                                 gint sort_column_id,
                                                 GtkTreeIterCompareFunc sort_func,
                                                 gpointer user_data,
                                                 GtkDestroyNotify destroy);

Sets the comparison function used when sorting to be `sort_func`. If the current sort column id of `sortable` is the same as `sort_column_id`, then the model will sort using this function.

`sortable` : | A GtkTreeSortable
`sort_column_id` : | the sort column id to set the function for
`sort_func` : | The sorting function
`user_data` : | User data to pass to the sort func, or `NULL`
`destroy` : | Destroy notifier of `user_data`, or `NULL`

### gtk_tree_sortable_set_default_sort_func ()

    void        gtk_tree_sortable_set_default_sort_func
                                                (GtkTreeSortable *sortable,
                                                 GtkTreeIterCompareFunc sort_func,
                                                 gpointer user_data,
                                                 GtkDestroyNotify destroy);

Sets the default comparison function used when sorting to be `sort_func`. If the current sort column id of `sortable` is `GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID`, then the model will sort using this function.

If `sort_func` is `NULL`, then there will be no default comparison function. This means that once the model has been sorted, it can't go back to the default state. In this case, when the current sort column id of `sortable` is GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, the model will be unsorted.

`sortable` : | A GtkTreeSortable
`sort_func` : | The sorting function
`user_data` : | User data to pass to the sort func, or `NULL`
`destroy` : | Destroy notifier of `user_data`, or `NULL`

### gtk_tree_sortable_has_default_sort_func ()

    gboolean    gtk_tree_sortable_has_default_sort_func
                                                (GtkTreeSortable *sortable);

Returns `TRUE` if the model has a default sort function. This is used primarily by GtkTreeViewColumns in order to determine if a model can go back to the default state, or not.

`sortable` : | A GtkTreeSortable
Returns : | `TRUE`, if the model has a default sort function

## Signals

### The "sort-column-changed" signal

    void        user_function                  (GtkTreeSortable *treesortable,
                                                gpointer user_data);

`treesortable` : | the object which received the signal.
`user_data` : | user data set when the signal handler was connected.