Struct VirtualList
pub struct VirtualList<M>where
M: ListModel,{ /* private fields */ }Implementations§
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn with_tail_title(self, title: impl Into<String>) -> VirtualList<M>
pub fn with_tail_title(self, title: impl Into<String>) -> VirtualList<M>
The title over the list’s tail group: the items done with, after every other group, closed until the person opens it. A list whose model names no tail reads as it did.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn on_view(
self,
id: impl Into<String>,
f: impl FnMut(<M as ListModel>::Key) + 'static,
) -> VirtualList<M>
pub fn on_view( self, id: impl Into<String>, f: impl FnMut(<M as ListModel>::Key) + 'static, ) -> VirtualList<M>
Called with the row chosen: the list, as control id, publishes
choosing a row as its view action select
(view_choice), each row addressed by
its semantic key (Self::with_semantic_key), so a person’s click,
a screen reader, a script and an agent choose through the same
action. What is chosen is the window’s own state, never an edit.
pub fn on_activate_view(
self,
id: impl Into<String>,
f: impl FnMut(<M as ListModel>::Key) + 'static,
) -> VirtualList<M>
pub fn on_activate_view( self, id: impl Into<String>, f: impl FnMut(<M as ListModel>::Key) + 'static, ) -> VirtualList<M>
Called with the row opened: the list, as control id, publishes
opening a row as its view action open, each row addressed by its
semantic key (Self::with_semantic_key), so a person’s second
click or Enter, a screen reader, a script and an agent open through
the same action. What is shown is the window’s own state, never an
edit.
pub fn open_on_press(self) -> VirtualList<M>
pub fn open_on_press(self) -> VirtualList<M>
A press on a row opens it (Self::on_activate_view), rather than moving the selection
onto it and waiting for a second click. The rows of a list that stands for things to
open — a task, a folder — open on the press itself, as a tree’s rows do with a single
click; the row a keyboard or a reader moves to still only takes the keyboard.
pub fn choosing_on_press(self, choosing: bool) -> VirtualList<M>
pub fn choosing_on_press(self, choosing: bool) -> VirtualList<M>
A press on a row chooses it. A list whose view reports no choice of its rows is no
picker (Self::choosing_on_press(false)): a press moves the
keyboard to the row, and nothing shows as chosen, however the rows open.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn update_model<R>(&mut self, update: impl FnOnce(&mut M) -> R) -> R
pub fn update_model_changes<R>(
&mut self,
changes: &[ListModelChange<<M as ListModel>::Key>],
update: impl FnOnce(&mut M) -> R,
) -> R
pub fn update_model_changes<R>( &mut self, changes: &[ListModelChange<<M as ListModel>::Key>], update: impl FnOnce(&mut M) -> R, ) -> R
Apply a typed mutation batch to an owned model. Delegates whose stable
keys survive structural edits remain live; only RowsChanged keys (or
every key for Reset) are rebuilt.
pub fn notify_model_changed(&mut self)
pub fn notify_model_changed(&mut self)
Reconcile a source that mutated through shared interior state.
pub fn notify_model_changes(
&mut self,
changes: &[ListModelChange<<M as ListModel>::Key>],
)
pub fn notify_model_changes( &mut self, changes: &[ListModelChange<<M as ListModel>::Key>], )
Reconcile a specific batch from a source mutated through shared interior state.
pub fn invalidate_rows( &mut self, keys: impl IntoIterator<Item = <M as ListModel>::Key>, )
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn with_tree(
self,
marks: Rc<TreeMarks<<M as ListModel>::Key>>,
) -> VirtualList<M>
pub fn with_tree( self, marks: Rc<TreeMarks<<M as ListModel>::Key>>, ) -> VirtualList<M>
The rows stand as a tree: each under the row of the item it names as its parent, indented
by the rows over it, with a disclosure on the rows that have subtasks, folding them away
where the person folds them. marks is what the rows the list builds read, filled as it
mounts them (TreeMarks).
pub fn with_indent_guides(self) -> VirtualList<M>
pub fn with_indent_guides(self) -> VirtualList<M>
Draw a hairline up each depth’s gutter through nested rows, so a deep tree keeps its structure legible.
pub fn row_rect(&self, key: &<M as ListModel>::Key) -> Option<Rect>
pub fn row_rect(&self, key: &<M as ListModel>::Key) -> Option<Rect>
Where the row of key stands on screen, its own box below the band of a heading it
starts a group under. None while the row is not placed (folded away, or far from the
box).
pub fn disclosure_rect(&self, key: &<M as ListModel>::Key) -> Option<Rect>
pub fn disclosure_rect(&self, key: &<M as ListModel>::Key) -> Option<Rect>
The box the row key’s disclosure takes: the chevron in its own depth’s gutter, centred
on the row. None for a row with no subtasks, or one not placed.
pub fn row_depth(&self, key: &<M as ListModel>::Key) -> u32
pub fn row_depth(&self, key: &<M as ListModel>::Key) -> u32
How many rows under its top row key stands, as the list’s tree shows it.
pub fn row_is_branch(&self, key: &<M as ListModel>::Key) -> bool
pub fn row_is_branch(&self, key: &<M as ListModel>::Key) -> bool
Whether the row key has subtasks, a disclosure to show.
pub fn visible_key(&self, nth: usize) -> Option<<M as ListModel>::Key>
pub fn visible_key(&self, nth: usize) -> Option<<M as ListModel>::Key>
The key of the nth row the list shows, counting the rows on screen in reading order: a
folded row’s subtasks are not among them, nor a closed group’s rows.
pub fn visible_len(&self) -> usize
pub fn visible_len(&self) -> usize
How many rows the list shows, counting the rows not folded away.
pub fn is_dragging(&self) -> bool
pub fn is_dragging(&self) -> bool
Whether a drag past the threshold is in flight over the rows.
pub fn row_action_rect(
&self,
key: &<M as ListModel>::Key,
action: usize,
) -> Option<Rect>
pub fn row_action_rect( &self, key: &<M as ListModel>::Key, action: usize, ) -> Option<Rect>
Where the hover action action of the row key sits, reordering what the row shows:
the centre a person presses.
pub fn fold_row(&mut self, key: &<M as ListModel>::Key, folded: bool) -> bool
pub fn fold_row(&mut self, key: &<M as ListModel>::Key, folded: bool) -> bool
Fold the row’s subtasks away, or show them again, as its disclosure, its menu or the keyboard does, and remember what a person folded even for a row whose subtasks the model has not yet said it holds.
pub fn row_folded(&self, key: &<M as ListModel>::Key) -> bool
pub fn row_folded(&self, key: &<M as ListModel>::Key) -> bool
Whether the row folds its subtasks away now.
pub fn tab_indents(self, enabled: bool) -> VirtualList<M>
pub fn tab_indents(self, enabled: bool) -> VirtualList<M>
Bind Tab / Shift+Tab to indent and outdent the focused row of a tree, as an
outliner does. The Alt arrows indent and outdent regardless. Needs
Self::with_reorder; a Tab that cannot move the row is left to focus traversal.
pub fn move_row(
&mut self,
key: &<M as ListModel>::Key,
movement: TreeMove,
) -> bool
pub fn move_row( &mut self, key: &<M as ListModel>::Key, movement: TreeMove, ) -> bool
Move the row of key one step through its tree, through the same validator and commit
a drop uses; the row keeps the keyboard and stays in view. Whether it moved.
pub fn move_focused_step(&mut self, movement: TreeMove) -> bool
pub fn move_focused_step(&mut self, movement: TreeMove) -> bool
Move the focused row one step through its tree (TreeMove). Whether it moved: no
focused row, a row with the keyboard elsewhere, or a step the tree has no room for
moves nothing.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
The menu a press, the Menu key or assistive technology opens: items says what a row
(Some) or the list’s empty space (None) offers, and chosen hears the item the
person took, with the row it was for. A list offers its rows one menu: this replaces the
menu the host opens (Self::with_row_menu_reporter).
pub fn with_row_about(
self,
about: impl Fn(&<M as ListModel>::Key) -> Option<SharedSelection> + 'static,
) -> VirtualList<M>
pub fn with_row_about( self, about: impl Fn(&<M as ListModel>::Key) -> Option<SharedSelection> + 'static, ) -> VirtualList<M>
Name what each row is about: about answers a row’s key with the selection the app keeps
for it (a task’s issue, a note, a file), so a menu opened on that row carries it as its
subject — the send-to box beside the menu starts with it, and its box stands at the row.
The list only knows the row’s key, so the app names the record.
Report a row’s menu to the host, which opens and paints its own: report hears the
row’s key, the row’s box on screen and the point its menu opens at, when a secondary
click, the Menu key, Shift+F10 or assistive technology asks for the row’s menu. The row
takes the keyboard first, and the list changes no selection: what the menu acts on is
the host’s. A list offers its rows one menu: this replaces the menu the list builds
(Self::with_context_menu).
Whether the rows’ menu is open.
Close the rows’ menu, its chosen item unheard. A list that reports its row menus to the host has none of its own to close.
Open the list’s own menu for key’s row (or the list, None) with its corner at at.
The row is chosen and given the keyboard first, as a secondary click does. Whether a
menu opened: none is offered, or it has no items for that row.
Open the menu on the row of key, with its corner at at: what a host’s row action
does, and what a secondary click does. A list that owns its menu makes the row its
selection and focus first; one that reports its row menus gives the row the keyboard and
hands its host the box and the point. Whether a menu opened.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn on_rename(
self,
f: impl FnMut(<M as ListModel>::Key, String) + 'static,
) -> VirtualList<M>
pub fn on_rename( self, f: impl FnMut(<M as ListModel>::Key, String) + 'static, ) -> VirtualList<M>
Rename a row in place. F2, Self::begin_rename and (with
Self::rename_on_double_click) a double click open a field over the row’s label;
Enter, a click elsewhere or the list losing focus commit it, Escape cancels.
The callback receives the trimmed title; an empty title is dropped. The host applies the
rename to its model.
pub fn rename_on_double_click(self) -> VirtualList<M>
pub fn rename_on_double_click(self) -> VirtualList<M>
Make a double click on a row rename it instead of opening it, as an outliner does.
Requires Self::on_rename.
pub fn on_delete(
self,
f: impl FnMut(<M as ListModel>::Key) + 'static,
) -> VirtualList<M>
pub fn on_delete( self, f: impl FnMut(<M as ListModel>::Key) + 'static, ) -> VirtualList<M>
Receive Delete on the focused row. The list never removes a row itself; the host
decides.
pub fn begin_rename(&mut self, key: &<M as ListModel>::Key) -> bool
pub fn begin_rename(&mut self, key: &<M as ListModel>::Key) -> bool
Open the inline rename field on the row of key. Whether it opened: the list renames
(Self::on_rename), the row stands in it, and the model names it.
pub fn rename_field(&self) -> Option<&TextInput>
pub fn rename_field(&self) -> Option<&TextInput>
The open rename field, for hosts and tests inspecting its state.
pub fn commit_rename(&mut self)
pub fn commit_rename(&mut self)
Close the rename field, reporting a non-empty trimmed title.
pub fn cancel_rename(&mut self)
pub fn cancel_rename(&mut self)
Close the rename field without reporting.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn following_end(self) -> VirtualList<M>
pub fn following_end(self) -> VirtualList<M>
Follow the list’s end, as a transcript does: it opens at its last row, and while it shows its end it stays there as rows arrive and settle their heights. A scroll away lets go; a scroll back to the end takes it up again.
pub fn unread_from(self, item: Option<String>) -> VirtualList<M>
pub fn unread_from(self, item: Option<String>) -> VirtualList<M>
Where a transcript’s first unread row is: the “New messages” divider stands over it, and
while it is out of view a pill at the foot offers to take the reader there
(crate::widget::conversation::Jump). None draws neither. A list that is not a
transcript does not mark one.
pub fn unread_item(&self) -> Option<&str>
pub fn unread_item(&self) -> Option<&str>
The item the transcript’s reader has not seen, as the list was told.
pub fn set_key_presenting(
&mut self,
f: impl Fn(&str) -> Option<<M as ListModel>::Key> + 'static,
)
pub fn set_key_presenting( &mut self, f: impl Fn(&str) -> Option<<M as ListModel>::Key> + 'static, )
How the list turns the item its reader has not seen into the key of its row, for a model of plain values that names no resources: the host that renders rows knows them.
pub fn set_unread(&mut self, item: Option<String>)
pub fn set_unread(&mut self, item: Option<String>)
Move the divider to the row key: the rows the old and the new one are on build again,
so each shows the divider over it (or not) at once, without the list’s items changing.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn stage_reorder(
&mut self,
source: &<M as ListModel>::Key,
before: &<M as ListModel>::Key,
) -> bool
pub fn stage_reorder( &mut self, source: &<M as ListModel>::Key, before: &<M as ListModel>::Key, ) -> bool
Show source being dragged to just before before, for a capture: the row lifts under
a pointer resting on the seam above before and the drop line shows. Nothing moves
unless a real release follows. Whether both rows stand placed, so it showed.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn new(
model: M,
estimated_row_height: f32,
row_builder: impl FnMut(&M, usize, &<M as ListModel>::Key) -> Box<dyn Widget> + 'static,
) -> VirtualList<M>
pub fn new( model: M, estimated_row_height: f32, row_builder: impl FnMut(&M, usize, &<M as ListModel>::Key) -> Box<dyn Widget> + 'static, ) -> VirtualList<M>
A list of model’s rows, each built by row_builder once its data
is there. A row still on its way (ListModel::row_state) keeps a
reserved slot of its last or estimated height, with its placeholder
painted by the list; a failed row shows why, with a retry when the
model offers one. The builder never sees either.
pub fn with_selection_delegate(
model: M,
estimated_row_height: f32,
row_builder: impl FnMut(&M, usize, &<M as ListModel>::Key, RowBuild) -> Box<dyn Widget> + 'static,
) -> VirtualList<M>
pub fn with_selection_delegate( model: M, estimated_row_height: f32, row_builder: impl FnMut(&M, usize, &<M as ListModel>::Key, RowBuild) -> Box<dyn Widget> + 'static, ) -> VirtualList<M>
Build a list whose delegate paints its own selection from the
RowSelection it receives (a run of selected rows as one lift, a
separator hidden beside a selected row). The list rebuilds a mounted
row when its own or a neighbour’s selection changes, and paints only
the keyboard focus. A ListRow delegate
takes the selection without being rebuilt.
pub fn reveal(&mut self, key: &<M as ListModel>::Key) -> bool
pub fn reveal(&mut self, key: &<M as ListModel>::Key) -> bool
Scroll the row of key into view and make it the focused row. A
reveal the person’s hand or key just asked for (a search hit opened,
a row picked elsewhere) moves there (crate::motion::ScrollTo):
a short jump glides, a long one fades in at the row; one nobody
asked for lands at once.
pub fn with_id(self, id: impl Into<String>) -> VirtualList<M>
pub fn with_id(self, id: impl Into<String>) -> VirtualList<M>
Give this list a stable app-test/inspection id.
pub fn with_feel(self, feel: Feel) -> VirtualList<M>
pub fn with_feel(self, feel: Feel) -> VirtualList<M>
Play the list’s own motion — rows arriving, leaving and changing places, the reveal that
takes the person to one — at feel rather than the theme’s pace.
pub fn set_feel(&mut self, feel: Feel)
pub fn set_feel(&mut self, feel: Feel)
Self::with_feel on a list already built.
pub fn with_viewport_height(self, height: f32) -> VirtualList<M>
pub fn set_viewport_height(&mut self, height: f32)
pub fn overlay_scrollbar(self) -> VirtualList<M>
pub fn overlay_scrollbar(self) -> VirtualList<M>
Rows span the list, edge to edge: for rows that bring their own insets and lift no selection, as a page’s rows do, so their content shares the edge of the page around the list. Rows of a list stand one lift’s bleed in from its edges otherwise. The scroll bar lies over the rows’ trailing edge, shown while they scroll or the pointer is at it and faded out at rest, and the rows keep their whole width: for a sidebar, whose rows read as one column with the pane beside it.
pub const fn flush(self) -> VirtualList<M>
pub const fn in_column(self) -> VirtualList<M>
pub const fn in_column(self) -> VirtualList<M>
The list is a column’s whole body, edge to edge in it: its rows’ text starts on the
column’s content edge (crate::chrome::column_gutter), where the column’s header
starts its title, and their lift bleeds crate::chrome::row_bleed past it, as HIG’s
one content edge has every list in a column do. The scroll bar stays on the column’s
edge. Rows lift themselves, as a ListRow does.
pub fn with_edges(self, edges: impl ListEdges + 'static) -> VirtualList<M>
pub fn with_edges(self, edges: impl ListEdges + 'static) -> VirtualList<M>
Leave the space edges asks for above the first row and below the
last. It scrolls with the rows, as a page’s spacing does.
pub fn filling(self) -> VirtualList<M>
pub fn filling(self) -> VirtualList<M>
Take the parent’s full height (a pane’s one list) instead of a fixed viewport; the viewport follows the laid-out height.
pub fn fitting_rows(self) -> VirtualList<M>
pub fn fitting_rows(self) -> VirtualList<M>
Stand as tall as its rows, among the other content of a page that scrolls them all (a task’s steps above its notes), rather than taking its parent’s height and scrolling them itself: every row shows, and what follows the list stands after its last row.
pub fn multi_select(self, enabled: bool) -> VirtualList<M>
pub fn set_multi_select(&mut self, enabled: bool)
pub fn set_multi_select(&mut self, enabled: bool)
Select more than one row, or one again.
pub fn on_selected(
self,
callback: impl FnMut(&[<M as ListModel>::Key]) + 'static,
) -> VirtualList<M>
pub fn on_selected( self, callback: impl FnMut(&[<M as ListModel>::Key]) + 'static, ) -> VirtualList<M>
Told the rows selected, in the order they stand, after anything changed the selection:
a click with its modifiers, the keyboard, Escape clearing it, or a row opened onto.
pub fn set_on_selected(
&mut self,
callback: impl FnMut(&[<M as ListModel>::Key]) + 'static,
)
pub fn set_on_selected( &mut self, callback: impl FnMut(&[<M as ListModel>::Key]) + 'static, )
Self::on_selected on a list already built: what the list reports is the callback
standing now, so a list whose items are given again tells its new host.
pub fn selection_follows_focus(self) -> VirtualList<M>
pub fn selection_follows_focus(self) -> VirtualList<M>
Select the row the keyboard moves to, as a single-selection list whose selection is what it shows elsewhere (the open item of a master-detail window) does. A modifier-extended move still extends.
pub fn with_selection(
self,
selection: KeySelection<<M as ListModel>::Key>,
) -> VirtualList<M>
pub fn with_selection( self, selection: KeySelection<<M as ListModel>::Key>, ) -> VirtualList<M>
Restore stable-key selection and discard keys absent from this model.
pub fn set_selection(&mut self, selection: KeySelection<<M as ListModel>::Key>)
pub fn set_selection(&mut self, selection: KeySelection<<M as ListModel>::Key>)
Self::with_selection on a list already built: the rows chosen now, keys absent from
the model dropped, and the rows on screen show it where they stand.
pub fn selection_len(&self) -> usize
pub fn selection_len(&self) -> usize
How many of the rows the model holds the selection names.
pub fn with_accessible_name(self, name: impl Into<String>) -> VirtualList<M>
pub fn with_row_presence(
self,
presence: impl Fn(&M, usize, &<M as ListModel>::Key) -> Option<PresenceKey> + 'static,
) -> VirtualList<M>
pub fn with_row_presence( self, presence: impl Fn(&M, usize, &<M as ListModel>::Key) -> Option<PresenceKey> + 'static, ) -> VirtualList<M>
Where each row stands for the people in it: the list paints the collaborators
present at presence’s location over the row, in their colours, so a list shows
where everyone is (crate::presence).
pub fn on_select( self, callback: impl FnMut(<M as ListModel>::Key, bool) + 'static, ) -> VirtualList<M>
pub fn set_on_select(
&mut self,
callback: impl FnMut(<M as ListModel>::Key, bool) + 'static,
)
pub fn set_on_select( &mut self, callback: impl FnMut(<M as ListModel>::Key, bool) + 'static, )
Self::on_select on a list already built.
pub fn on_activate( self, callback: impl FnMut(<M as ListModel>::Key) + 'static, ) -> VirtualList<M>
pub fn set_on_activate(
&mut self,
callback: impl FnMut(<M as ListModel>::Key) + 'static,
)
pub fn set_on_activate( &mut self, callback: impl FnMut(<M as ListModel>::Key) + 'static, )
Self::on_activate on a list already built.
pub fn on_opened(
self,
callback: impl FnMut(<M as ListModel>::Key) + 'static,
) -> VirtualList<M>
pub fn on_opened( self, callback: impl FnMut(<M as ListModel>::Key) + 'static, ) -> VirtualList<M>
Told the item the person opened where it stands. A host keeping which item is open puts
it back as the list’s open prop, so a list built again shows it.
pub fn set_on_opened(
&mut self,
callback: impl FnMut(<M as ListModel>::Key) + 'static,
)
pub fn set_on_opened( &mut self, callback: impl FnMut(<M as ListModel>::Key) + 'static, )
Self::on_opened on a list already built.
pub fn on_closed(self, callback: impl FnMut() + 'static) -> VirtualList<M>
pub fn on_closed(self, callback: impl FnMut() + 'static) -> VirtualList<M>
Told the row standing open closed: the person pressed it again, pressed Escape, pressed beside it, or its item left the list.
pub fn set_on_closed(&mut self, callback: impl FnMut() + 'static)
pub fn set_on_closed(&mut self, callback: impl FnMut() + 'static)
Self::on_closed on a list already built.
pub fn on_fold(
self,
callback: impl FnMut(&<M as ListModel>::Key, bool) + 'static,
) -> VirtualList<M>
pub fn on_fold( self, callback: impl FnMut(&<M as ListModel>::Key, bool) + 'static, ) -> VirtualList<M>
Told when a row’s subtasks fold away or open, which way it went, however they were folded: its disclosure, the keyboard, or assistive technology. A host keeping the person’s folding (a session’s open folders) hears it here.
pub fn with_semantic_key(
self,
encode: impl Fn(&<M as ListModel>::Key) -> String + 'static,
) -> VirtualList<M>
pub fn with_semantic_key( self, encode: impl Fn(&<M as ListModel>::Key) -> String + 'static, ) -> VirtualList<M>
Encode a model key as a stable, unique string for accessibility and headless row actions. The string is opaque outside this list; it must remain unchanged while the key represents the same logical item.
pub fn with_reorder(
self,
validate: impl FnMut(&M, &<M as ListModel>::Key, &DropTarget<<M as ListModel>::Key>) -> bool + 'static,
commit: impl FnMut(&mut M, ReorderDrop<<M as ListModel>::Key>) -> bool + 'static,
) -> VirtualList<M>
pub fn with_reorder( self, validate: impl FnMut(&M, &<M as ListModel>::Key, &DropTarget<<M as ListModel>::Key>) -> bool + 'static, commit: impl FnMut(&mut M, ReorderDrop<<M as ListModel>::Key>) -> bool + 'static, ) -> VirtualList<M>
Enable row reordering. validate controls which stable-key targets
receive a preview; commit mutates the model after a valid drop and
returns whether the collection changed. A drag moves a row, and so
does Ctrl+Up or Ctrl+Down (Alt+Up or Alt+Down, as a tree’s rows
move) on the focused row, through the same validate and commit.
pub fn suppress_tooltips(&mut self, suppressed: bool)
pub fn suppress_tooltips(&mut self, suppressed: bool)
Hide the mounted rows’ tooltips while something the host paints covers the list, as the tree does; the rows the list builds after this follow it.
pub fn reorder_target(&self) -> Option<&DropTarget<<M as ListModel>::Key>>
pub fn reorder_preview(&self) -> Option<Rect>
pub fn model(&self) -> &M
pub fn focus_row(&mut self, key: <M as ListModel>::Key)
pub fn focus_row(&mut self, key: <M as ListModel>::Key)
The row key takes the keyboard: a heading that had it lets go.
Give the row of key the keyboard, as a click or a reveal does; the selection
stays where it was unless the list follows the focus.
pub fn selection(&self) -> &KeySelection<<M as ListModel>::Key>
pub fn selection_mut(&mut self) -> &mut KeySelection<<M as ListModel>::Key>
pub fn focused_key(&self) -> Option<&<M as ListModel>::Key>
pub fn mounted_len(&self) -> usize
pub fn mounted_rows(&self) -> impl Iterator<Item = usize>
pub fn mounted_rows(&self) -> impl Iterator<Item = usize>
The model indexes of the rows the list builds now, in order. What the list exports as its children is what it binds controls for: both read this, so a row reaches a screen reader and a control search alike.
pub fn visible_range(&self) -> Range<usize> ⓘ
pub fn set_scroll_offset(&mut self, offset: f64)
pub fn scroll_offset(&self) -> f64
pub fn max_scroll_offset(&self) -> f64
pub fn scrollbar_thumb(&self) -> Option<Rect>
pub fn set_row_height(&mut self, index: usize, height: f32) -> bool
pub fn key_at_point(&self, point: Point) -> Option<<M as ListModel>::Key>
pub fn key_at_point(&self, point: Point) -> Option<<M as ListModel>::Key>
The key of the row at point (window coordinates), when one is drawn there.
§impl<T, K> VirtualList<VecListModel<T, K>>
impl<T, K> VirtualList<VecListModel<T, K>>
pub fn from_items(
items: Vec<T>,
estimated_row_height: f32,
key: impl FnMut(&T) -> K,
row: impl FnMut(&T, usize, &K) -> Box<dyn Widget> + 'static,
) -> Result<VirtualList<VecListModel<T, K>>, DuplicateListKey>
pub fn from_items( items: Vec<T>, estimated_row_height: f32, key: impl FnMut(&T) -> K, row: impl FnMut(&T, usize, &K) -> Box<dyn Widget> + 'static, ) -> Result<VirtualList<VecListModel<T, K>>, DuplicateListKey>
Short path for an owned collection. The row delegate receives the typed item plus its current display index and stable key.
pub fn reorderable(self) -> VirtualList<VecListModel<T, K>>
pub fn reorderable(self) -> VirtualList<VecListModel<T, K>>
Enable ordinary before/after reordering for the owned vector model.
§impl<M> VirtualList<M>where
M: ListModel,
impl<M> VirtualList<M>where
M: ListModel,
pub fn open_row(&self) -> Option<&<M as ListModel>::Key>
pub fn open_row(&self) -> Option<&<M as ListModel>::Key>
The row standing open into its item, if one does: the item the person is reading where it stands, which the row builder draws its document into.
pub fn set_open(&mut self, key: Option<<M as ListModel>::Key>)
pub fn set_open(&mut self, key: Option<<M as ListModel>::Key>)
Open key into its item where it stands, or close it when it is the row standing open:
the list’s own answer to choosing a row that
opens in place, and how a host opens an item from
elsewhere in the window. The two rows it changes build anew, so the one that opens
grows into its document and the one that closes shuts it away.
Trait Implementations§
§impl<M> ActionControls for VirtualList<M>where
M: ListModel + 'static,
impl<M> ActionControls for VirtualList<M>where
M: ListModel + 'static,
§fn install_control_custody(
&mut self,
domain: &ControlDomain,
attachment: CustodyAttachment,
)
fn install_control_custody( &mut self, domain: &ControlDomain, attachment: CustodyAttachment, )
§fn take_control_invocation(&mut self) -> Option<ControlInvocation>
fn take_control_invocation(&mut self) -> Option<ControlInvocation>
§fn refresh_control_action_availability(
&mut self,
allowed: &HashSet<ActionAddress>,
)
fn refresh_control_action_availability( &mut self, allowed: &HashSet<ActionAddress>, )
§fn take_attributed_control_invocation(
&mut self,
) -> Option<(ControlInvocation, Option<InvocationId>)>
fn take_attributed_control_invocation( &mut self, ) -> Option<(ControlInvocation, Option<InvocationId>)>
Self::take_control_invocation, with the effect invocation the
intent continues when an effect’s handler or completion queued it:
the host applies it for that invocation’s invoker.§fn on_control_invocation_result(
&mut self,
address: &ActionAddress,
result: &Result<ResourceOperationStart, DoorError>,
)
fn on_control_invocation_result( &mut self, address: &ActionAddress, result: &Result<ResourceOperationStart, DoorError>, )
Accepted means queued, not completed; confirmation remains an error
while the host offers its normal confirmation UI. This notification
grants no document authority and must not retry the invocation itself.§fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>
fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>
metadata
to its descendants’ inventory.§fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
§fn has_action_control_bindings(&self) -> bool
fn has_action_control_bindings(&self) -> bool
control_action_bindings
contains an Action, including the same modal child exposure,
regardless of current availability.§fn has_pending_control_invocation(&self) -> bool
fn has_pending_control_invocation(&self) -> bool
§impl<M> PublishesResources for VirtualList<M>where
M: ListModel + 'static,
impl<M> PublishesResources for VirtualList<M>where
M: ListModel + 'static,
§fn resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
fn resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
doc lets
a provider enumerate resources living in the document.§fn caller_view_resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
fn caller_view_resources(&self, _doc: &AutoCommit) -> Vec<ResourceSpec>
§fn action_directory_resource_page(
&self,
_doc: &AutoCommit,
_cursor: &[u8],
_max_results: usize,
) -> Option<ActionDirectoryResourcePage>
fn action_directory_resource_page( &self, _doc: &AutoCommit, _cursor: &[u8], _max_results: usize, ) -> Option<ActionDirectoryResourcePage>
max_results is a hard ceiling; a live
provider must return a non-empty opaque cursor when it has a tail.
None is the default: an unbounded contextual Self::resources
snapshot must not be reached from a remote query or revision.§fn action_directory_revision(&self, _doc: &AutoCommit) -> Option<String>
fn action_directory_revision(&self, _doc: &AutoCommit) -> Option<String>
None when this
widget has no independently mutable remote directory state.§fn action_directory_invocation_domain(
&self,
_doc: &AutoCommit,
) -> ActionDirectoryInvocationDomain
fn action_directory_invocation_domain( &self, _doc: &AutoCommit, ) -> ActionDirectoryInvocationDomain
§fn resource(&self, _doc: &AutoCommit, _id: &str) -> Option<ResourceSpec>
fn resource(&self, _doc: &AutoCommit, _id: &str) -> Option<ResourceSpec>
§fn resource_pending(&self, _id: &str) -> bool
fn resource_pending(&self, _id: &str) -> bool
id, which resolves to nothing now, may resolve once what
the widget is reading off the UI thread lands (a row of a list not
read yet). A caller resolving it is answered then, never kept waiting
on a blocking read nor told it is unknown before the read ends.§fn resources_for(
&self,
participant: Option<&ParticipantId>,
doc: &AutoCommit,
) -> Vec<ResourceSpec>
fn resources_for( &self, participant: Option<&ParticipantId>, doc: &AutoCommit, ) -> Vec<ResourceSpec>
None is this widget’s own view.
Multi-participant widgets override this and Self::resource_for,
and never put one participant’s selection into another’s tree.Self::resources_for as a SharedResource forest whose
unchanged subtrees are the very nodes of the last one, so consumers
skip what they have seen. None, the default, has callers
wrap Self::resources_for. An answer must equal it exactly once
materialised (SharedResource::to_resource).§fn resource_for(
&self,
participant: Option<&ParticipantId>,
doc: &AutoCommit,
id: &str,
) -> Option<ResourceSpec>
fn resource_for( &self, participant: Option<&ParticipantId>, doc: &AutoCommit, id: &str, ) -> Option<ResourceSpec>
Self::resource in participant’s tree.§fn action_directory_visibility(
&self,
_doc: &AutoCommit,
_resource_id: &str,
) -> Option<ActionAddress>
fn action_directory_visibility( &self, _doc: &AutoCommit, _resource_id: &str, ) -> Option<ActionAddress>
None means its label and hierarchy are
not remotely discoverable unless the resource itself has a safe view
action.§fn document_action_result(
&self,
_doc: &AutoCommit,
_address: &ActionAddress,
_changes: &[Patch],
) -> Option<Value>
fn document_action_result( &self, _doc: &AutoCommit, _address: &ActionAddress, _changes: &[Patch], ) -> Option<Value>
address, which has just applied to
doc as changes: a compact summary of what it produced, so its
caller needs no second read to see what happened. Asked only for an
action whose contract declares a JSON result, which this value must
satisfy.§impl<M> ResourceOperations for VirtualList<M>where
M: ListModel + 'static,
impl<M> ResourceOperations for VirtualList<M>where
M: ListModel + 'static,
§fn local_resource_operation_handlers(&self) -> &'static [&'static str]
fn local_resource_operation_handlers(&self) -> &'static [&'static str]
§fn start_operation(
&mut self,
op: &ResourceOperation<'_>,
doc: &mut Edits<'_>,
path: &ExId,
) -> Result<Option<ResourceOperationStart>, String>
fn start_operation( &mut self, op: &ResourceOperation<'_>, doc: &mut Edits<'_>, path: &ExId, ) -> Result<Option<ResourceOperationStart>, String>
§fn resource_operation_handlers(&self) -> HashSet<String>
fn resource_operation_handlers(&self) -> HashSet<String>
§fn poll_resource_operation(
&mut self,
invocation: InvocationId,
cancellation_requested: bool,
doc: &AutoCommit,
path: &ExId,
) -> Option<InvocationUpdate>
fn poll_resource_operation( &mut self, invocation: InvocationId, cancellation_requested: bool, doc: &AutoCommit, path: &ExId, ) -> Option<InvocationUpdate>
§impl<M> Widget for VirtualList<M>where
M: ListModel + 'static,
impl<M> Widget for VirtualList<M>where
M: ListModel + 'static,
§fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
Rows a scroll brought near are mounted in place, and those it took away let go of; the rows themselves carry out their own changes.
§fn for_each_layout_child(&self, visitor: &mut dyn FnMut(&dyn Widget)) -> bool
fn for_each_layout_child(&self, visitor: &mut dyn FnMut(&dyn Widget)) -> bool
The rows as the retained layout holds them: a row built anew since stands there as the row it replaces, until the remount mounts it.
§fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
The rows near its box: the others are clipped away.
§fn focus_synthetic_accessibility(&mut self, path: &[usize]) -> bool
fn focus_synthetic_accessibility(&mut self, path: &[usize]) -> bool
Focus the row an assistive technology moves to, and select it, as the keyboard does.
The row with the keyboard: a menu opened from the keyboard stands under that row, not under the list.
§fn touch_claim(&self, point: Point) -> TouchClaim
fn touch_claim(&self, point: Point) -> TouchClaim
A finger on a row is the row’s to claim (a row that swipes takes a sideways drag); the list scrolls whatever the row leaves to the pointer.
§fn take_structure_change(&mut self) -> StructureChange
fn take_structure_change(&mut self) -> StructureChange
Rows mounted and let go — those a scroll brought near or took away,
those the model re-keyed, reordered, or whose content was built
anew — are mounted where they stand (Self::remount_rows) and
draw themselves whole: the list shows them come and go.
With no layout of its own the list has nothing to mount under yet: the build that lays it out mounts the rows it shows, so until then it asks nothing of the host — a list the tree keeps without laying it out (a closed sidebar) would otherwise ask for a rebuild every frame and never have one carry it out.
§fn collect_damage(&self, regions: &mut Vec<Rect>)
fn collect_damage(&self, regions: &mut Vec<Rect>)
A scroll that changed nothing else offers the host a copy of the rows that stay on screen, the bar’s track being what does not move with them; what changed in the rows besides is theirs to say. Any other change repaints the list.
The list and its rows, the rows kept between walks: a walk beside an
unchanged list builds and compares no row (Self::accessibility_children).
§fn provide<'a>(&'a self, request: &mut Request<'a, '_>)
fn provide<'a>(&'a self, request: &mut Request<'a, '_>)
capability). Declare capabilities with crate::provides!.§fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
Widget::provide.§fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
§fn sync(&mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static))
fn sync(&mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static))
Widget::children_mut returns; a widget overrides it only to
read state of its own, or to sync children it does not expose there.§fn update(
&mut self,
state: &(dyn Any + 'static),
path: &(dyn Any + 'static),
) -> bool
fn update( &mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static), ) -> bool
Widget::children_mut returns without short-circuiting, so a container never freezes its
descendants; an override checks state of its own and forwards.fn build_layout( &mut self, taffy: &mut TaffyTree, theme: &Theme, node_map: &mut HashMap<NodeId, *mut dyn Widget>, ) -> NodeId
§fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)
fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)
§fn draw(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
scene. The default paints nothing.§fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn children(&self) -> Vec<&dyn Widget>
§fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))
Self::children; toolkit
containers override this to walk their retained storage directly.fn children_mut(&mut self) -> Vec<&mut dyn Widget>
§fn accessibility_represents_child(&self, child_index: usize) -> bool
fn accessibility_represents_child(&self, child_index: usize) -> bool
children entry is already
represented in this widget’s own synthetic
accessibility tree, so the bridge must not
export it a second time. A host that publishes a child’s semantics
itself (to add its own controls inside the same dialog) answers true
for that child; assistive technology then sees one copy, not two.fn name(&self) -> &'static str
§fn test_id(&self) -> Option<&str>
fn test_id(&self) -> Option<&str>
None falls back to a path-based
key. Must be unique across the live tree — the registry resolves on
first match, so a duplicate shadows the second occurrence.§fn as_any(&self) -> Option<&(dyn Any + 'static)>
fn as_any(&self) -> Option<&(dyn Any + 'static)>
dyn Widget. Default None (a widget may borrow
and so not be 'static); a widget opts in with Some(self), and a
Decorator answers itself.fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
§fn get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
fn is_focusable(&self) -> bool
fn set_focus(&mut self, focused: bool)
fn is_focused(&self) -> bool
fn wants_pointer_capture(&self) -> bool
§fn needs_animation_frame(&self) -> bool
fn needs_animation_frame(&self) -> bool
App polls this in Event::AboutToWait; without it a curve would
freeze until an unrelated event woke it.§fn take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
§fn needs_redraw(&self) -> bool
fn needs_redraw(&self) -> bool
false (clean). A widget is clean until something it reads
changes: a leaf that keeps state says so by tracking a dirty: bool
(set in handle_event/sync, cleared in mark_drawn()), and one
that paints from the people on the document reads the frame’s
presence (crate::presence::frame::frame). Containers MUST
forward: dirty iff any descendant is.§fn draw_overlay(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw_overlay( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
draw
recursion, so anything emitted here composites above every sibling
regardless of tree order — the toolkit’s overlay mechanism for
content that escapes its layout box (an open Dropdown, a
popover). Default recurses children_mut.§fn modal_capture(&self) -> Option<Rect>
fn modal_capture(&self) -> Option<Rect>
Some(rect) when this subtree holds an open modal, its panel box.
While any widget reports Some, the host suppresses its own global
focus shortcuts and swallows unhandled pointer presses so nothing
behind the modal is clickable. Containers MUST forward (the default
does, via first Some among children).§fn traps_focus(&self) -> bool
fn traps_focus(&self) -> bool
true, the host restricts Tab/directional
focus to this subtree (wrapping at the ends) and restores the prior
focus once it goes back to false. Default false.§fn next_wake_deadline(&self) -> Option<Instant>
fn next_wake_deadline(&self) -> Option<Instant>
§fn mark_drawn(&mut self)
fn mark_drawn(&mut self)
dirty flag. Default forwards to children.§fn is_layout_dirty(&self) -> bool
fn is_layout_dirty(&self) -> bool
true; widgets with a fixed intrinsic size should override
to false unless a size-affecting mutation landed. Containers MUST
forward: layout-dirty iff any descendant is.§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
layout_dirty frame needs taffy to re-solve sizes
(compute_layout) rather than just reposition already-solved boxes.
Scrollable is the motivating override: it translates its origin
in apply_layout without changing any taffy size, so re-solving on
every scroll frame is pure waste.§fn accessibility(&self) -> Option<AccessNode>
fn accessibility(&self) -> Option<AccessNode>
AccessState. Default None means
presentational: the node is skipped and children reparent onto the
parent. State must be derived, not stored so it can’t drift from
draw; names must already be i18n!-resolved.§fn perform_semantic_action(
&mut self,
target: &str,
action: &Action,
state: &mut Edits<'_>,
path: &(dyn Any + 'static),
) -> bool
fn perform_semantic_action( &mut self, target: &str, action: &Action, state: &mut Edits<'_>, path: &(dyn Any + 'static), ) -> bool
target is the opaque stable value supplied through
AccessNode::with_action_target. Read more§fn native_input_snapshot(
&self,
_state: &(dyn Any + 'static),
_path: &(dyn Any + 'static),
) -> Option<Value>
fn native_input_snapshot( &self, _state: &(dyn Any + 'static), _path: &(dyn Any + 'static), ) -> Option<Value>
§fn view_only_scroll(&self, _event: &WindowEvent) -> bool
fn view_only_scroll(&self, _event: &WindowEvent) -> bool
sync. The runner still lays out, paints and refreshes accessibility
geometry; unknown handlers stay on the full path.§fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn apply_primary_vertical_scroll( &mut self, _action: PrimaryScrollAction, ) -> PrimaryScrollResult
§fn callback_binding(&self) -> Option<CallbackBinding>
fn callback_binding(&self) -> Option<CallbackBinding>
§fn has_separate_document_owner(&self) -> bool
fn has_separate_document_owner(&self) -> bool
§fn history_owner(&self) -> Option<HistoryOwner>
fn history_owner(&self) -> Option<HistoryOwner>
§fn record_owners(&self) -> Vec<HistoryOwner>
fn record_owners(&self) -> Vec<HistoryOwner>
crate::record::person). They take no part in this
widget’s history or controls.§fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
§fn unmount_native_views(&mut self)
fn unmount_native_views(&mut self)
§fn native_view_frame_start(&mut self)
fn native_view_frame_start(&mut self)
§fn set_platform_conventions(&mut self, conventions: PlatformConventions)
fn set_platform_conventions(&mut self, conventions: PlatformConventions)
§fn set_window_bar_control(&mut self, in_bar: bool)
fn set_window_bar_control(&mut self, in_bar: bool)
§fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
edits;
the host syncs again when the document changed. The default settles the returned children.fn measure( &mut self, _known: Size<Option<f32>>, _available: Size<AvailableSpace>, _text_renderer: &mut TextRenderer, ) -> Size<f32>
§fn layout_info(&self) -> Option<LayoutInfo>
fn layout_info(&self) -> Option<LayoutInfo>
None means the widget has no such policy; ordinary manual widgets remain
valid. Values are available after build/settlement and carry real origins.§fn adjust_layout_style(
&mut self,
_taffy: &mut TaffyTree,
_node: NodeId,
_text: &mut TextRenderer,
) -> bool
fn adjust_layout_style( &mut self, _taffy: &mut TaffyTree, _node: NodeId, _text: &mut TextRenderer, ) -> bool
§fn observe_physical_input(&mut self, _input: PhysicalInput)
fn observe_physical_input(&mut self, _input: PhysicalInput)
§fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
Self::children lists, so what is walked
there keeps the paths, sibling indices and registry entries it had.§fn window_slot(&self, _id: String) -> Option<ToolbarAction>
fn window_slot(&self, _id: String) -> Option<ToolbarAction>
id
(crate::window_toolbar::ToolbarAction): a button’s icon and name.
None for anything that is not a button.§fn stands_for(&self, address: *const ()) -> bool
fn stands_for(&self, address: *const ()) -> bool
address, or stands in the tree
for it: a Decorator stands for every widget it wraps, so a
scroller drawn inside one is found where the decorator is
(crate::scroll_copy::offer).§fn focus_reveal_context(&self) -> Option<Rect>
fn focus_reveal_context(&self) -> Option<Rect>
§fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
§fn test_rects(&self) -> Vec<(String, Rect)>
fn test_rects(&self) -> Vec<(String, Rect)>
Widget::get_rect; zero-area entries are dropped.§fn child_clip_rect(&self) -> Option<Rect>
fn child_clip_rect(&self) -> Option<Rect>
§fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
axis that this widget, as a scroll view’s content,
offers it to settle on, measured from its own leading edge: a board’s
lanes (crate::widget::Board). None leaves a scroller stopping
wherever the hand left it.§fn take_action_palette_request(&mut self) -> Option<ActionAddress>
fn take_action_palette_request(&mut self) -> Option<ActionAddress>
resources().§fn take_search_request(&mut self) -> bool
fn take_search_request(&mut self) -> bool
§fn cursor_shape(&self, _point: Point) -> Option<CursorIcon>
fn cursor_shape(&self, _point: Point) -> Option<CursorIcon>
point is logical coords, same space as Widget::get_rect;
None defers to the default arrow. The host hit-tests the whole
tree via node_map and picks the smallest-area claim, so containers
need not override this.§fn claims_raw_touch(&self, _point: Point) -> bool
fn claims_raw_touch(&self, _point: Point) -> bool
point (logical coords, same space as Widget::get_rect). Read more§fn tooltip(&self) -> Option<&str>
fn tooltip(&self) -> Option<&str>
crate::widget::tooltip::TooltipHost),
hit-tested like cursor_shape so containers
need not forward it. An icon-only control should also use this as
its accessible name.§fn tooltip_side(&self) -> TooltipSide
fn tooltip_side(&self) -> TooltipSide
fn tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
§fn is_default_keyboard_focus(&self) -> bool
fn is_default_keyboard_focus(&self) -> bool
§fn keyboard_input_scope(&self) -> Option<u64>
fn keyboard_input_scope(&self) -> Option<u64>
§fn set_full_bleed(&mut self, _full_bleed: bool)
fn set_full_bleed(&mut self, _full_bleed: bool)
§fn set_invalid(&mut self, _invalid: bool)
fn set_invalid(&mut self, _invalid: bool)
Field::with_error: an invalid control edges itself in danger ink
and reports invalid to assistive technology. Controls without a
field face ignore it.§fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
§fn wants_tab_input(&self) -> bool
fn wants_tab_input(&self) -> bool
§fn ime_cursor_rect(&self) -> Option<Rect>
fn ime_cursor_rect(&self) -> Option<Rect>
Some enables IME for the focused widget and
positions its candidate window; non-text controls keep the default
None and therefore disable IME.§fn scopes_keyboard_focus(&self) -> bool
fn scopes_keyboard_focus(&self) -> bool
Self::traps_focus it moves no focus when it starts or ends, and
pointer input is unaffected. Default false.§fn take_app_activation(&mut self) -> Option<u64>
fn take_app_activation(&mut self) -> Option<u64>
§fn take_focus_request(&mut self) -> Option<String>
fn take_focus_request(&mut self) -> Option<String>
Self::accessibility reports this subtree hidden, for a
host that asks it of every node to prune focus traversal. Widgets
whose node is costly to build (text values, per-block children, a
translated name) answer without building it: the focus walk asks
every widget in the window on every recomputation. Any override must
agree with accessibility(); debug builds check it in the walk.§fn accessibility_root(&self) -> Option<AccessNode>
fn accessibility_root(&self) -> Option<AccessNode>
Self::accessibility’s own node with its children left empty:
its role, identity (semantic_key) and state. Focus capture and focus
order read only these, for every node on every frame, so a widget
whose node carries a large subtree (a document exporting its every
block) answers without building it. An override must equal
accessibility() with children cleared.§fn synthetic_accessibility_rect(&self, _path: &[usize]) -> Option<Rect>
fn synthetic_accessibility_rect(&self, _path: &[usize]) -> Option<Rect>
AccessNode::children. The path is
its child-index path beneath this widget’s accessibility node. Returning
a rect lets AccessKit activation inject the same click as pointer input.§fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
children entry beneath a
synthetic child returned by accessibility.
The returned index addresses AccessNode::children for this frame.
Collections use this to place a real interactive row delegate inside
its virtual ListItem/TreeItem instead of exporting a duplicate.§fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>
fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>
children entry beneath a
nested path of synthetic children returned by
accessibility. Read more§fn lays_out_child(&self, _child_index: usize) -> bool
fn lays_out_child(&self, _child_index: usize) -> bool
§fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
children entry to
assistive technology, when this widget holds the words for it: a
row’s secondary line is its trailing switch’s description. The
bridge sets it as that child’s node’s description unless the child
describes itself.§fn perform_action(
&mut self,
_action: &Action,
_key_path: &[u64],
_state: &mut Edits<'_>,
_path: &(dyn Any + 'static),
) -> bool
fn perform_action( &mut self, _action: &Action, _key_path: &[u64], _state: &mut Edits<'_>, _path: &(dyn Any + 'static), ) -> bool
Action on this
widget, or on one of its synthetic accessibility nodes. May mutate
the CRDT like handle_event. Read more§fn is_enabled(&self) -> bool
fn is_enabled(&self) -> bool
false) widget is excluded from focus traversal, must
reject input in handle_event, and renders dimmed (see
DISABLED_ALPHA).§fn ime_requires_deferred_ack(&self) -> bool
fn ime_requires_deferred_ack(&self) -> bool
§fn ime_refuses_ordinary_commits(&self) -> bool
fn ime_refuses_ordinary_commits(&self) -> bool
§fn start_deferred_text(&mut self) -> Option<Receipt>
fn start_deferred_text(&mut self) -> Option<Receipt>
§fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
§fn ime_content(&self) -> Option<InputContent>
fn ime_content(&self) -> Option<InputContent>
text-input-v3, native IMEs elsewhere). None is intentionally the
default: enabling an IME for buttons, canvas tools or games makes the
compositor raise an on-screen keyboard over content that cannot accept
the committed text. Read more§fn ime_multiline(&self) -> bool
fn ime_multiline(&self) -> bool
§fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
§fn presented(&self) -> bool
fn presented(&self) -> bool
true; false only for a widget standing in for a window’s
content whose first frame has not drawn. Must latch: once true,
never false again for the same content.§fn arrives_from(&self) -> Source
fn arrives_from(&self) -> Source
presented: this device (an app starting here),
another device or a host. A frame from this device may hold the
window’s first frame up to one frame budget; any other reserves the
window’s place and says where it comes from after a while.§fn arrival_progress(&self) -> Option<Progress>
fn arrival_progress(&self) -> Option<Progress>
§fn arrival_shape(&self) -> SkeletonShape
fn arrival_shape(&self) -> SkeletonShape
§fn text_review(&self) -> Option<(usize, String)>
fn text_review(&self) -> Option<(usize, String)>
(caret_byte, text), byte offset on a char boundary. The host diffs
this before/after an event so caret-only moves (arrows, Home/End)
get announced, not just typing.§fn on_external_event(
&mut self,
_payload: &str,
_state: &mut Edits<'_>,
_root: &(dyn Any + 'static),
)
fn on_external_event( &mut self, _payload: &str, _state: &mut Edits<'_>, _root: &(dyn Any + 'static), )
crate::app::UserEvent::External (e.g. a worker thread streaming
output into a status log). Default no-op; the App redraws and
re-syncs after dispatch, so mutating state here is enough.crate::gesture::NavGestureRecognizer and delivered to the whole
tree; return true once consumed. Default forwards to children, so
a widget that owns history becomes swipe-navigable for free.Self::on_nav_gesture would consume now. A widget
that owns history overrides this beside on_nav_gesture.§fn take_focus_reset(&mut self) -> bool
fn take_focus_reset(&mut self) -> bool
crate::app::App::autofocus_on_structure_change;
a wizard raises it on step transitions.§fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
§fn dev_route(&self) -> Option<RouteSnapshot>
fn dev_route(&self) -> Option<RouteSnapshot>
§fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
route back. Returns whether a router in this subtree accepted it. Read more§fn appearance_intent(&self) -> Option<AppearanceIntent>
fn appearance_intent(&self) -> Option<AppearanceIntent>
crate::app::App::appearance_reconcile — how a settings pane
re-themes the running app live without a back-channel.
Level-triggered; the App recurses Self::children itself, so
containers need not forward it. First Some wins.§fn minimum_window_width(&self) -> Option<f64>
fn minimum_window_width(&self) -> Option<f64>
NavShell answers with one column
at a time). The host states it to the window system, so the desktop
stops a resize there. None: no opinion. The host walks the tree
itself (minimum_window_width), so containers need not forward
it; the first Some wins.§fn preferred_window_size(&self) -> Option<(f64, f64)>
fn preferred_window_size(&self) -> Option<(f64, f64)>
None: the
window is the user’s and the app lays itself out in whatever it gets.§fn set_motion_reduced(&mut self, reduced: bool)
fn set_motion_reduced(&mut self, reduced: bool)
§fn needs_idle_sync(&self) -> bool
fn needs_idle_sync(&self) -> bool
sync still needs to run on idle frames without input or
collab events — e.g. waiting out a document-adoption grace window.§fn disclosing(&self) -> Option<Disclosing>
fn disclosing(&self) -> Option<Disclosing>
motion::Disclosure: an in-window banner arriving or leaving), or a
content-sized container one moves in, how far what follows it is
drawn from where it is laid out. A moving band stands out of the
layout; its container places it (Self::place_disclosing) and
draws the widgets after it lower by transform, so they move with the
band’s edge instead of being laid out again every frame. None at
rest (the default).§fn place_disclosing(&mut self, _slot: Rect)
fn place_disclosing(&mut self, _slot: Rect)
Disclosing::Band) stands while it is
out of the layout: its slot’s top and width (slot’s height is
zero), set by its container after each layout.§fn is_band(&self) -> bool
fn is_band(&self) -> bool
widget::Disclosing). Its column leaves it out of its identity
across rebuilds.§fn note_placement(&mut self, _placement: Placement)
fn note_placement(&mut self, _placement: Placement)
§fn animation_detail(&self) -> Option<String>
fn animation_detail(&self) -> Option<String>
None when it has nothing
to add to its name and geometry.§fn holds_frame_until(&self, now: Instant) -> Option<Instant>
fn holds_frame_until(&self, now: Instant) -> Option<Instant>
crate::arriving): a local read that has
not answered and is still inside its frame budget. The host keeps
the frame on screen until then, or until the data lands, so the
person never sees the space empty and then filled. Containers
forward (the default does).§fn serve_deadline(&mut self, _now: Instant) -> bool
fn serve_deadline(&mut self, _now: Instant) -> bool
Self::next_wake_deadline) is
due at now: do the work it was for, and say whether anything
changed. The default says it did.§fn dismiss_presented_modal(&mut self) -> bool
fn dismiss_presented_modal(&mut self) -> bool
§fn presents_modal(&self) -> bool
fn presents_modal(&self) -> bool
Widget::dismiss_presented_modal.§fn has_pending_visual_work(&self) -> bool
fn has_pending_visual_work(&self) -> bool
§fn has_transient_feedback(&self) -> bool
fn has_transient_feedback(&self) -> bool
§fn damage_covers_own_box(&self) -> bool
fn damage_covers_own_box(&self) -> bool
Self::collect_damage covers every pixel a relayout changed by
moving or resizing its layout box: a host that repaints where moved
widgets were and are may then leave this widget’s box to it (its
children’s boxes still count). A block editor that grew by a
paragraph says where its blocks were and are; the default does not
claim it.§fn mark_children_drawn(&mut self)
fn mark_children_drawn(&mut self)
§fn release_scene_cache(&mut self)
fn release_scene_cache(&mut self)
§fn composition_follows_allocation(&self) -> bool
fn composition_follows_allocation(&self) -> bool
take_structure_dirty themselves when a new allocation changes what
they show, keep the default: a resize re-solves the retained tree in
place instead of recomposing all of it.§fn paint_bounds(&self) -> Rect
fn paint_bounds(&self) -> Rect
draw_child
skips the draw when it misses the viewport. Override for widgets
that paint past their own rect.Auto Trait Implementations§
impl<M> !Freeze for VirtualList<M>
impl<M> !RefUnwindSafe for VirtualList<M>
impl<M> !Send for VirtualList<M>
impl<M> !Sync for VirtualList<M>
impl<M> Unpin for VirtualList<M>
impl<M> UnsafeUnpin for VirtualList<M>
impl<M> !UnwindSafe for VirtualList<M>
Blanket Implementations§
§impl<T> AsDynWidget for Twhere
T: Widget,
impl<T> AsDynWidget for Twhere
T: Widget,
§fn as_dyn_widget(&self) -> &dyn Widget
fn as_dyn_widget(&self) -> &dyn Widget
§impl<T> AudiencePresentationWidgetExt for T
impl<T> AudiencePresentationWidgetExt for T
fn audience_presentation_request(&self) -> Option<AudiencePresentationRequest>
fn on_audience_presentation_changed(&mut self, active: bool)
fn draw_audience_presentation( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, rect: Rect, ) -> bool
fn handle_audience_presentation_event( &mut self, event: &WindowEvent, state: &mut Edits<'_>, path: &ExId, ) -> bool
fn on_audience_presentation_closed(&mut self)
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CompleteContentWidgetExt for T
impl<T> CompleteContentWidgetExt for T
fn complete_content_size(&self) -> Option<Size>
fn draw_complete_content( &mut self, scene: &mut Scene, bounds: Rect, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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 for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> FloatingSurfaceWidgetExt for T
impl<T> FloatingSurfaceWidgetExt for T
fn on_floating_surface_focus_changed(&mut self, id: Option<&str>, focused: bool)
fn on_floating_surface_ime_source_changed(&mut self, id: Option<&str>)
fn on_floating_surface_event_source(&mut self, id: Option<&str>)
fn floating_surface_event( &mut self, id: &str, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
fn floating_surface_accessibility(&self, id: &str) -> Option<AccessNode>
fn perform_floating_surface_accessibility_action( &mut self, id: &str, target: &str, action: &Action, state: &mut Edits<'_>, path: &ExId, ) -> bool
fn floating_surface_ime(&self, id: &str) -> Option<(InputContent, Rect)>
fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>
fn take_capture_studio_request(&mut self) -> Option<CaptureMode>
fn take_floating_surface_source_updates(&mut self) -> Vec<(String, Rect)>
fn draw_floating_surfaces( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
fn draw_floating_surface( &mut self, id: &str, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool
fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>
fn active_floating_surface_ids(&self) -> Vec<String>
fn set_floating_surface_bounds(&mut self, bounds: Rect)
fn on_floating_surface_host_message( &mut self, message: &FloatingSurfaceHostMessage, )
§impl<T> FullscreenWidgetExt for T
impl<T> FullscreenWidgetExt for T
fn fullscreen_intent(&self) -> Option<bool>
fn fullscreen_params(&self) -> FullscreenRequest
fn on_fullscreen_changed(&mut self, active: bool)
Source§impl<W> HostDelivery for W
impl<W> HostDelivery for W
Source§fn start_encoded(
&mut self,
kind: OperationKind,
type_id: &str,
payload: &[u8],
doc: &mut AutoCommit,
path: &ExId,
) -> Result<Option<Effected>, String>
fn start_encoded( &mut self, kind: OperationKind, type_id: &str, payload: &[u8], doc: &mut AutoCommit, path: &ExId, ) -> Result<Option<Effected>, String>
type_id, payload) of kind.Source§fn deliver_control(
&mut self,
kind: OperationKind,
control: &str,
doc: &mut AutoCommit,
path: &ObjId,
) -> Result<Option<Effected>, String>
fn deliver_control( &mut self, kind: OperationKind, control: &str, doc: &mut AutoCommit, path: &ObjId, ) -> Result<Option<Effected>, String>
control (its id,
as its tilo.control: resource names it).§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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