Skip to main content

ListView

Struct ListView 

Source
pub struct ListView<T: 'static> { /* private fields */ }
Expand description

A virtualized scrollable list backed by a ListModel<T> or ListDataSource.

See the module-level documentation for the full feature overview.

Implementations§

Source§

impl<T: 'static> ListView<T>

Source

pub fn new( model: ListModel<T>, delegate: impl Fn(usize, &T, bool) -> Box<dyn Widget> + 'static, ) -> Self

Create a new ListView backed by a ListModel<T>.

The delegate closure receives (index, &item, selected) and returns a boxed widget for that item.

Source

pub fn from_source<S: ListDataSource<Item = T>>( source: S, delegate: impl Fn(usize, &T, bool) -> Box<dyn Widget> + 'static, ) -> Self

Create a ListView backed by a custom ListDataSource.

Use this for large or external datasets that cannot fit in memory. The source must implement ListDataSource<Item = T>.

Source

pub fn from_source_keyed<S: ListDataSource<Item = T>>( source: S, keyed: KeyedSelectionModel<S::Key>, delegate: impl Fn(usize, &T, bool) -> Box<dyn Widget> + 'static, ) -> Self
where S::Key: ItemKey,

Create a ListView backed by a custom ListDataSource with keyed selection. The KeyedSelectionModel<S::Key> tracks selection by source identity, so it survives reorders, filters, lazy window-slides, and stays consistent across two views of the same source. The view stays key-less (ListView<T>) — the index↔key mapping is captured from the concrete source here. Mutually exclusive with selection (the last one set wins).

Source

pub fn enabled(self, enabled: impl Into<Prop<bool>>) -> Self

Enable or disable the whole view. A disabled view greys out and stops accepting focus / selection / keyboard input (arena-gated).

Source

pub fn overscroll_behavior(self, behavior: OverscrollBehavior) -> Self

Set the scroll-chaining behavior at the boundary (default OverscrollBehavior::Chain; Contain disables chaining to an ancestor scrollable).

Source

pub fn smooth_scrolling(self, enabled: bool) -> Self

Enable or disable animated wheel scrolling (enabled by default).

Source

pub fn smooth_scroll_duration(self, duration: Duration) -> Self

Duration of the smooth scroll animation (default 150 ms).

Source

pub fn scroll_bar_style(self, style: ScrollBarMode) -> Self

How the scroll bar is displayed (default Permanent). Overlay and Thin float the bar over the content instead of reserving a layout column, mirroring ScrollArea::scroll_bar_style.

Source

pub fn item_height(self, height: f32) -> Self

Set the fixed height per item (default 32.0) — the uniform fast path. Mutually exclusive with item_height_fn and auto_item_height; the last mode setter wins.

Source

pub fn item_height_fn(self, f: impl Fn(usize) -> f32 + 'static) -> Self

Per-item heights from a callback. The callback must be pure (same index + same data → same height); it is re-swept from the first changed index on every model change. No measurement pass runs — this is the deterministic variable-height path.

Source

pub fn auto_item_height(self, estimated: f32) -> Self

Auto-measured item heights: each realized row is measured at the list’s content width (height-for-width), unrealized rows assume estimated. Scroll anchoring keeps content above the viewport stationary as estimates are corrected. estimated should be a typical row height — a wrong estimate only costs realization churn while measurements settle, never incorrect layout.

Source

pub fn spacing(self, spacing: f32) -> Self

Set spacing between items (default 0.0). With sections it also separates a section’s last item from the next header; a header sits directly on its first item.

Source

pub fn sections<P: SectionProvider>(self, provider: P) -> Self

Group the items into sections, with a full-width header row above each one. Takes the same provider as GridView::sections: grouping_sections partitions runs of equal keys, or implement SectionProvider yourself.

Headers are rows of the scrolled content: they are virtualized with the items, counted in the scroll extent, and compose with all three row-height modes. They are not items. Every index the view takes or reports — selection, on_activate, type-ahead, scroll_to_index, drag and drop — is still an index into the model, and the arrow keys step from item to item over the headers.

A drop on a header inserts at the boundary before its section’s first item, as a drop on the lower half of the row above the header does: one index, two places on screen. Which section the dropped rows join is the provider’s decision, made when it next counts. The insertion line assumes the counts survive the drop, as they do for grouping_sections and for any provider that does not read the items. Rows of this list dragged down from above the boundary then close the section before the header, since the source takes them out before putting them back, and the line is drawn above it. Rows dragged up from below, and rows dropped from another view, open the section after it, and the line is drawn under the header. A provider that groups by the items’ content, such as the ByArtist provider below, puts a moved item in the section of its own key wherever it is dropped. With such a provider the line at a section boundary shows where in the list the rows go, not which section they join.

The view reads the provider’s counts again after every change the model reports, so a provider that derives them from the live model follows inserts, removals and resets. grouping_sections groups the model as it is when called; for a model that changes, derive the counts on demand instead:

struct Song { artist: String, title: String }

/// Runs of songs by the same artist, read from the model each time.
struct ByArtist(ListModel<Song>);

impl ByArtist {
    fn runs(&self) -> Vec<(String, usize)> {
        let mut runs: Vec<(String, usize)> = Vec::new();
        for i in 0..self.0.len() {
            let artist = self.0.with_item(i, |s| s.artist.clone()).unwrap_or_default();
            match runs.last_mut() {
                Some((last, count)) if *last == artist => *count += 1,
                _ => runs.push((artist, 1)),
            }
        }
        runs
    }
}

impl SectionProvider for ByArtist {
    fn section_count(&self) -> usize { self.runs().len() }
    fn items_in_section(&self, s: usize) -> usize { self.runs()[s].1 }
    fn section_title(&self, s: usize) -> String { self.runs()[s].0.clone() }
    fn section_counts(&self) -> Vec<usize> {
        self.runs().into_iter().map(|(_, count)| count).collect()
    }
}

let songs = ListModel::from_vec(vec![
    Song { artist: "Ada".into(), title: "One".into() },
    Song { artist: "Ada".into(), title: "Two".into() },
    Song { artist: "Bea".into(), title: "Three".into() },
]);
let _list = ListView::new(songs.clone(), |_i, song, _selected| {
    Box::new(TextWidget::new(lit!(&song.title)))
})
.sections(ByArtist(songs))
.pinned_section_headers(true);
Source

pub fn section_header_delegate( self, f: impl Fn(usize, &str) -> Box<dyn Widget> + 'static, ) -> Self

Build each section’s header row from (section_index, title), the title being the provider’s. Without it a header is the title as plain text. The same signature as GridView::section_header_delegate.

Whatever it builds, the row is published to assistive technology as a heading named by the title, so a text label in it that repeats the title should be hidden (TextWidget::a11y_hidden) or it is read twice; the default header hides its own.

A control inside it is a Tab stop while the header is on screen. A control in a row is not, because the list’s cursor reaches it (Space runs its keyboard toggle), and the cursor steps over headers. Tab then goes from the list to the controls of the headers in view, top to bottom. The pinned copy is a picture of the header and takes no Tab stop, and neither does the header it covers; arrowing to the section’s first item brings that header back into view.

Source

pub fn section_header_height(self, height: f32) -> Self

Height of each section header row (default 28, as in GridView). Headers are not measured, in any row-height mode: the delegate’s widget is given exactly this height.

Source

pub fn pinned_section_headers(self, enabled: bool) -> Self

Keep the header of the section holding the top of the viewport pinned there while its rows scroll beneath it; the next section’s header pushes it up as it arrives. Rows revealed by the keyboard, by ensure_index_visible and by scroll_to_index stop below it.

The pinned copy is drawn on an opaque surface and is hidden from assistive technology, which reads the section’s own header instead. A drop on it is a drop on that header, and a control in it takes no Tab stop (see section_header_delegate).

Source

pub fn selection(self, sel: SelectionModel) -> Self

Set the index-based selection model (positions). For identity-based selection that survives reorder / filter / window-slide, build the view with from_source_keyed instead.

Source

pub fn realized_row_ids(&self) -> Rc<RefCell<Vec<(usize, WidgetId)>>>

A shared handle to the live (model index → row node id) map of the realized rows, rewritten at the end of every build.

The id is the row’s Role::ListBoxOption wrapper — the node an active_descendant has to point at. Take the handle before moving the view into the tree; it is populated on the first build.

This exists for the ARIA combobox / listbox pattern, where keyboard focus stays on a text field while the arrow keys move a highlight through this list (a command palette, a type-ahead picker). The field’s AT node publishes active_descendant pointing here, so a screen reader announces each row as the highlight moves without focus ever leaving the input.

A ListView that holds focus itself does not need this handle: it publishes its own active_descendant from accessibility(), pointing at whichever row the keyboard is on. It used to publish none, on the assumption that holding focus was enough, and that assumption is what made every Teksilo list silent to NVDA.

Only realized rows are present — a row scrolled outside the virtualization window has no widget, so look-ups for it return None. Callers should scroll_to_index the row they intend to announce.

Source

pub fn reorderable(self, enabled: bool) -> Self

Enable intra-widget drag reordering.

When enabled, rows can be dragged within this ListView to reorder them. The move is routed through the source’s accept_drop — a ListModel reorders in place, an external source routes the move to its store. The hover indicator reflects the source’s can_accept verdict, so a forbidden drop shows no insertion line. Keyboard equivalent: Alt+ArrowUp/Down.

Source

pub fn exportable(self, mode: DragTransferMode) -> Self
where T: Clone,

Make rows droppable outside this view — on a DropTarget, another data view, or the OS.

A dragged row (or the whole selection, when the pressed row is part of a multi-selection) carries clones of its items in a public RowDragData<T>, so a foreign receiver can pull them out with payload.get_typed::<RowDragData<T>>() / DropTarget::on_drop_typed::<RowDragData<T>>() — no serialization. This also makes rows a drag source even without reorderable.

mode chooses what happens to the origin rows once a foreign target accepts them: DragTransferMode::Move removes them (via the source’s on_drag_out, or on_rows_transferred_out), DragTransferMode::Copy leaves them. A same-view reorder is never a transfer, so mode never affects it. Requires T: Clone.

Move caveats. The row is removed only when the drop is accepted by an in-app target in the same window (DropOutcome::InApp { accepted: true }) or the OS reports a genuine move. Shipped OS backends advertise copy only, so a drag exported to another application — or to another window of the same app — is treated as a copy: the origin row is kept and the receiver must own its own copy semantics. Also, for a ListModel-backed view (whose key is the row index) the move-out removes by the indices captured at drag-start; if a shared handle to the same model is mutated while the drag is in flight, those indices can point at different rows — use a keyed source, or on_rows_transferred_out with your own stable identity, for models that change mid-drag.

Source

pub fn export_external( self, f: impl Fn(&[T]) -> Vec<(String, Vec<u8>)> + 'static, ) -> Self
where T: Clone,

Additionally advertise the dragged rows as MIME data so they can be dropped on a DropZone or exported to another application / window via the OS. f maps the dragged items to (mime_type, bytes) pairs (e.g. text/plain, text/uri-list, an app-specific application/x-…). Implies exportable (defaulting to DragTransferMode::Move if not already set). Requires T: Clone.

Source

pub fn on_rows_transferred_out( self, f: impl Fn(&[usize], &mut EventContext<'_>) + 'static, ) -> Self

Override how rows moved out to a foreign target are removed from this view. Receives the dragged rows’ indices (descending-safe) and the live context. Without this, an exportable Move drag removes them through the source’s on_drag_out (works out of the box for a ListModel).

Source

pub fn accept_foreign_rows(self, accept: bool) -> Self

Accept exported rows dropped from a different view or source without writing a custom ListDataSource. Pair with on_rows_received, which is handed the dropped items and the insertion index. (Same-view reorder is reorderable; a custom ListDataSource can still accept foreign drops through its can_accept/accept_drop instead.)

Source

pub fn on_rows_received( self, f: impl Fn(Vec<T>, usize, &mut EventContext<'_>) + 'static, ) -> Self

Handler for rows accepted via accept_foreign_rows: (items, insertion_index, ctx). Insert them into your model at the index.

Source

pub fn on_activate( self, f: impl Fn(usize, &mut EventContext<'_>) + 'static, ) -> Self

Set the row-activation handler — invoked with the flat row index and the live EventContext on a click (per activate_on) or Enter on the focused row. The context lets the handler open a modal, toast, or dispatch an intent — matching TableView::on_row_activate / GridView::on_tile_activate. Distinct from selection: arrow-key navigation and Space move / toggle the selection but do not activate.

Source

pub fn activate_on(self, mode: ActivateOn) -> Self

Choose single- vs double-click activation (default ActivateOn::DoubleClick). Enter activates in either mode.

Source

pub fn row_tooltip_sticky(self, on: bool) -> Self

Enable type-ahead (“type to jump”): with this set, typing a printable character while the list has keyboard focus jumps the selection to the next row whose label starts with the accumulated search term, wrapping around (Qt keyboardSearch / macOS & Windows type-select). label(&item) yields the searchable text for a row; matching is case-insensitive (a Unicode fold, so an accented label is reachable). A pause longer than the type_ahead_timeout starts a fresh term. Whether a composite row tooltip offers dwell-to-sticky promotion. Default true.

Turn it off for a read-only row card: with nothing to reach into there is nothing to pin, so the countdown indicator would promise an interaction that does not exist and the surface would outlive the pointer for no reason.

Source

pub fn row_tooltip( self, f: impl Fn(usize, &T) -> Option<LocalizedString> + 'static, ) -> Self

Per-row plain tooltip: one line of text for the row under the pointer.

The resolver receives the row’s flat index and its item; returning None leaves that row without a tip. Mutually exclusive with row_rich_tooltip and row_composite_tooltip — last setter wins, matching the per-widget tooltip matrix.

Opens to the row’s trailing side, never below it: rows stack vertically, so a tip below would cover the next row.

Source

pub fn row_rich_tooltip( self, f: impl Fn(usize, &T) -> Option<RichTooltipSource> + 'static, ) -> Self

Per-row rich tooltip — a registry key or inline TooltipContent. See row_tooltip for the shared semantics.

Source

pub fn row_composite_tooltip( self, f: impl Fn(usize, &T) -> Option<Box<dyn Widget>> + 'static, ) -> Self

Per-row composite tooltip — an arbitrary widget tree describing the row.

The body is built for every realized row (the virtualization window) and rebuilt with it, so keep the resolver cheap and defer anything costly to the body’s own first paint, which only runs if the tip is actually shown. See row_tooltip for the rest.

Source

pub fn type_ahead_label(self, label: impl Fn(&T) -> String + 'static) -> Self

Source

pub fn type_ahead_timeout(self, timeout: Duration) -> Self

Reset window between keystrokes before the type-ahead search term clears (default 500 ms). A zero duration disables type-ahead.

Source

pub fn show_scrollbar(self, show: bool) -> Self

Suppress the internal scroll bar. Use when the caller wants to mount its own ScrollBar outside the ListView (keeping it alive across rebuilds so a thumb drag isn’t torn down when the visible range shifts past the buffer). The caller is expected to wire the external bar up to the signals returned by scroll_y_signal, max_scroll_y_signal and viewport_ratio_y_signal.

Source

pub fn scroll_y_signal(&self) -> &Signal<f32>

The current vertical scroll offset, in logical pixels. Drives the viewport position and the scroll bar thumb. Exposed so external logic (e.g. a parent widget implementing custom scroll-into-view) can read or drive the scroll directly — prefer scroll_to_index / ensure_index_visible when possible.

Source

pub fn max_scroll_y_signal(&self) -> &Signal<f32>

The maximum scroll offset, content_height - viewport_height. Updated during layout. Exposed for callers that mount their own external scrollbar via show_scrollbar(false).

Source

pub fn viewport_ratio_y_signal(&self) -> &Signal<f32>

The vertical viewport-to-content ratio (0.0..1.0). Drives the thumb size on any external scrollbar.

Source

pub fn scroll_to_index(&self, index: usize)

Scroll so the given model index is aligned to the top of the viewport, now, against the scroll range and row offsets of the last layout pass.

The offset is computed and clamped when this is called, to the max_scroll_y that pass wrote. Before the view has been laid out that range is 0, so the call scrolls to the top and does nothing more; after a model change in the same turn the range still describes the old list. On a list that is already mounted, or to scroll before the first layout, use a handle, which defers the computation to the next layout pass.

With sections, the first item of a section brings its header to the top with it, and with pinned_section_headers every item stops below the pinned header.

Source

pub fn ensure_index_visible(&self, index: usize)

Scroll the minimum distance needed to bring the given model index fully into view. No-op if already visible. Sections are honoured as in scroll_to_index.

Like scroll_to_index, this computes the offset when it is called, against the viewport and scroll range of the last layout pass; a handle defers it to the next one.

Source

pub fn handle(&self) -> ListViewHandle

A handle that scrolls this list once it is mounted.

Take it while describing the tree, before the view is handed to ctx.add(...); it stays attached to the view across rebuilds. See ListViewHandle.

Trait Implementations§

Source§

impl<T: 'static> Debug for ListView<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: 'static> Widget for ListView<T>

Source§

fn post_paint(&self, bounds: Rect, canvas: &mut Canvas, ctx: &PaintContext<'_>)

The insertion line and the container focus ring, drawn over the children.

Not in paint, which runs before them: the pinned section header is an opaque child over the top of the viewport, and would cover the top edge of the ring and a line drawn along or under it. A row that paints its own background covers a line the same way.

Source§

fn context_menu_key_target(&self) -> Option<WidgetId>

The context-menu key opens the current row’s menu, not the list’s.

A ListView is focusable and its rows deliberately are not — the container owns focus and set_selected is what tells assistive technology which row is current (see list_item_a11y). So the dispatcher’s default of “the focused widget” would open the list’s own menu, in the widget family where a per-row menu matters most.

The row the user means is the keyboard cursor if they have navigated (focused_index), else the first selected row. Both are indices into the model, and only realized rows have a widget, so a cursor scrolled outside the virtualization window resolves to nothing and the menu falls back to the list — which is the right answer, since there is no row on screen for it to be about.

Source§

fn build(&mut self, ctx: &mut BuildContext<'_>) -> Vec<WidgetId>

Compose child widgets. Called once after the widget is placed in the arena, and again whenever the widget is marked for rebuild — a BindingLevel::Rebuild binding, rebuild_single_widget, or a density switch. A theme or locale switch does not rebuild: set_theme and set_locale mark layout + paint dirty and leave the built subtree standing, so anything derived from the theme or the locale must be read per pass or bound to a signal rather than captured here. Takes &mut self — store child IDs, signal handles, any state needed later. Returns the list of root child IDs (empty for leaf widgets).
Source§

fn layout_response( &self, proposal: SizeProposal, _ctx: &LayoutContext<'_>, ) -> LayoutResponse

Respond to the parent’s size proposal with this widget’s wanted size, grow/shrink weights, and compression floor (see [LayoutResponse]). Read more
Source§

fn place_children( &self, bounds: Rect, _proposal: SizeProposal, children: &mut [WidgetPlacement], _ctx: &LayoutContext<'_>, )

Position children within the allocated bounds. Read more
Source§

fn wants_post_paint(&self) -> bool

Whether this widget wants its post_paint hook to fire each frame. Returning false (the default) saves a virtual call per widget per frame for the vast majority of widgets that don’t draw a foreground over their children. Read more
Source§

fn accessibility(&self, builder: &mut AccessNodeBuilder)

Declare this widget’s accessibility identity.
Source§

fn as_any(&self) -> Option<&dyn Any>

Downcast hook. Default implementation returns None; concrete widgets override with Some(self) when they want to expose their concrete type to test-level introspection or reflection. The trait already bounds on std::any::Any so concrete types satisfy the 'static requirement.
Source§

fn children(&self) -> Vec<WidgetId>

Return the child widget IDs that this widget manages.
Source§

fn clips_children(&self) -> bool

Whether this widget clips its children to its bounds.
§

fn type_name(&self) -> &'static str

Concrete type name of this widget (e.g. "teksilo_widgets::button::Button"). The default implementation resolves at the impl site via std::any::type_name::<Self>(), so calls through &dyn Widget correctly dispatch to the monomorphized fn for the concrete type — getting the concrete name through the vtable without per-impl boilerplate. Read more
§

fn cacheable_layout(&self) -> bool

Whether this widget’s layout_response may be memoized by the per-pass layout cache. Defaults to true. Read more
§

fn paint(&self, _bounds: Rect, _canvas: &mut Canvas, _ctx: &PaintContext<'_>)

Draw the widget’s visual representation.
§

fn wants_after_paint(&self) -> bool

Whether this widget wants its after_paint hook to fire each frame. Returning false (the default) saves a virtual call per widget per frame for the vast majority of widgets that don’t aggregate descendant geometry. Read more
§

fn after_paint(&self, _view: &WidgetTreeView<'_>, _ctx: &PaintContext<'_>)

Called once per frame after this widget’s subtree has finished painting. Receives a read-only view of the layout-resolved arena so a parent can read its descendants’ final bounds — e.g. TitleBar aggregates its drag region and control-button rects into a single HitRegions payload for the Windows backend’s WM_NCHITTEST. Read more
§

fn wants_descendant_redirects(&self) -> bool

Whether this widget wants the AT walker to consult its a11y_redirect_descendant hook for every descendant during AT tree emission, not just its direct arena children. Read more
§

fn culls_children(&self) -> bool

Whether this widget decides, on every layout pass, which of its children exist at all. Read more
§

fn a11y_redirect_descendant( &self, _self_id: WidgetId, _descendant: WidgetId, ) -> Option<NodeId>

Optional redirection hook for AT-tree placement of a child. Read more
§

fn accessible_title_hint(&self) -> Option<String>

Suggest an accessible title to an enclosing container that wraps this widget as content — typically a modal / dialog shell that wants to propagate the inner content’s visible title as the shell’s own accessible name. Read more
§

fn accessible_title_node(&self) -> Option<WidgetId>

The widget that paints this one’s title, when it has one. Read more
§

fn initial_focus_hint(&self) -> Option<WidgetId>

Optional hint that directs initial focus to a specific descendant when this widget is the root of a deferred-built modal surface. Read more
§

fn accessibility_proxy(&self) -> Option<WidgetId>

The descendant whose accessibility node stands for this widget. Read more
§

fn accessibility_children(&self) -> Option<Vec<WidgetId>>

Optional override for the child ORDER presented to assistive technology, when it must differ from the paint / z-order child order returned by children. Read more
§

fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>

Mutable counterpart of as_any. Default returns None; widgets that want to expose mutable state to tests (e.g. so a test can mutate a Scene inside a SceneView post-layout) override with Some(self). Should follow the same opt-in pattern as as_any: only widgets that opt into & introspection should opt into &mut.
§

fn focus_reveal_rect(&self, _bounds: Rect) -> Option<Rect>

The rectangle (in absolute tree coordinates) that best represents this widget when the framework reveals it into an ancestor scroll area on focus gain. Returning None (the default) reveals the widget’s whole bounds — correct for most controls. Read more
§

fn hit_shape(&self, _local_point: Point, _bounds: Rect) -> bool

Whether the point lies inside this widget’s actual shape, not just its rectangular bounds. Consulted by hit-testing right after the bounds check: returning false for a point that is inside the bounding box makes the widget transparent to the click there, so it falls through to whatever sibling is painted underneath (the same machinery as a fully pass-through node, but shape-aware). Read more
§

fn accepts_child_hit(&self, _child: WidgetId, _point: Point) -> bool

Veto a hit on one of this widget’s direct children, per point. Read more
§

fn hit_outset(&self, _kind: PointerKind, _tokens: &InputTokens) -> EdgeInsets

How far outside its own bounds this widget still absorbs a press, per edge, for the pointer that is asking. Read more
§

fn hit_slop(&self, _kind: PointerKind, _tokens: &InputTokens) -> Option<HitSlop>

This widget’s own say in the miss-only slop pass, overriding the density default for its node. Read more
§

fn hit_distance(&self, local_point: Point, bounds: Rect) -> Option<f32>

How far a missed press is from this widget’s actual silhouette, in the widget’s own bounds space. Read more
§

fn target_regions(&self, _bounds: Rect) -> Vec<TargetRegion>

The interactive sub-regions this widget paints inside its own single node — a scroll bar’s thumb, a slider’s knob, a header cell’s filter affordance. Read more
§

fn preserves_children_on_rebuild(&self) -> bool

How rebuild_single_widget treats this widget’s existing children when re-running its build(). Read more
§

fn tooltip_has_content(&self) -> bool

Whether this widget, used as tooltip content, currently has anything worth showing. Read more
§

fn declare_shortcuts(&self) -> Vec<Shortcut>

Declare the rebindable keyboard shortcuts this widget exposes, without installing handlers. The framework calls this at arena insertion time (before build()) and at certain lazy boundaries (e.g. Switcher walks declarations on its not-yet-mounted Pending slots), so settings UIs and the ShortcutRegistry see the keystrokes the moment the owning container mounts — even if build() hasn’t run. Read more
§

fn take_handler_set(&mut self) -> Option<HandlerSet>

Extract attached handler set from a WidgetWithHandlers wrapper. Called during arena insertion to transfer handlers to the WidgetNode. Default: returns None (no attached handlers).

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for ListView<T>

§

impl<T> !Send for ListView<T>

§

impl<T> !Sync for ListView<T>

§

impl<T> !UnwindSafe for ListView<T>

§

impl<T> Freeze for ListView<T>

§

impl<T> Unpin for ListView<T>

§

impl<T> UnsafeUnpin for ListView<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<W> IntoTeksiChild for W
where W: Widget + 'static,

§

fn into_pending(self) -> PendingChild

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<W> WidgetBuilder for W
where W: Widget + 'static,

§

fn on_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_double_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_triple_tap( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_long_press( self, f: impl FnMut(&TapEvent, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn accept_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_tap. Default is [ButtonMask::PRIMARY]. Read more
§

fn accept_double_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_double_tap. Default [ButtonMask::PRIMARY]. Read more
§

fn accept_triple_tap_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_triple_tap. Default [ButtonMask::PRIMARY]. Read more
§

fn accept_long_press_buttons( self, mask: impl Into<ButtonMask>, ) -> WidgetWithHandlers<Self>

Restrict (or extend) the set of pointer buttons that fire on_long_press. Default [ButtonMask::PRIMARY]. Read more
§

fn on_drag( self, f: impl FnMut(DragPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_swipe( self, f: impl FnMut(SwipeDirection, f32, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_pinch( self, f: impl FnMut(PinchPhase, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_focus( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_key( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_key_preview( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

Strict-ancestor key preview. See [HandlerSet::on_key_preview].
§

fn on_pointer_event( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_hover( self, f: impl FnMut(bool, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_scroll( self, f: impl FnMut(&WidgetEvent, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_access_action( self, f: impl FnMut(Action, &mut EventContext<'_>) -> EventResponse + 'static, ) -> WidgetWithHandlers<Self>

§

fn focusable(self, focusable: bool) -> WidgetWithHandlers<Self>

§

fn tab_index(self, index: i32) -> WidgetWithHandlers<Self>

§

fn cursor(self, cursor: CursorIcon) -> WidgetWithHandlers<Self>

§

fn clips_children_on(self, clips: bool) -> WidgetWithHandlers<Self>

§

fn ime_input(self, ctx: ImeContext) -> WidgetWithHandlers<Self>

Declare this node a text-input surface, enabling the OS input method (with ctx’s purpose) while it is focused. See [crate::ime].
§

fn event_pass_through(self, pass_through: bool) -> WidgetWithHandlers<Self>

Make the widget invisible to pointer hit-testing. See [HandlerSet::event_pass_through].
§

fn gesture_dead_zone(self, dead_zone: bool) -> WidgetWithHandlers<Self>

Mark this widget’s subtree a gesture dead zone. See [HandlerSet::gesture_dead_zone].
§

fn long_press_role(self, role: LongPressRole) -> WidgetWithHandlers<Self>

Select what a hold on this widget’s subtree means. See [HandlerSet::long_press_role].
§

fn touch_action(self, action: TouchAction) -> WidgetWithHandlers<Self>

Override what a direct pointer may do to this widget’s subtree. See [HandlerSet::touch_action].
§

fn scroll_container(self, axes: PanAxes) -> WidgetWithHandlers<Self>

Declare this widget a pan surface on axes, kinetic, direct pointers only. See [HandlerSet::scroll_container].
§

fn pan_claim(self, claim: PanClaim) -> WidgetWithHandlers<Self>

Declare this widget a pan surface with an explicit [PanClaim]. See [HandlerSet::pan_claim].
§

fn overscroll_behavior( self, behavior: OverscrollBehavior, ) -> WidgetWithHandlers<Self>

Whether this widget absorbs a boundary scroll or chains it outward. See [HandlerSet::overscroll_behavior].
§

fn drag_activation(self, activation: DragActivation) -> WidgetWithHandlers<Self>

Declare when a drag on this widget may begin relative to the press that starts it. See [HandlerSet::drag_activation].
§

fn multi_contact(self, policy: MultiContact) -> WidgetWithHandlers<Self>

Declare how many simultaneous contacts this widget serves. Default [MultiContact::First] — the second finger on a single-contact control is terminated there rather than reaching an ancestor.
§

fn keyboard_capture(self, capture: bool) -> WidgetWithHandlers<Self>

Mark this widget a keyboard capture surface (terminals, game viewports): while focused, KeyDowns bypass shortcut resolution. See [HandlerSet::keyboard_capture].
§

fn hit_transparent(self, transparent: bool) -> WidgetWithHandlers<Self>

Make this widget and its whole subtree invisible to pointer hit-testing (decorative overlays). See [HandlerSet::hit_transparent].
§

fn hit_slop(self, slop: HitSlop) -> WidgetWithHandlers<Self>

Override the miss-only hit slop for this node. See [HandlerSet::hit_slop].
§

fn no_hit_slop(self) -> WidgetWithHandlers<Self>

Take this node out of both hit-widening mechanisms — no slop outset and no Widget::hit_outset. See [HandlerSet::no_hit_slop].
§

fn context_menu( self, factory: impl Fn(Point, &mut EventContext<'_>) -> Option<Box<dyn Widget>> + 'static, ) -> WidgetWithHandlers<Self>

Set a context-menu factory. See [HandlerSet::context_menu] for the full contract.
§

fn focus_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>

Bind a Signal<bool> the framework writes when a strict descendant has focus. See [HandlerSet::focus_within].
§

fn hover_within(self, signal: Signal<bool>) -> WidgetWithHandlers<Self>

Bind a Signal<bool> the framework writes when a strict descendant is hovered. See [HandlerSet::hover_within].
§

fn visible_when(self, state: impl Into<Prop<bool>>) -> WidgetWithHandlers<Self>

Bind this node’s visibility (bool / Signal<bool> / Prop<bool>) as a builder property, so teksu! can write visible_when: sig. Equivalent to ctx.visible_when(id, ..). See [HandlerSet::visible_when].
§

fn on_drag_hover( self, f: impl FnMut(&DragPayload, Point, &mut EventContext<'_>) -> DropFeedback + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_leave( self, f: impl FnMut(&mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_tick( self, f: impl FnMut(Point, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_pointer_cancel( self, f: impl FnMut(&PointerInfo, CancelReason, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

Attach a pointer-cancel handler. See [HandlerSet::on_pointer_cancel].
§

fn on_drop( self, f: impl FnMut(DragPayload, Point, &mut EventContext<'_>) -> bool + 'static, ) -> WidgetWithHandlers<Self>

§

fn on_drag_ended( self, f: impl FnMut(DropOutcome, &mut EventContext<'_>) + 'static, ) -> WidgetWithHandlers<Self>

Set the drag-ended handler on a drag source. See [HandlerSet::on_drag_ended].
§

fn access_label( self, label: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_description( self, description: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_hint(self, hint: impl Into<Prop<String>>) -> WidgetWithHandlers<Self>

§

fn access_value( self, value: impl Into<Prop<String>>, ) -> WidgetWithHandlers<Self>

§

fn access_role(self, role: Role) -> WidgetWithHandlers<Self>

§

fn access_hidden( self, hidden: impl Into<Prop<bool>>, ) -> WidgetWithHandlers<Self>

§

fn access_disabled(self, disabled: bool) -> WidgetWithHandlers<Self>

§

fn access_identifier(self, id: impl Into<String>) -> WidgetWithHandlers<Self>

§

fn access_controls(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_described_by(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_labelled_by(self, target: WidgetId) -> WidgetWithHandlers<Self>

§

fn access_live(self, mode: Live) -> WidgetWithHandlers<Self>

§

fn access_current(self, current: AriaCurrent) -> WidgetWithHandlers<Self>

§

fn access_shortcut_literal( self, shortcut: impl Into<String>, ) -> WidgetWithHandlers<Self>

§

fn access_shortcut_id(self, id: impl Into<String>) -> WidgetWithHandlers<Self>

§

fn access_has_popup(self, kind: HasPopup) -> WidgetWithHandlers<Self>

§

fn access_orientation( self, orientation: Orientation, ) -> WidgetWithHandlers<Self>

§

fn access_exclude_subtree(self) -> WidgetWithHandlers<Self>

§

fn access_merge_subtree(self) -> WidgetWithHandlers<Self>

§

fn access_subtree(self, mode: AccessSubtreeMode) -> WidgetWithHandlers<Self>

§

fn access_numeric_value(self, value: f64) -> WidgetWithHandlers<Self>

§

fn access_numeric_range(self, min: f64, max: f64) -> WidgetWithHandlers<Self>

§

fn access_numeric_step(self, step: f64) -> WidgetWithHandlers<Self>

§

fn access_action<F>( self, action: Action, handler: F, ) -> WidgetWithHandlers<Self>
where F: FnMut(&mut EventContext<'_>) + 'static,

§

fn access_remove_action(self, action: Action) -> WidgetWithHandlers<Self>

§

fn access_custom_action<F>( self, label: impl Into<Prop<String>>, handler: F, ) -> WidgetWithHandlers<Self>
where F: FnMut(&mut EventContext<'_>) + 'static,

§

fn access_customize<F>(self, f: F) -> WidgetWithHandlers<Self>
where F: Fn(&mut AccessNodeBuilder) + 'static,

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more