类
GtkTreeModelSort
已弃用:4.10
说明 [src]
class Gtk.TreeModelSort : GObject.Object
implements Gtk.TreeDragSource, Gtk.TreeModel, Gtk.TreeSortable {
/* No available fields */
}
一个 GtkTreeModel 它使得底层树模型可排序
该 GtkTreeModelSort
是一个实现 GtkTreeSortable
接口的模型。它不持有任何数据本身,而是创建一个带有子模型并代理其数据的模型。它具有与其子模型相同的列类型,并且子模型中的更改将传播。此模型的主要目的是提供一种方法来对不同的模型进行排序,而无需修改该模型。请注意,GtkTreeModelSort
使用的排序函数不保证 稳定。
通过一个示例可以最好地说明其用法。在下面的示例代码中,我们创建了两个 GtkTreeView
小部件,它们都具有对相同数据的视图。由于此处模型是由 GtkTreeModelSort
封装的,这两个 GtkTreeView
可以分别对它们的数据视图进行排序,而不会影响另一个。相反,如果我们简单地将同一个模型放入每个小部件,则对第一个进行排序会对 第二个进行排序。
使用 GtkTreeModelSort
{
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);
}
为了演示如何从排序模型访问底层子模型,下一个示例将是 GtkTreeSelection
GtkTreeSelection::changed
信号的回调。在此回调中,我们从模型的 COLUMN_1 中获取一个字符串。然后,我们修改字符串,在子模型上找到相同选定的行,并更改那里的行 。
从选择更改回调中访问子模型
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);
}
已弃用版本:4.10
请使用 GtkSortListModel
。
实例方法
gtk_tree_model_sort_clear_cache
此函数几乎永远不会被调用。它清除 tree_model_sort
的任何尚未使用 gtk_tree_model_ref_node() 引用过的缓存迭代器。如果正在排序的子模型是静态的(并且不经常更改),并且对节点有很多未引用的访问,这可能会很有用。此函数的副作用是,所有未引用的迭代器将 无效。
已弃用:4.10
gtk_tree_model_sort_convert_child_iter_to_iter
设置 sort_iter
指向 tree_model_sort
中与 child_iter
指向的行相对应的行。如果 sort_iter
未设置,则返回 FALSE
。注意:自 2.14 起才返回 布尔值。
已弃用:4.10
gtk_tree_model_sort_convert_child_path_to_path
将 child_path
转换为相对于 tree_model_sort
的路径。也就是说,child_path
指向子模型中的路径。返回的路径将指向排序模型中的同一行。如果 child_path
不是子模型上的有效路径,则返回 NULL
。
已弃用:4.10
gtk_tree_model_sort_convert_path_to_child_path
将 sorted_path
转换为 tree_model_sort
的子模型上的路径。也就是说,sorted_path
指向 tree_model_sort
中的位置。返回的路径将指向未排序模型中相同的位置。如果 sorted_path
未指向子模型中的位置,则返回 NULL
。
已弃用:4.10
gtk_tree_model_sort_reset_default_sort_func
这将默认排序函数重置为“未排序”状态。也就是说,它与子模型的顺序相同。仅当 GtkTreeModelSort
处于“未排序”状态时,它才会重新对模型进行排序,以使其与子模型处于相同的顺序。
已弃用:4.10
从 GtkTreeDragSource (3) 继承的方法
gtk_tree_drag_source_drag_data_delete
让 GtkTreeDragSource
删除路径 path
上的行,因为它通过拖放移动到了其他地方。如果删除失败,因为路径 path
不再存在或出于某些特定于模型的原因,则返回 FALSE
。应该稳健地处理在模型中不再找到的路径 path
!
已弃用:4.10
gtk_tree_drag_source_drag_data_get
要求 GtkTreeDragSource
返回表示路径 path
处的行的 GdkContentProvider
。应该稳健地处理在模型中不再找到的路径 path
!
已弃用:4.10
gtk_tree_drag_source_row_draggable
询问 GtkTreeDragSource
是否可以将特定行用作 DND 操作的来源。如果源不实现此界面,则该行被认为是可拖动的。
已弃用:4.10
从 GtkTreeModel (28) 继承的方法
有关方法的完整列表,请参见 GtkTreeModel。
从 GtkTreeSortable (6) 继承的方法
gtk_tree_sortable_get_sort_column_id
使用当前排序列和排序顺序填充 sort_column_id
和 order
。除非 sort_column_id
为 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID
或 GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID
,否则它将返回 TRUE
。
已弃用:4.10
gtk_tree_sortable_has_default_sort_func
如果模型具有默认排序函数,则返回 TRUE
。这主要由 GtkTreeViewColumns 用于确定模型是否可以返回默认状态。
已弃用:4.10
gtk_tree_sortable_set_default_sort_func
将排序时使用的默认比较函数设置为 sort_func
。如果 sortable
的当前排序列 ID 为 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID
,则模型将使用此函数进行排序。
已弃用:4.10
gtk_tree_sortable_set_sort_column_id
将当前排序列设置为 sort_column_id
。在发出 GtkTreeSortable::sort-column-changed
信号之后,sortable
将重新进行排序以反映此更改。sort_column_id
可以是普通列 ID,也可以是以下特殊值之一:。
已弃用:4.10
gtk_tree_sortable_set_sort_func
将排序时使用的比较函数设置为 sort_func
。如果 sortable
的当前排序列 ID 与 sort_column_id
相同,则模型将使用此函数进行排序。
已弃用:4.10
gtk_tree_sortable_sort_column_changed
在 sortable
上发出 GtkTreeSortable::sort-column-changed
信号。
已弃用:4.10
信号
从 GObject 继承的信号 (1)
GObject::notify
当对象的某个属性通过 g_object_set_property()、g_object_set() 等函数设置值时,就会在对象上发出 notify 信号。
从 GtkTreeModel 继承的信号 (5)
GtkTreeModel::row-changed
当模型中的某行已更改时,就会发出此信号。
GtkTreeModel::row-deleted
当删除某一行时,便会发出此信号。
GtkTreeModel::row-has-child-toggled
当某行获取第一个子行或最后失去其子行时,便会发出此信号。
GtkTreeModel::row-inserted
当在模型中插入新行时,便会发出此信号。
GtkTreeModel::rows-reordered
当 GtkTreeModel
中某个节点的子节点重新排序时,便会发出此信号。
从 GtkTreeSortable 继承的信号 (1)
GtkTreeSortable::sort-column-changed
::sort-column-changed 信号在更改 sortable
的排序列或排序顺序时发出。此信号在对 sortable
的内容重新排序之前发出。