类
GtkTreeModelFilter
弃用:4.10
说明 [src]
class Gtk.TreeModelFilter : GObject.Object
implements Gtk.TreeDragSource, Gtk.TreeModel {
/* No available fields */
}
一个 GtkTreeModel
,它隐藏了基础树模型中的某些部分
一个 GtkTreeModelFilter
是一个树模型,它包装另一个树模型,并且可以执行以下操作
-
基于“可见列”的数据过滤特定行,一个存储布尔值的列指示行是否应该被过滤,或者基于“可见函数”的返回值,该函数获取一个模型、迭代器和用户数据并返回一个布尔值,指示行是否应被过滤或 不。
-
使用修改函数修改模型的“外观”。此方法功能极为强大,既允许只更改一些值,也允许基于给定的子模型创建一个完全不同的模型。
-
设置一个不同的根节点,也称为“虚拟根”。可以在构造时传入一个指示过滤器根节点的
GtkTreePath
。
基本的 API 类似于 GtkTreeModelSort
。有关其使用示例,请参阅 GtkTreeModelSort
部分。
使用 GtkTreeModelFilter
时,重要的是意识到 GtkTreeModelFilter
维护其客户端中所有可见节点的内部缓存。该缓存可能是子模型公开的树的一个子树。当没有必要不影响引用计数方案公开的缓存机制时,GtkTreeModelFilter
不会缓存整个子模型。如果子模型实现了引用计数,由于引用计数规则 3,不必要的信号可能不会发出,请参阅 GtkTreeModel
文档。(请注意,比如 GtkTreeStore
并未实现引用计数,并且始终会发出所有信号,即使接收节点 不 可见)。
因此,可能可见函数存在限制。通常,可见函数应仅使用节点的数据或属性,以确定必须确定其可见状态的节点、其兄弟节点或其父节点。通常,依赖于任何子节点的状态是不可能的,除非明确引用这些子节点。当没有这样的引用时,可能不会收到这些子节点的任何信号(参见 GtkTreeModel
部分中的引用计数规则 3)。
根据其子节点的状态确定给定节点的可见状态是一个经常发生的用例。因此,GtkTreeModelFilter
明确支持这一点。例如,当节点没有任何子节点时,你可能不希望该节点可见。一旦向节点的子级添加了第一行(或删除了最后一行),节点的可见性应该 更新。
这会向父节点引入来自子节点的依赖关系。为了实现这一点,GtkTreeModelFilter
必须确保从子模型接收必要的信号。通过为对 GtkTreeModelFilter
‘的客户端显示为可见节点的所有节点构建子级(如果有)并在该级别的第一个节点上获取引用,可以达成这一目的。此外,对于每个行插入、行更改或行删除信号(包括由于节点未缓存而未被处理的信号),GtkTreeModelFilter
会检查是否存在任何父节点的可见性状态已 更改。
但请注意,这种显式支持仅限于这两个用例。例如,如果你希望某个节点仅在子节点的子级别(更深 2 个级别)中的两个节点可见时才可见,你只能靠自己了。在这种情况下,依靠 GtkTreeStore
发射所有信号(因为它不实现引用计数),或者对于确实实现引用计数的模型,请自己获取这些子级别的引用。
已弃用:4.10 起
改为使用 GtkFilterListModel
。
实例方法
gtk_tree_model_filter_clear_cache
几乎永远都不应该调用此函数。它将清除任何未通过 gtk_tree_model_ref_node() 引用过的 filter
的已缓存迭代器。如果待过滤的子模型是静态模型(并且不常更改),并且对节点有过很多未引用的访问,这可能会很有用。此函数的副作用是,所有未引用的迭代器都将 无效。
弃用:4.10
gtk_tree_model_filter_convert_child_iter_to_iter
将 filter_iter
设置为指向 filter
中与 child_iter
所指向的行对应的行。如果未设置 filter_iter
,则 返回 FALSE
。
弃用:4.10
gtk_tree_model_filter_convert_child_path_to_path
将 child_path
转换为相对于 filter
的路径。也就是说,child_path
指向子模型中的路径。返回的路径将指向过滤后的模型中同一行。如果 child_path
不是子模型上的有效路径,或者指向了不在 filter
中可见的行,则 返回 NULL
。
弃用:4.10
gtk_tree_model_filter_convert_path_to_child_path
将 filter_path
转换为 filter
的子模型上的路径。也就是说,filter_path
指向 filter
中的位置。返回的路径将指向未经过滤的模型中同一位置。如果 filter_path
未指向子模型中的位置,则 返回 NULL
。
弃用:4.10
gtk_tree_model_filter_set_modify_func
使用 n_columns
和 types
参数,你可以为该模型指定一个 column type 数组(将暴露到父模型/视图)。func
、data
和 destroy
参数用于指定修改函数。修改函数将针对每个数据访问进行调用,它的目标是返回应该在使用修改函数的参数指定的位置显示的数据。
弃用:4.10
`` gtk_tree_model_filter_set_visible_column`
将 `child_model` 的 column
设置为 filter
应该查找可见性信息的列。`columns` 应该是一个 type 为 `G_TYPE_BOOLEAN` 的列,其中 `TRUE` 表示一行可见,`FALSE` 表示不可见。
弃用:4.10
gtk_tree_model_filter_set_visible_func
将用于对 filter
进行筛选时使用的可见函数设置为此 func
。如果给定行应该可见,则该函数应该返回 `TRUE`,否则返回 `FALSE`。
弃用: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。
信号
从 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
中的节点子行已重新排序时,会发出此 信号。
类结构
struct GtkTreeModelFilterClass {
GObjectClass parent_class;
gboolean (* visible) (
GtkTreeModelFilter* self,
GtkTreeModel* child_model,
GtkTreeIter* iter
);
void (* modify) (
GtkTreeModelFilter* self,
GtkTreeModel* child_model,
GtkTreeIter* iter,
GValue* value,
int column
);
}
没有可用的描述。
类成员
parent_class: GObjectClass
没有可用的描述。
visible: gboolean (* visible) ( GtkTreeModelFilter* self, GtkTreeModel* child_model, GtkTreeIter* iter )
没有可用的描述。
modify: void (* modify) ( GtkTreeModelFilter* self, GtkTreeModel* child_model, GtkTreeIter* iter, GValue* value, int column )
没有可用的描述。