## Documentation

Table of Contents
Class Inheritance Tree
Widget Screenshots
Package groups

## Index

Package: Tree_Model_Sort

- Goto spec source

# Description

    package Gtk.Tree_Model_Sort is

The Gtk_Tree_Model_Sort is a model which implements the Gtk_Tree_Sortable interface. It does not hold any data itself, but rather is created with child model and proxies its data. It has identical column types to this child model, and the changes in the child are propagated. The primary purpose of this model is to provide a way to sort a different model without modifying it. Note that the sort function used by Gtk_Tree_Model_Sort is not guaranteed to be stable.

The use of this is best demonstrated through an example. In the following sample code we create two Gtk_Tree_View widgets each with a view of the same data. As the model is wrapped here by a Gtk_Tree_Model_Sort, the two Gtk_Tree_Views can each sort their view of the data without affecting the other. By contrast, if we simply put the same model in each widget, then sorting the first would sort the second. declare Tree_View1, Tree_View2 : Gtk_Tree_View; Sort_Model1, Sort_Model2 : Gtk_Tree_Model_Sort; Child_Model : Gtk_Tree_Model; begin Child_Model := Get_My_Model; -- Your own implementation -- Create the first tree Gtk_New_With_Model (Sort_Model1, Child_Model); Gtk_New (Tree_View1, Sort_Model1); Set_Sort_Column_Id (Sort_Model1, COLUMN1, Sort_Ascending); -- Create the second tree Gtk_New_With_Model (Sort_Model2, Child_Model); Gtk_New (Tree_View2, Sort_Model2); Set_Sort_Column_Id (Sort_Model2, COLUMN1, Sort_Descending); end; To demonstrate how to access the underlying child model from the sort model, the next example will be a callback for the Gtk_Tree_Selection "changed" signal. In this callback, we get a string from COLUMN_1 of the model. We then modify the string, find the same selected row on the child model, and change the row there. procedure Selection_Changed (Selection : access Gtk_Tree_Selection_Record'Class) is Sort_Model, Child_Model : Gtk_Tree_Model; Sort_Iter, Child_Iter : Gtk_Tree_Iter; begin -- Get the currently selected row and the model Get_Selected (Selection, Sort_Model, Sort_Iter); if Sort_Iter = Null_Iter then return; end if; -- Lookup the current value on the selected row declare Some_Data : constant String := Get_String (Sort_Model, Sort_Iter, COLUMN1); begin -- Get an iterator on the child model instead of the sort model Convert_Iter_To_Child_Iter (Sort_Model, Child_Iter, Sort_Iter); -- Get the child model and change the value in the row -- In this example, the model is a Gtk_List_Store, but it could be -- anything Child_Model := Get_Model (Gtk_Sort_Model (Sort_Model)); Set (Ctk_List_Store (Child_Model), Child_Iter, COLUMN1, "data"); end; end Selection_Changed;

Binding from C File version 2.8.17

# Packages

### Implements_Tree_Sortable (new Glib.Types.Implements)

    package Implements_Tree_Sortable is new Glib.Types.Implements
         (Gtk.Tree_Sortable.Gtk_Tree_Sortable,
          Gtk_Tree_Model_Sort_Record,
          Gtk_Tree_Model_Sort);

### Implements_Drag_Source (new Glib.Types.Implements)

    package Implements_Drag_Source is new Glib.Types.Implements
         (Gtk.Tree_Dnd.Gtk_Tree_Drag_Source,
          Gtk_Tree_Model_Sort_Record,
          Gtk_Tree_Model_Sort);

# Classes

### Gtk_Tree_Model_Sort_Record

- Goto declaration in source

    type Gtk_Tree_Model_Sort_Record is
         new Gtk.Tree_Model.Gtk_Tree_Model_Record with null record;

#### Ancestors:

Gtk.Tree_Model.Gtk_Tree_Model_Record
Glib.Object.GObject_Record

#### Primitive operations:

Clear_Cache

- To API doc
- To spec

Convert_Child_Iter_To_Iter

- To API doc
- To spec

Convert_Child_Path_To_Path

- To API doc
- To spec

Convert_Iter_To_Child_Iter

- To API doc
- To spec

Convert_Path_To_Child_Path

- To API doc
- To spec

Get_Model

- To API doc
- To spec

Glib.Object.Deallocate

- To API doc
- To spec

(Inherited)
Glib.Object.Get_Type

- To API doc
- To spec

(Inherited)
Glib.Object.Notify

- To API doc
- To spec

(Inherited)
Glib.Object.Ref

- To API doc
- To spec

(Inherited)
Glib.Object.Ref_Sink

- To API doc
- To spec

(Inherited)
Glib.Object.Unref

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Children

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Foreach

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Address

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Boolean

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_C_Proxy

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Column_Type

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Flags

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Int

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Iter

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Iter_First

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Iter_From_String

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_N_Columns

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Object

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Path

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_String

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_String_From_Iter

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Get_Value

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Gtk_New

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Has_Child

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.N_Children

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Next

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Nth_Child

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Parent

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Ref_Node

- To API doc
- To spec

(Inherited)
Gtk.Tree_Model.Unref_Node

- To API doc
- To spec

(Inherited)
Iter_Is_Valid

- To API doc
- To spec

Reset_Default_Sort_Func

- To API doc
- To spec

# Types

### Gtk_Tree_Model_Sort

- Goto declaration in source

    type Gtk_Tree_Model_Sort is access all Gtk_Tree_Model_Sort_Record'Class;

# Constants & Global variables

### Model_Property

- Goto declaration in source

(Glib.Properties.Property_Object)

    Model_Property : constant Glib.Properties.Property_Object;

# Subprograms & Entries

### Gtk_New_With_Model

- Goto spec in source

    procedure Gtk_New_With_Model (Sort_Model: out Gtk_Tree_Model_Sort;Child_Model: access Gtk.Tree_Model.Gtk_Tree_Model_Record'Class);

### Initialize_With_Model

- Goto spec in source

    procedure Initialize_With_Model (Sort_Model: access Gtk_Tree_Model_Sort_Record'Class;Child_Model: access Gtk.Tree_Model.Gtk_Tree_Model_Record'Class);

Creates or initialized a new sortable tree model, with Child_Model as the child model. Any change in Child_Model is reflected into Sort_Model

### Get_Type

- Goto spec in source
- Goto body in source

    function Get_Type return Glib.GType;

Return the internal type associated with a Gtk_Tree_Model_Sort.

### Get_Model

- Goto spec in source

    function Get_Model (Tree_Model: access Gtk_Tree_Model_Sort_Record) return Gtk.Tree_Model.Gtk_Tree_Model;

Return the model the Gtk_Tree_Model_Sort is sorting.

### Convert_Child_Path_To_Path

- Goto spec in source

    function Convert_Child_Path_To_Path (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record;Child_Path: Gtk.Tree_Model.Gtk_Tree_Path) return Gtk.Tree_Model.Gtk_Tree_Path;

Convert Child_Path to a path relative to Tree_Model_Sort. That is, Child_Path points to a path in the child model. The returned path will point to the same row in the sorted model. If Child_Path isn't a valid path on the child model, then Null is returned. The returned value must be freed with Path_Free.

### Convert_Child_Iter_To_Iter

- Goto spec in source

    procedure Convert_Child_Iter_To_Iter (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record;Sort_Iter: out Gtk.Tree_Model.Gtk_Tree_Iter;Child_Iter: Gtk.Tree_Model.Gtk_Tree_Iter);

Set Sort_Iter to point to the row in Tree_Model_Sort that corresponds to the row pointed at by Child_Iter.

### Convert_Path_To_Child_Path

- Goto spec in source

    function Convert_Path_To_Child_Path (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record;Sorted_Path: Gtk.Tree_Model.Gtk_Tree_Path) return Gtk.Tree_Model.Gtk_Tree_Path;

Convert Sort_Path to a path on the child model of Tree_Model_Sort. That is, Sort_Path points ot a location in Tree_Model_Sort. The returned path will point to the same location in the model not being sorted.

### Convert_Iter_To_Child_Iter

- Goto spec in source

    procedure Convert_Iter_To_Child_Iter (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record;Child_Iter: out Gtk.Tree_Model.Gtk_Tree_Iter;Sorted_Iter: Gtk.Tree_Model.Gtk_Tree_Iter);

Set Child_Iter to point to the row pointed to by Sorted_Iter.

### Reset_Default_Sort_Func

- Goto spec in source

    procedure Reset_Default_Sort_Func (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record);

This resets the default sort function to be in the 'unsorted' state. That is, it is in the same order as the child model. It will re-sort the model to be in the same order as the child model only if the Gtk_Tree_Model_Sort is in 'unsorted' state.

### Clear_Cache

- Goto spec in source

    procedure Clear_Cache (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record);

This function should almost never be called. It clears the tree_model_sort of any cached iterators that haven't been reffed with gtk.tree_model.ref_node. This might be useful if the child model being sorted is static (and doesn't change often) and there has been a lot of unreffed access to nodes. As a side effect of this function, all unreffed iters will be invalid.

### Iter_Is_Valid

- Goto spec in source

    function Iter_Is_Valid (Tree_Model_Sort: access Gtk_Tree_Model_Sort_Record;Iter: Gtk.Tree_Model.Gtk_Tree_Iter) return Boolean;

WARNING: this function is slow. Only use if for debugging and/or testing purposes. Checks if the given iter is a valid iter for this model.

### +

- Goto spec in source

    function "+" (Model: access Gtk_Tree_Model_Sort_Record'Class) return Gtk.Tree_Sortable.Gtk_Tree_Sortable renames Implements_Tree_Sortable.To_Interface;

### -

- Goto spec in source

    function "-" (Sortable: Gtk.Tree_Sortable.Gtk_Tree_Sortable) return Gtk_Tree_Model_Sort renames Implements_Tree_Sortable.To_Object;

Converts to and from the Gtk_Tree_Sortable interface

### +

- Goto spec in source

    function "+" (Model: access Gtk_Tree_Model_Sort_Record'Class) return Gtk.Tree_Dnd.Gtk_Tree_Drag_Source renames Implements_Drag_Source.To_Interface;

### -

- Goto spec in source

    function "-" (Drag_Source: Gtk.Tree_Dnd.Gtk_Tree_Drag_Source) return Gtk_Tree_Model_Sort renames Implements_Drag_Source.To_Object;

Converts to and from the Gtk_Tree_Drag_Source interface