Интерфейс

ГиоListModel

Описание [источник]

interface Gio.ListModel : GObject.Object

GListModel — это интерфейс, представляющий mutable список GObject. Его основная задача — это модель для различных виджетов в пользовательских интерфейсах, таких как список perspectives, но он также может использоваться как удобный способ возвращения списков данных, с поддержкой повышения уровня.

Каждый объект в списке также может_raise_меняются в себе через определенный mechanism (обычно сигнал GObject::notify). Вgether с signal GListModel::items-changed, это обеспечивает список, который может изменяться в своей основе, и в котором также могут изменяться индивидуальные properties.

Хороший пример — это список видимых беспроводных точек доступа, где каждая точка доступа может отчитываться о динамических properties, таких как strength.

Важно отметить, что сам GListModel автоматически не закие/runtime изменения для каждого из единичных items. Он только отчитывается о runtime изменения для membership списка. Если вы хотите наблюдать изменения для themselves пак объектов, то вам нужно подсоединить сигналы к объектам, которые вас интересуют.

Все items в GListModel are того же type (или derived from). Метод g_list_model_get_item_type() возвращает этот тип. Тип может быть interface, в этом случае все objects в списке должны implement этот interface.

Семантически они близки к array: g_list_model_get_n_items() возвращает количество items в списке, и g_list_model_get_item() возвращает item в position (начиная с 0). В order to allow implementations to calculate the list length lazily, вы также можете iterate над items: начиная с 0, постоянно calling g_list_model_get_item() до тех пор, пока он не вернет NULL.

Реализация может создавать objects lazily, но должна究竟и  провозгласить одна и та же object для given position, пока все ссылки на нее蕊're gone.

С другой стороны, ожидается, что consumer будет только удерживать references на objects, которые currently ‘user visible’, чтобы facilitate максимальный уровень laziness in the implementation of the list и to reduce the number of signal connections needed at a given  time.

Этот interface предназначен только для использования из single thread. Thread в котором это .

随着时间的推移,为列表模型实现提供属性item-typen-items已成为一个良好的实践,以简化与它们的工作。虽然这不是强制要求的,但建议实施这些两个属性。它们应分别返回g_list_model_get_item_type()g_list_model_get_n_items()的值,并被定义为这样的。

properties[PROP_ITEM_TYPE] =
  g_param_spec_gtype ("item-type", NULL, NULL, G_TYPE_OBJECT,
                      G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
properties[PROP_N_ITEMS] =
  g_param_spec_uint ("n-items", NULL, NULL, 0, G_MAXUINT, 0,
                     G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);

先决条件

为了实现ListModel,您的类型必须继承自GObject

实现

实例方法

g_list_model_get_item

获取在position处的项目。

since: 2.44

g_list_model_get_item_type

获取列表中项目的类型。

since: 2.44

g_list_model_get_n_items

获取列表中项目的数量。

since: 2.44

g_list_model_get_object

获取在position处的项目。

since: 2.44

g_list_model_items_changed

list上发出GListModel::items-changed信号。

since: 2.44

信号

Gio.ListModel::items-changed

每次向list中添加或删除项目时,都会发出此信号。在position处,移除了removed项目,并在其位置添加了added项目。

since: 2.44

接口结构

struct GioListModelInterface {
  GTypeInterface g_iface;
  GType (* get_item_type) (
    GListModel* list
  );
  guint (* get_n_items) (
    GListModel* list
  );
  GObject* (* get_item) (
    GListModel* list,
    guint position
  );
  
}

GListModel的虚拟函数表。

接口成员
g_iface
GTypeInterface
 

父类 GTypeInterface

get_item_type
GType (* get_item_type) (
    GListModel* list
  )
 

g_list_model_get_item_type()的虚拟函数指针。

get_n_items
guint (* get_n_items) (
    GListModel* list
  )
 

g_list_model_get_n_items()的虚拟函数指针。

get_item
GObject* (* get_item) (
    GListModel* list,
    guint position
  )
 

g_list_model_get_item()的虚拟函数指针。

虚拟方法

Gio.ListModel.get_item

获取在position处的项目。如果position大于列表中项目的数量,则返回NULL

since: 2.44

Gio.ListModel.get_item_type

获取列表中项目的类型。

since: 2.44

获取list中项目的类型。

获取列表中项目的数量。

since: 2.44