pub struct ListSource {
pub first_visible: Option<Rc<dyn Fn(usize)>>,
pub len: Rc<dyn Fn() -> usize>,
pub token_at: Rc<dyn Fn(usize) -> u64>,
pub bind_row: Rc<dyn Fn(usize, RawHandle)>,
pub recycle: Rc<dyn Fn(RawHandle)>,
pub release: Rc<dyn Fn(RawHandle)>,
pub layout_cell: Rc<dyn Fn(RawHandle, f64)>,
pub cell_height: Rc<dyn Fn(RawHandle) -> f64>,
pub reorder: Option<ListReorder>,
pub delete: Option<ListDelete>,
pub swipe: Option<ListSwipe>,
}Expand description
The synchronous row-pull closures for recycling lists (docs/list.md, §10). day-core injects one
per LIST host via Toolkit::attach_list; a recycling backend stores it and calls it from
its native data-source (on the UI thread, outside any day-core borrow). Each closure re-enters
day-core, so, unlike EventSink, these run to completion synchronously (bind_row even
flushes + lays out the row before returning, so the host can measure the cell immediately).
Fields§
§first_visible: Option<Rc<dyn Fn(usize)>>Report the first actually visible row (exclude overscan). Enqueue-only; optional, so hosts without a viewport binding incur no app event work.
len: Rc<dyn Fn() -> usize>Current row count.
token_at: Rc<dyn Fn(usize) -> u64>Stable identity token for the row at index (for native diffing / animation).
bind_row: Rc<dyn Fn(usize, RawHandle)>Build (first use of this cell) or rebind (recycled cell) row index into the native cell.
recycle: Rc<dyn Fn(RawHandle)>The native cell left the viewport; Day may drop per-cell bookkeeping (optional).
release: Rc<dyn Fn(RawHandle)>The native host is done with this cell for good (a GtkListItemFactory::teardown, a
UITableViewCell deallocating): Day disposes the row it built there, its scope, nodes
and element ids. Without this a host that discards cells, as every pool does on a far
jump, leaves one dead row behind in day-core per discarded cell. Safe inside a day-core
borrow (the work is held for the borrow’s end) and for a cell Day never saw.
layout_cell: Rc<dyn Fn(RawHandle, f64)>Re-lay the row bound to this cell at width, called from the cell’s own native layout
pass, the hook TreeSource::layout_cell already gives trees. day-core lays a row at the
LIST’s width first, which is right wherever the cell is the row itself; a backend
whose native row wraps the cell in chrome (GtkListView’s themed row node pads it)
corrects it here, so the row fits the cell the platform gave it instead of holding the
whole list wider than its frame. Skips quietly when called inside a day-core borrow (a
snapshot pass).
cell_height: Rc<dyn Fn(RawHandle) -> f64>The height day-core last laid the row bound to this cell at: the row’s own height,
padding included, as RowHeight resolves it. A backend whose cell measures itself
(GtkListView’s DayCell) reports it as the cell’s height, so a padded row keeps its
bottom padding rather than the height of its last child’s frame. 0.0 before the row’s
first layout, or inside a day-core borrow.
reorder: Option<ListReorder>Drag-to-reorder closures, present when ListProps::reorderable (docs/list.md). None on
non-reorderable lists; backends must not enable their drag machinery without it.
delete: Option<ListDelete>Swipe-to-delete closures, present when ListProps::deletable (docs/list.md). None on
non-deletable lists; backends must not offer their delete affordance without it.
swipe: Option<ListSwipe>Swipe-actions closures, present when ListProps::swipe_actions (docs/list.md). None on
lists that declared none; backends must not install their row-action machinery
without it.
Trait Implementations§
Source§impl Clone for ListSource
impl Clone for ListSource
Source§fn clone(&self) -> ListSource
fn clone(&self) -> ListSource
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more