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 。

层级

hierarchy this GtkTreeModelFilter implements_0 GtkTreeDragSource this--implements_0 implements_1 GtkTreeModel this--implements_1 ancestor_0 GObject ancestor_0--this

祖级

实例方法

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_iter_to_child_iter

child_iter 设置为指向 filter_iter 所指向的行。

弃用: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_get_model

返回指向 filter 的子模型的指针。

弃用:4.10 

gtk_tree_model_filter_refilter

针对子模型中的每一行发出 ::row_changed,这会让过滤器重新评估某个行是否可见 。

弃用:4.10 

gtk_tree_model_filter_set_modify_func

使用 n_columnstypes 参数,你可以为该模型指定一个 column type 数组(将暴露到父模型/视图)。funcdatadestroy 参数用于指定修改函数。修改函数将针对每个数据访问进行调用,它的目标是返回应该在使用修改函数的参数指定的位置显示的数据。

弃用: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 

GObject(43)继承的方法

有关所有方法的完整列表,请参阅 GObject

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

属性

Gtk.TreeModelFilter:child-model

树模型过滤器的子模型。

Gtk.TreeModelFilter:virtual-root

树模型过滤器的虚拟根。

信号

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 )

没有可用的描述。

虚拟方法

Gtk.TreeModelFilterClass.modify
没有可用的描述。

Gtk.TreeModelFilterClass.visible
没有可用的描述。