lang: Also allow Gtk.ListHeader in factory template

This commit is contained in:
James Westman 2024-05-04 12:27:12 -05:00
parent c502dee36b
commit 07e824d8e7
4 changed files with 23 additions and 4 deletions

View file

@ -11,7 +11,13 @@ from .types import TypeName
class ExtListItemFactory(AstNode): class ExtListItemFactory(AstNode):
grammar = [UseExact("id", "template"), Optional(TypeName), ObjectContent] grammar = [
UseExact("id", "template"),
Mark("typename_start"),
Optional(TypeName),
Mark("typename_end"),
ObjectContent,
]
@property @property
def id(self) -> str: def id(self) -> str:
@ -57,16 +63,17 @@ class ExtListItemFactory(AstNode):
def unique_in_parent(self): def unique_in_parent(self):
self.validate_unique_in_parent("Duplicate template block") self.validate_unique_in_parent("Duplicate template block")
@validate() @validate("typename_start", "typename_end")
def type_is_list_item(self): def type_is_list_item(self):
if self.type_name is not None: if self.type_name is not None:
if self.type_name.glib_type_name not in ( if self.type_name.glib_type_name not in (
"GtkListItem", "GtkListItem",
"GtkListHeader",
"GtkColumnViewRow", "GtkColumnViewRow",
"GtkColumnViewCell", "GtkColumnViewCell",
): ):
raise CompileError( raise CompileError(
f"Only Gtk.ListItem, Gtk.ColumnViewRow, or Gtk.ColumnViewCell is allowed as a type here" f"Only Gtk.ListItem, Gtk.ListHeader, Gtk.ColumnViewRow, or Gtk.ColumnViewCell is allowed as a type here"
) )
@validate("template") @validate("template")

View file

@ -1 +1 @@
4,3,17,Only Gtk.ListItem, Gtk.ColumnViewRow, or Gtk.ColumnViewCell is allowed as a type here 4,11,6,Only Gtk.ListItem, Gtk.ListHeader, Gtk.ColumnViewRow, or Gtk.ColumnViewCell is allowed as a type here

View file

@ -1,6 +1,10 @@
using Gtk 4.0; using Gtk 4.0;
ColumnView { ColumnView {
header-factory: BuilderListItemFactory {
template ListHeader {}
};
row-factory: BuilderListItemFactory { row-factory: BuilderListItemFactory {
template ColumnViewRow {} template ColumnViewRow {}
}; };

View file

@ -7,6 +7,14 @@ corresponding .blp file and regenerate this file with blueprint-compiler.
<interface> <interface>
<requires lib="gtk" version="4.0"/> <requires lib="gtk" version="4.0"/>
<object class="GtkColumnView"> <object class="GtkColumnView">
<property name="header-factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="GtkListHeader"></template>
</interface>]]></property>
</object>
</property>
<property name="row-factory"> <property name="row-factory">
<object class="GtkBuilderListItemFactory"> <object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <property name="bytes"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>