接口

GtkSelectionModel

描述 [src]

interface Gtk.SelectionModel : Gio.ListModel

GtkSelectionModel 是一种可为列表模型添加选中支持的接口。

此支持随后可被使用列表模型的小组件使用,以添加选中和取消选中各种项的功能。

GTK 提供了最常见选中模式(例如 GtkSingleSelection)的默认实现,因此,只有在你希望详细控制选中项的处理方式时,才需要实现此接口。

GtkSelectionModel 支持每项一个布尔值,以表示项是否被选中。这可通过 gtk_selection_model_is_selected() 查询。当一个或多个项的选中状态发生更改时,该模型将通过调用 gtk_selection_model_selection_changed() 函数发出 GtkSelectionModel::selection-changed 信号。在此信号中给定的位置可能会发生选中状态更改,尽管这不一定是必需的。对于通过 GListModel::items-changed 信号添加到模型的新项是否选中,取决于该实现。

请注意,通过 GListModel::items-changed 添加的项可能已被选中,并且不会针对它们发出 GtkSelectionModel::selection-changed。因此,为了跟踪哪些项被选中,有必要同时监听两个信号。

此外,该接口可以公开用于选中和取消选中项的功能。如果实现了这些函数,GTK 的列表小组件将允许用户选中和取消选中项。但是,GtkSelectionModel 可以自由地仅部分实现它们,甚至不实现它们。在这种情况下,小组件将不支持未实现的操作。

当由模型支持选择或取消选择时,选择函数的返回值并非指示已选择还是已取消选择。它们仅表示完全失败,例如当这种选择模式不受模型支持时。

选择可能会异步发生,因此找出某个项目何时被选择的唯一可靠方法是侦听指示选择的信号。

先决条件

为了实现 SelectionModel,您的类型必须继承自GListModel

实例方法

gtk_selection_model_get_selection

获取包含模型中当前所有已选择项的集合。

gtk_selection_model_get_selection_in_range

获取范围内已选择项的集合。

gtk_selection_model_is_selected

检查给定的项目是否已选择。

gtk_selection_model_select_all

请求选择模型中的所有项目。

gtk_selection_model_select_item

请求在模型中选择一个项目。

gtk_selection_model_select_range

请求在模型中选择项目的一个范围。

gtk_selection_model_selection_changed

用于实施 GtkSelectionModel 的帮助器函数。

gtk_selection_model_set_selection

进行选择更改。

gtk_selection_model_unselect_all

请求取消选择模型中的所有项目。

gtk_selection_model_unselect_item

请求取消选择模型中的一个项目。

gtk_selection_model_unselect_range

请求取消选择模型中项的一个范围。

信号

Gtk.SelectionModel::selection-changed

model 中某些项的选择状态发生改变时发出。

接口结构

struct GtkSelectionModelInterface {
  gboolean (* is_selected) (
    GtkSelectionModel* model,
    guint position
  );
  GtkBitset* (* get_selection_in_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items
  );
  gboolean (* select_item) (
    GtkSelectionModel* model,
    guint position,
    gboolean unselect_rest
  );
  gboolean (* unselect_item) (
    GtkSelectionModel* model,
    guint position
  );
  gboolean (* select_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items,
    gboolean unselect_rest
  );
  gboolean (* unselect_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items
  );
  gboolean (* select_all) (
    GtkSelectionModel* model
  );
  gboolean (* unselect_all) (
    GtkSelectionModel* model
  );
  gboolean (* set_selection) (
    GtkSelectionModel* model,
    GtkBitset* selected,
    GtkBitset* mask
  );
  
}

GtkSelectionModel 接口的虚拟函数列表。无需实现任何函数,但除非实现了 GtkSelectionModel::is_selected(),否则无法选择集合中的项目。

模型不需要实现任何函数来支持选择或取消选择项目。当然,如果模型不这样做,则意味着用户无法使用模型在列表小组件中选择或取消选择项目。

所有选择函数都会回退到 GtkSelectionModel::set_selection(),因此仅实现该函数足以获得完全选择支持。

接口成员
is_selected
gboolean (* is_selected) (
    GtkSelectionModel* model,
    guint position
  )
 

返回给定位置的项目是否已选择。

get_selection_in_range
GtkBitset* (* get_selection_in_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items
  )
 

返回一个位集,其中包含给定范围内当前所有已选择的项目。默认情况下,此函数将对给定范围内所有项目的 GtkSelectionModel::is_selected()

select_item
gboolean (* select_item) (
    GtkSelectionModel* model,
    guint position,
    gboolean unselect_rest
  )
 

选择给定位置的项目。如果已知操作将失败,则返回 FALSE

unselect_item
gboolean (* unselect_item) (
    GtkSelectionModel* model,
    guint position
  )
 

取消选择给定位置的项目。如果已知操作将失败,则返回 FALSE

select_range
gboolean (* select_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items,
    gboolean unselect_rest
  )
 

选择给定范围的所有项目。如果该操作不受支持或已知对所有项目都将失败,则返回 FALSE

unselect_range
gboolean (* unselect_range) (
    GtkSelectionModel* model,
    guint position,
    guint n_items
  )
 

取消选择给定范围内所有项目的。如果该操作不受支持或已知对所有项目都将失败,则返回 FALSE

全选
gboolean (* select_all) (
    GtkSelectionModel* model
  )
 

选中模型中的所有项目。如果操作不受支持或已知对于所有项目都将失败,则返回FALSE

取消全选
gboolean (* unselect_all) (
    GtkSelectionModel* model
  )
 

取消选中模型中的所有项目。如果操作不受支持或已知对于所有项目都将失败,则返回FALSE

set_selection
gboolean (* set_selection) (
    GtkSelectionModel* model,
    GtkBitset* selected,
    GtkBitset* mask
  )
 

将蒙版中所有项目的选定状态设为已选中。有关此函数的详细说明,请参见 gtk_selection_model_set_selection()

Virtual methods

Gtk.SelectionModel.get_selection_in_range

获取范围内已选择项的集合。

Gtk.SelectionModel.is_selected

检查给定的项目是否已选择。

Gtk.SelectionModel.select_all

请求选择模型中的所有项目。

Gtk.SelectionModel.select_item

请求在模型中选择一个项目。

Gtk.SelectionModel.select_range

请求在模型中选择项目的一个范围。

Gtk.SelectionModel.set_selection

进行选择更改。

Gtk.SelectionModel.unselect_all

请求取消选择模型中的所有项目。

Gtk.SelectionModel.unselect_item

请求取消选择模型中的一个项目。

Gtk.SelectionModel.unselect_range

请求取消选择模型中项的一个范围。