接口
GtkCellLayout
已弃用: 4.10
描述 [src]
interface Gtk.CellLayout : GObject.Object
用于打包单元格的接口
GtkCellLayout
是一个接口,由希望为打包单元格、设置属性和数据函数提供类似于 GtkTreeViewColumn
的API 的所有对象实现。
GtkCellLayout
实现提供的显着特性之一是属性。通过属性,你可以以灵活的方式设置属性。它们可以像常规属性一样仅设置为常数值。但它们也可以映射到基础树模型中的一列,方法是使用 gtk_cell_layout_set_attributes(),这意味着当单元格渲染器渲染属性时,属性的值可以随单元格的不同而发生变化。最后,可以使用 gtk_cell_layout_set_cell_data_func()
指定一个函数,在渲染的每个单元格中调用此函数以确定属性的值。
GtkCellLayout 作为 GtkBuildable
GtkCellLayout 的实现,它还实现了 GtkBuildable 接口(GtkCellView
、GtkIconView
、GtkComboBox
、GtkEntryCompletion
、GtkTreeViewColumn
)接受 GtkCellRenderer
对象作为 UI 定义中 <child>
元素。它们支持其子元素的自定义 <attributes>
元素,该元素可以包含多个 <attribute>
元素。每个 <attribute>
元素都有一个名称属性,它指定单元格渲染器的属性;元素的内容是属性值。
下面是指定属性的 UI 定义片段的示例
<object class="GtkCellView">
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
此外,对于使用 GtkCellArea
布局单元格的 GtkCellLayout
实现(GTK 中的所有 GtkCellLayout
都使用 GtkCellArea
)单元格属性也可以通过通过指定自定义的 <cell-packing>
属性来定义此格式,该属性可以包含多个 <property>
元素。
下面是指定单元格属性的 UI 定义片段
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererText"/>
<cell-packing>
<property name="align">True</property>
<property name="expand">False</property>
</cell-packing>
</child>
</object>
子类化 GtkCellLayout 实现
在子类化实现 GtkCellLayout
的窗口小部件(如 GtkIconView
或 GtkComboBox
)时,需要考虑这些窗口小部件内部使用 GtkCellArea
的事实。这些窗口小部件会将单元格区域显示为仅构造的属性。这意味着可以执行以下操作,
GtkWIdget *combo =
g_object_new (GTK_TYPE_COMBO_BOX, "cell-area", my_cell_area, NULL);
例如,使用自定义单元格区域与组合框。但仅在实例 init()
函数运行后才会初始化构造属性,这意味着在子类 init()
函数中使用依赖于单元格区域存在的函数将导致实例化默认单元格区域。在这种情况下,将忽略提供的构造属性值(并会显示警告,提醒您出现该问题)。
static void
my_combo_box_init (MyComboBox *b)
{
GtkCellRenderer *cell;
cell = gtk_cell_renderer_pixbuf_new ();
// The following call causes the default cell area for combo boxes,
// a GtkCellAreaBox, to be instantiated
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (b), cell, FALSE);
...
}
GtkWidget *
my_combo_box_new (GtkCellArea *area)
{
// This call is going to cause a warning about area being ignored
return g_object_new (MY_TYPE_COMBO_BOX, "cell-area", area, NULL);
}
如果您不重视通过派生窗口小部件支持其他单元格区域,则不必为此感到担忧。如果您想支持其他单元格区域,则可以通过将存在问题的调用从 init()
移动到您类的 constructor()
中来支持。
已弃用:4.10
列表视图使用窗口小部件显示其内容。请参阅 GtkLayoutManager
以了解布局管理器委托对象。
先决条件
为实现 CellLayout,您的类型必须从GObject
继承。
实例方法
gtk_cell_layout_get_area
返回基础的 GtkCellArea
,如果在 GtkCellArea
上调用,则可能是 cell_layout
;如果 cell_layout
未使用 GtkCellArea
,则可能是 NULL
。
已弃用: 4.10
gtk_cell_layout_pack_end
将 cell
添加到 cell_layout
的末尾。如果 expand
为 FALSE
,则 cell
分配的空间仅为其所需空间。所有未使用的空间都在 expand
为 TRUE
的单元格中平均分配。
已弃用: 4.10
gtk_cell_layout_pack_start
将 cell
封装到 cell_layout
的开头。如果 expand
为 FALSE
,则 cell
分配的空间仅为其所需空间。所有未使用的空间都在 expand
为 TRUE
的单元格中平均分配。
已弃用: 4.10
接口结构
struct GtkCellLayoutIface {
void (* pack_start) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell,
gboolean expand
);
void (* pack_end) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell,
gboolean expand
);
void (* clear) (
GtkCellLayout* cell_layout
);
void (* add_attribute) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell,
const char* attribute,
int column
);
void (* set_cell_data_func) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell,
GtkCellLayoutDataFunc func,
gpointer func_data,
GDestroyNotify destroy
);
void (* clear_attributes) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell
);
void (* reorder) (
GtkCellLayout* cell_layout,
GtkCellRenderer* cell,
int position
);
GList* (* get_cells) (
GtkCellLayout* cell_layout
);
GtkCellArea* (* get_area) (
GtkCellLayout* cell_layout
);
}
没有说明。
接口成员
pack_start |
|
将单元格封装到 cell_layout 的开头。 |
|
pack_end |
|
将单元格添加到 cell_layout 的末尾。 |
|
clear |
|
取消设置 cell_layout 上所有渲染器上的所有映射,并从 cell_layout 中移除所有渲染器。 |
|
add_attribute |
|
向 cell_layout 中的列表添加一个属性映射。 |
|
set_cell_data_func |
|
设置要用于 cell_layout 的 |
|
clear_attributes |
|
清除以前使用 gtk_cell_layout_set_attributes() 设置的所有现有属性。 |
|
reorder |
|
在 position 重新插入单元格。 |
|
get_cells |
|
获取已添加到 cell_layout 的单元格渲染器。 |
|
get_area |
|
获取基础 |
虚拟方法
Gtk.CellLayout.get_area
返回基础的 GtkCellArea
,如果在 GtkCellArea
上调用,则可能是 cell_layout
;如果 cell_layout
未使用 GtkCellArea
,则可能是 NULL
。
已弃用: 4.10
Gtk.CellLayout.pack_end
将 cell
添加到 cell_layout
的末尾。如果 expand
为 FALSE
,则 cell
分配的空间仅为其所需空间。所有未使用的空间都在 expand
为 TRUE
的单元格中平均分配。
已弃用: 4.10
Gtk.CellLayout.pack_start
将 cell
封装到 cell_layout
的开头。如果 expand
为 FALSE
,则 cell
分配的空间仅为其所需空间。所有未使用的空间都在 expand
为 TRUE
的单元格中平均分配。
已弃用: 4.10