Grid Wrap
Demonstrates the GridWrap widget - a grid layout with virtualized rendering for efficiently displaying many items.

Features
- Grid Layout: Automatically arranges items in a grid
- Virtualized Rendering: Only renders visible items for performance
- Selection: Click to select/deselect items
- Callbacks: Length(), CreateItem(), UpdateItem()
- Events: OnSelected(), OnUnselected()
Code
require(["v0.2", "@gui"])
// Sample data - image gallery
let images = [
"Item 1", "Item 2", "Item 3", "Item 4",
"Item 5", "Item 6", "Item 7", "Item 8",
"Item 9", "Item 10", "Item 11", "Item 12"
]
let statusLabel = widget.NewLabel("Click an item to select")
let grid = widget.NewGridWrap()
// Set data length
grid.Length(() => {
return len(images)
})
// Create template item
// Using buttons provides consistent sizing and interactivity
grid.CreateItem(() => {
let btn = widget.NewButton("Template", () => {})
btn.Importance = constants.ImportanceLow
return btn
})
// Update item with data
grid.UpdateItem((id, item) => {
item.SetText(images[id])
})
// Handle selection
grid.OnSelected((id) => {
statusLabel.SetText(sprintf("Selected: %s", images[id]))
})
// Handle deselection
grid.OnUnselected((id) => {
statusLabel.SetText("Item deselected")
})
// Refresh to display data
grid.Refresh()
let layout = container.NewBorder(
statusLabel, // top
nil, // bottom
nil, // left
nil, // right
grid // center
)
window.SetContent(layout)Running
cd examples/17-gridwrap
go run main.goOr with the fynerisor CLI:
fynerisor script.risor