Skip to content

Commit 8d80a9a

Browse files
authored
Added list view section demo (#206)
1 parent 66c219c commit 8d80a9a

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using Gtk 4.0;
2+
using Adw 1;
3+
4+
Adw.StatusPage {
5+
title: _("List View with Sections");
6+
description: _("Divide items in a list view with sections");
7+
valign: start;
8+
9+
Adw.Clamp {
10+
maximum-size: 360;
11+
12+
Box {
13+
orientation: vertical;
14+
spacing: 18;
15+
16+
Box {
17+
halign: center;
18+
19+
LinkButton {
20+
label: _("API Reference");
21+
uri: "https://docs.gtk.org/gtk4/iface.SectionModel.html";
22+
}
23+
24+
LinkButton {
25+
label: _("Documentation");
26+
uri: "https://docs.gtk.org/gtk4/section-list-widget.html#sections";
27+
}
28+
}
29+
30+
ScrolledWindow {
31+
height-request: 330;
32+
has-frame: true;
33+
34+
child: ListView list_view {
35+
factory: SignalListItemFactory item_factory {};
36+
37+
header-factory: SignalListItemFactory header_factory {};
38+
};
39+
}
40+
}
41+
}
42+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "layout",
3+
"description": "Divide items in a list view with sections",
4+
"panels": ["ui", "preview"],
5+
"autorun": true
6+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import gi
2+
3+
gi.require_version("Gtk", "4.0")
4+
gi.require_version("Adw", "1")
5+
from gi.repository import Gtk
6+
import workbench
7+
8+
list_view = workbench.builder.get_object("list_view")
9+
item_factory = workbench.builder.get_object("item_factory")
10+
header_factory = workbench.builder.get_object("header_factory")
11+
12+
13+
class CustomModel(Gtk.StringList, Gtk.SectionModel):
14+
def __init__(self):
15+
super().__init__()
16+
17+
def do_get_section(self, position):
18+
start = (position // 5) * 5
19+
end = start + 5
20+
return (start, end)
21+
22+
23+
def on_setup_item(_, list_item):
24+
list_item.set_child(Gtk.Label(margin_start=12, xalign=0))
25+
26+
27+
def on_bind_item(_, list_item):
28+
item = list_item.get_item()
29+
label = list_item.get_child()
30+
31+
label.set_label(item.get_string())
32+
33+
34+
def on_setup_header(_, list_item):
35+
list_item.set_child(Gtk.Label(label="Header", xalign=0))
36+
37+
38+
custom_model = CustomModel()
39+
40+
for i in range(0, 200):
41+
custom_model.append(f"Item {i}")
42+
43+
item_factory.connect("setup", on_setup_item)
44+
item_factory.connect("bind", on_bind_item)
45+
46+
header_factory.connect("setup", on_setup_header)
47+
48+
selection_model = Gtk.NoSelection(model=custom_model)
49+
50+
list_view.set_model(selection_model)

0 commit comments

Comments
 (0)