Index

Package: Tree_Model_Sort

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)

Classes

Gtk_Tree_Model_Sort_Record

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

Ancestors:

Primitive operations:

Convert_Child_Iter_To_Iter
Convert_Child_Path_To_Path
Convert_Iter_To_Child_Iter
Convert_Path_To_Child_Path
Glib.Object.Deallocate (Inherited)
Glib.Object.Get_Type (Inherited)
Glib.Object.Notify (Inherited)
Glib.Object.Ref (Inherited)
Glib.Object.Ref_Sink (Inherited)
Glib.Object.Unref (Inherited)
Gtk.Tree_Model.Children (Inherited)
Gtk.Tree_Model.Foreach (Inherited)
Gtk.Tree_Model.Get_Address (Inherited)
Gtk.Tree_Model.Get_Boolean (Inherited)
Gtk.Tree_Model.Get_C_Proxy (Inherited)
Gtk.Tree_Model.Get_Column_Type (Inherited)
Gtk.Tree_Model.Get_Flags (Inherited)
Gtk.Tree_Model.Get_Int (Inherited)
Gtk.Tree_Model.Get_Iter (Inherited)
Gtk.Tree_Model.Get_Iter_First (Inherited)
Gtk.Tree_Model.Get_Iter_From_String (Inherited)
Gtk.Tree_Model.Get_N_Columns (Inherited)
Gtk.Tree_Model.Get_Object (Inherited)
Gtk.Tree_Model.Get_Path (Inherited)
Gtk.Tree_Model.Get_String (Inherited)
Gtk.Tree_Model.Get_String_From_Iter (Inherited)
Gtk.Tree_Model.Get_Value (Inherited)
Gtk.Tree_Model.Gtk_New (Inherited)
Gtk.Tree_Model.Has_Child (Inherited)
Gtk.Tree_Model.N_Children (Inherited)
Gtk.Tree_Model.Next (Inherited)
Gtk.Tree_Model.Nth_Child (Inherited)
Gtk.Tree_Model.Parent (Inherited)
Gtk.Tree_Model.Ref_Node (Inherited)
Gtk.Tree_Model.Unref_Node (Inherited)
Iter_Is_Valid
Reset_Default_Sort_Func

Types

Gtk_Tree_Model_Sort

type Gtk_Tree_Model_Sort is access all Gtk_Tree_Model_Sort_Record'Class;

Constants & Global variables

Subprograms & Entries

Gtk_New_With_Model

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

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

function Get_Type return Glib.GType;
Return the internal type associated with a Gtk_Tree_Model_Sort.

Get_Model

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

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

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

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

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

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

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

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.

-

Converts to and from the Gtk_Tree_Sortable interface

-

Converts to and from the Gtk_Tree_Drag_Source interface