Skip to content

Commit 34d9c65

Browse files
authored
Grid View: Port to Python (#209)
1 parent 8d80a9a commit 34d9c65

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

src/Grid View/main.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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+
grid_view = workbench.builder.get_object("grid_view")
9+
add = workbench.builder.get_object("add")
10+
remove = workbench.builder.get_object("remove")
11+
12+
item = 1
13+
14+
string_model = Gtk.StringList.new(
15+
["Default Item 1", "Default Item 2", "Default Item 3"]
16+
)
17+
18+
model = Gtk.SingleSelection(model=string_model)
19+
20+
factory_for_grid_view = Gtk.SignalListItemFactory()
21+
22+
23+
def on_factory_for_grid_view_setup(_factory, list_item):
24+
list_box = Gtk.Box(width_request=160, height_request=160, css_classes=["card"])
25+
label = Gtk.Label(halign=Gtk.Align.CENTER, hexpand=True, valign=Gtk.Align.CENTER)
26+
list_box.append(label)
27+
list_item.set_child(list_box)
28+
29+
30+
def on_factory_for_grid_view_bind(_factory, list_item):
31+
list_box = list_item.get_child()
32+
model_item = list_item.get_item()
33+
label_widget = list_box.get_last_child()
34+
35+
label_widget.set_label(model_item.get_string())
36+
37+
38+
factory_for_grid_view.connect("setup", on_factory_for_grid_view_setup)
39+
factory_for_grid_view.connect("bind", on_factory_for_grid_view_bind)
40+
41+
grid_view.set_model(model)
42+
grid_view.set_factory(factory_for_grid_view)
43+
44+
45+
def on_item_changed(_list, position, removed, added):
46+
print(
47+
f"position: {position}, Item removed? {removed != 0}, Item added? {added != 0}"
48+
)
49+
50+
51+
def on_selection_changed(*_):
52+
selected_item = model.get_selected()
53+
print(f"Model item selected from view: {string_model.get_string(selected_item)}")
54+
55+
56+
string_model.connect("items-changed", on_item_changed)
57+
model.connect("selection-changed", on_selection_changed)
58+
59+
60+
def on_add_clicked(*_):
61+
global item
62+
new_item = f"New item {item}"
63+
string_model.append(new_item)
64+
item += 1
65+
66+
67+
def on_remove_clicked(*_):
68+
selected_item = model.get_selected()
69+
string_model.remove(selected_item)
70+
71+
72+
add.connect("clicked", on_add_clicked)
73+
remove.connect("clicked", on_remove_clicked)

0 commit comments

Comments
 (0)