pub struct List<Msg> { /* private fields */ }Expand description
A vertical list that only draws the rows it shows, so it stays fast with any number of items.
For a very long list, keep the items as an Arc<[ListItem]> in your state and pass it to
List::shared, so they are not built again every frame.
The application owns the selection and the checked rows; the list reports changes through messages. Hovered and selected rows raise their surface, show the accent pillar and slide their icon and label one cell right. The pillar, the check mark of a multi-select list and the detail column never move, so a mark is always where the pointer left it.
Keys while focused: ↑/↓ or k/j move, Home/End and PgUp/PgDn jump, Enter activates, Space
toggles in multi-select lists and activates otherwise. With wrap ↓ on the last
row goes on to the first and ↑ on the first to the last. A click on a row selects and activates
it, or with activate_on(Click::Double) only selects it and a double
click activates; in a multi-select list a click on the check mark (or the cell after it) only
toggles.
Style keys: list-item with hover, selected, focus, pressed; list-item.faint,
list-header, list-detail, scrollbar.
Implementations§
Source§impl<Msg: 'static> List<Msg>
impl<Msg: 'static> List<Msg>
Sourcepub fn new(items: impl IntoIterator<Item = ListItem>) -> Self
pub fn new(items: impl IntoIterator<Item = ListItem>) -> Self
A list of items.
A list of items kept by the application, e.g. in its state: building the list in view
only clones the Arc, however many items there are.
Sourcepub fn scrollbar(self, style: ScrollbarStyle) -> Self
pub fn scrollbar(self, style: ScrollbarStyle) -> Self
Draws the scrollbar in style whatever the theme chooses.
Sourcepub fn checked(self, checked: Vec<bool>) -> Self
pub fn checked(self, checked: Vec<bool>) -> Self
Turns the list into a multi-select list; checked[i] tells whether row i is checked.
Sourcepub fn empty_text(self, text: impl Into<String>) -> Self
pub fn empty_text(self, text: impl Into<String>) -> Self
Text shown when there are no items.
Sourcepub fn on_select(self, message: impl Fn(usize) -> Msg + 'static) -> Self
pub fn on_select(self, message: impl Fn(usize) -> Msg + 'static) -> Self
Message for moving the selection to a row.
Sourcepub fn on_activate(self, message: impl Fn(usize) -> Msg + 'static) -> Self
pub fn on_activate(self, message: impl Fn(usize) -> Msg + 'static) -> Self
Message for opening a row (Enter, click).
Sourcepub fn activate_on(self, click: Click) -> Self
pub fn activate_on(self, click: Click) -> Self
How many clicks activate a row: Click::Single, the default, selects and activates at
once; Click::Double only selects on a click and activates on a second press on the same
row within Click::INTERVAL. Enter activates either way.
With Click::Double a click reports its row through List::on_select even when that
row is selected already, so the application can tell a row the person pointed at from one
it selected by itself.
Sourcepub fn on_toggle(self, message: impl Fn(usize) -> Msg + 'static) -> Self
pub fn on_toggle(self, message: impl Fn(usize) -> Msg + 'static) -> Self
Message for checking or unchecking a row in a multi-select list (Space, click on the mark).
Sourcepub fn wrap(self, wrap: bool) -> Self
pub fn wrap(self, wrap: bool) -> Self
Lets ↓ (or j) on the last selectable row go on to the first and ↑ (or k) on the first go to the last, as a menu does; headers and gaps are skipped. PgUp/PgDn and Home/End still stop at the ends. Off by default: the keys stop at either end.
Sourcepub fn label_first(self, label_first: bool) -> Self
pub fn label_first(self, label_first: bool) -> Self
When a row is too narrow for its label and its detail, cuts the detail first, with …, and
leaves it out when fewer than four cells of it would remain, so the label stays whole as
long as it fits on its own. For rows chosen by their label, where the detail only explains.
Off by default: the detail keeps its width and the label is cut, for rows whose detail is
what they are about, such as a measurement or an address.
Trait Implementations§
Source§impl<Msg: 'static> Widget<Msg> for List<Msg>
impl<Msg: 'static> Widget<Msg> for List<Msg>
Source§fn measure(&self, _cx: &mut MeasureCx<'_>, available: Size) -> Size
fn measure(&self, _cx: &mut MeasureCx<'_>, available: Size) -> Size
available.Source§fn event(&self, cx: &mut EventCx<'_, Msg>, event: &Event) -> bool
fn event(&self, cx: &mut EventCx<'_, Msg>, event: &Event) -> bool
true when the event was used; unused key and scroll events
bubble to the parent widget.Source§fn paint_overlay(&self, _cx: &mut PaintCx<'_>, _anchor: Rect)
fn paint_overlay(&self, _cx: &mut PaintCx<'_>, _anchor: Rect)
PaintCx::request_overlay. anchor is the area the widget was painted in.Source§fn children_mut(&mut self) -> &mut [Node<Msg>]
fn children_mut(&mut self) -> &mut [Node<Msg>]
Auto Trait Implementations§
impl<Msg> !RefUnwindSafe for List<Msg>
impl<Msg> !Send for List<Msg>
impl<Msg> !Sync for List<Msg>
impl<Msg> !UnwindSafe for List<Msg>
impl<Msg> Freeze for List<Msg>
impl<Msg> Unpin for List<Msg>
impl<Msg> UnsafeUnpin for List<Msg>
Blanket Implementations§
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
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