TreeModelSortProtocol
public protocol TreeModelSortProtocol : ObjectProtocol, TreeDragSourceProtocol, TreeSortableProtocol
The GtkTreeModelSort
is a model which implements the GtkTreeSortable
interface. It does not hold any data itself, but rather is created with
a 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
GtkTreeModelSort
is not guaranteed to be stable.
The use of this is best demonstrated through an example. In the
following sample code we create two GtkTreeView
widgets each with a
view of the same data. As the model is wrapped here by a
GtkTreeModelSort
, the two GtkTreeViews
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.
Using a GtkTreeModelSort
(C Language Example):
{
GtkTreeView *tree_view1;
GtkTreeView *tree_view2;
GtkTreeModel *sort_model1;
GtkTreeModel *sort_model2;
GtkTreeModel *child_model;
// get the child model
child_model = get_my_model ();
// Create the first tree
sort_model1 = gtk_tree_model_sort_new_with_model (child_model);
tree_view1 = gtk_tree_view_new_with_model (sort_model1);
// Create the second tree
sort_model2 = gtk_tree_model_sort_new_with_model (child_model);
tree_view2 = gtk_tree_view_new_with_model (sort_model2);
// Now we can sort the two models independently
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model1),
COLUMN_1, GTK_SORT_ASCENDING);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model2),
COLUMN_1, GTK_SORT_DESCENDING);
}
To demonstrate how to access the underlying child model from the sort
model, the next example will be a callback for the GtkTreeSelection
GtkTreeSelection::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.
Accessing the child model of in a selection changed callback
(C Language Example):
void
selection_changed (GtkTreeSelection *selection, gpointer data)
{
GtkTreeModel *sort_model = NULL;
GtkTreeModel *child_model;
GtkTreeIter sort_iter;
GtkTreeIter child_iter;
char *some_data = NULL;
char *modified_data;
// Get the current selected row and the model.
if (! gtk_tree_selection_get_selected (selection,
&sort_model,
&sort_iter))
return;
// Look up the current value on the selected row and get
// a new value to change it to.
gtk_tree_model_get (GTK_TREE_MODEL (sort_model), &sort_iter,
COLUMN_1, &some_data,
-1);
modified_data = change_the_data (some_data);
g_free (some_data);
// Get an iterator on the child model, instead of the sort model.
gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (sort_model),
&child_iter,
&sort_iter);
// Get the child model and change the value of the row. In this
// example, the child model is a GtkListStore. It could be any other
// type of model, though.
child_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sort_model));
gtk_list_store_set (GTK_LIST_STORE (child_model), &child_iter,
COLUMN_1, &modified_data,
-1);
g_free (modified_data);
}
The TreeModelSortProtocol
protocol exposes the methods and properties of an underlying GtkTreeModelSort
instance.
The default implementation of these can be found in the protocol extension below.
For a concrete class that implements these methods and properties, see TreeModelSort
.
Alternatively, use TreeModelSortRef
as a lighweight, unowned
reference if you already have an instance you just want to use.
-
Untyped pointer to the underlying
GtkTreeModelSort
instance.Declaration
Swift
var ptr: UnsafeMutableRawPointer! { get }
-
tree_model_sort_ptr
Default implementationTyped pointer to the underlying
GtkTreeModelSort
instance.Default Implementation
Return the stored, untyped pointer as a typed pointer to the
GtkTreeModelSort
instance.Declaration
Swift
var tree_model_sort_ptr: UnsafeMutablePointer<GtkTreeModelSort>! { get }
-
Required Initialiser for types conforming to
TreeModelSortProtocol
Declaration
Swift
init(raw: UnsafeMutableRawPointer)
-
bind(property:
Extension methodto: _: flags: transformFrom: transformTo: ) Bind a
TreeModelSortPropertyName
source property to a given target object.Declaration
Swift
@discardableResult @inlinable func bind<Q, T>(property source_property: TreeModelSortPropertyName, to target: T, _ target_property: Q, flags f: BindingFlags = .default, transformFrom transform_from: @escaping GLibObject.ValueTransformer = { $0.transform(destValue: $1) }, transformTo transform_to: @escaping GLibObject.ValueTransformer = { $0.transform(destValue: $1) }) -> BindingRef! where Q : PropertyNameProtocol, T : ObjectProtocol
Parameters
source_property
the source property to bind
target
the target object to bind to
target_property
the target property to bind to
flags
the flags to pass to the
Binding
transform_from
ValueTransformer
to use for forward transformationtransform_to
ValueTransformer
to use for backwards transformationReturn Value
binding reference or
nil
in case of an error -
get(property:
Extension method) Get the value of a TreeModelSort property
Declaration
Swift
@inlinable func get(property: TreeModelSortPropertyName) -> GLibObject.Value
Parameters
property
the property to get the value for
Return Value
the value of the named property
-
set(property:
Extension methodvalue: ) Set the value of a TreeModelSort property. Note that this will only have an effect on properties that are writable and not construct-only!
Declaration
Swift
@inlinable func set(property: TreeModelSortPropertyName, value v: GLibObject.Value)
Parameters
property
the property to get the value for
Return Value
the value of the named property
-
clearCache()
Extension methodThis function should almost never be called. It clears the
tree_model_sort
of any cached iterators that haven’t been reffed withgtk_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.Declaration
Swift
@inlinable func clearCache()
-
convertChildIterToIter(sortIter:
Extension methodchildIter: ) Sets
sort_iter
to point to the row intree_model_sort
that corresponds to the row pointed at bychild_iter
. Ifsort_iter
was not set,false
is returned. Note: a boolean is only returned since 2.14.Declaration
Swift
@inlinable func convertChildIterToIter<TreeIterT>(sortIter: TreeIterT, childIter: TreeIterT) -> Bool where TreeIterT : TreeIterProtocol
-
convertChildPathToPath(childPath:
Extension method) Converts
child_path
to a path relative totree_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. Ifchild_path
isn’t a valid path on the child model, thennil
is returned.Declaration
Swift
@inlinable func convertChildPathToPath<TreePathT>(childPath: TreePathT) -> TreePathRef! where TreePathT : TreePathProtocol
-
convertIterTo(childIter:
Extension methodsortedIter: ) Sets
child_iter
to point to the row pointed to bysorted_iter
.Declaration
Swift
@inlinable func convertIterTo<TreeIterT>(childIter: TreeIterT, sortedIter: TreeIterT) where TreeIterT : TreeIterProtocol
-
convertPathToChildPath(sortedPath:
Extension method) Converts
sorted_path
to a path on the child model oftree_model_sort
. That is,sorted_path
points to a location intree_model_sort
. The returned path will point to the same location in the model not being sorted. Ifsorted_path
does not point to a location in the child model,nil
is returned.Declaration
Swift
@inlinable func convertPathToChildPath<TreePathT>(sortedPath: TreePathT) -> TreePathRef! where TreePathT : TreePathProtocol
-
getModel()
Extension methodReturns the model the
GtkTreeModelSort
is sorting.Declaration
Swift
@inlinable func getModel() -> TreeModelRef!
-
iterIsValid(iter:
Extension method) > This function is slow. Only use it for debugging and/or testing > purposes.
Checks if the given iter is a valid iter for this
GtkTreeModelSort
.Declaration
Swift
@inlinable func iterIsValid<TreeIterT>(iter: TreeIterT) -> Bool where TreeIterT : TreeIterProtocol
-
resetDefaultSortFunc()
Extension methodThis 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
GtkTreeModelSort
is in “unsorted” state.Declaration
Swift
@inlinable func resetDefaultSortFunc()
-
model
Extension methodUndocumented
Declaration
Swift
@inlinable var model: TreeModelRef! { get }
-
parent
Extension methodUndocumented
Declaration
Swift
@inlinable var parent: GObject { get }