Skip to main content

VirtualList

Struct VirtualList 

Source
pub struct VirtualList { /* private fields */ }
Expand description

A list of any length that builds only the rows that show, with rows of any height. They are laid out and measured as they appear, and what was measured is kept by key, so going back finds them at the right size. It can jump to a row, stay at the end as a chat does, and keep what is on screen still when rows come in above it. With nothing to select, the arrows, Page Up, Page Down, Home and End scroll; with a selection or on_activate, they move between rows, and Enter or Space activates.

Rows of the same height, told with row_height, need no measuring.

use ravenrs_reactive::State;
use ravenrs_widgets::{Text, Ui, VirtualList};

let chosen = State::new(None::<usize>);
let list = VirtualList::new(10_000, |index| Text::new(format!("Row {index}")))
    .key(|index| index as u64)
    .selection(chosen.binding())
    .height(320.0);
let mut ui = Ui::new(list, ravenrs_style::Theme::raven_dark());
ui.update();

Implementations§

Source§

impl VirtualList

Source

pub fn new<V: View + 'static>( count: usize, item: impl Fn(usize) -> V + 'static, ) -> Self

A list of count rows, with item making the view of each one when it shows.

Source

pub fn key(self, key: impl Fn(usize) -> u64 + 'static) -> Self

What identifies a row, which is its position by default. With it, a row keeps its measured height and what is on screen stays still when rows come in above. It is asked for every row on each build, so it should only read a value.

Source

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

How tall a row probably is until it has been measured (40 by default).

Source

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

Every row has this height, and nothing has to be measured.

Source

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

The height of each row is known, as with the pages of a document. It is asked for every row on each build.

Source

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

Gap between rows, in logical pixels.

Source

pub fn follow_end(self, follow: bool) -> Self

Starts at the end and stays there as rows arrive, as a chat does, until the user scrolls away; coming back to the end takes it up again.

Source

pub fn scroll_to(self, index: Binding<Option<usize>>) -> Self

Set it to a row to bring that row to the start of the view. It goes back to None.

Source

pub fn selection(self, selected: Binding<Option<usize>>) -> Self

Makes the rows selectable, one at a time, with the pointer and the arrows.

Source

pub fn on_activate(self, handler: impl Fn(usize) + 'static) -> Self

Called with a row on a double click, or on Enter or Space.

Source

pub fn on_visible(self, handler: impl Fn(Range<usize>) + 'static) -> Self

Called with the rows that show whenever they change, as for loading what comes next.

Source

pub fn row_name(self, name: impl Fn(usize) -> String + 'static) -> Self

What screen readers call each row, for rows whose content does not say it.

Source

pub fn label(self, label: impl Into<String>) -> Self

What screen readers call the list, instead of the name in Labels.

Source

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

A fixed height. It takes the height its parent gives it by default.

Source

pub fn horizontal(self) -> Self

Runs from left to right; the sizes above are then widths, and the height is across.

Trait Implementations§

Source§

impl Debug for VirtualList

Source§

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

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

impl View for VirtualList

Source§

fn build(&self, cx: &mut BuildCx<'_>) -> NodeId

Creates this view’s node for the current build.
Source§

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

The name the diagnostics panel shows this view’s cost under.

Auto Trait Implementations§

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<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, 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.
Source§

impl<V> ViewExt for V
where V: View,

Source§

fn padding(self, padding: impl Into<Insets>) -> Styled<Self>

Adds padding inside the box, in logical pixels.
Source§

fn background(self, fill: impl Into<Fill>) -> Styled<Self>

Paints a background behind the content.
Source§

fn frame(self, width: Option<f32>, height: Option<f32>) -> Styled<Self>

Fixes the width and/or height in logical pixels; None keeps the content size.
Source§

fn width(self, width: f32) -> Styled<Self>

Fixes the width in logical pixels.
Source§

fn height(self, height: f32) -> Styled<Self>

Fixes the height in logical pixels.
Source§

fn grow(self, grow: f32) -> Styled<Self>

Takes a share of the free space in the parent stack.
Source§

fn stretch(self) -> Styled<Self>

Stretches across the parent stack’s cross axis.
Source§

fn centered(self) -> Styled<Self>

Centers the content inside the box.
Source§

fn tooltip(self, text: impl Into<String>) -> Tooltip<Self>

Shows text above the view while the pointer is over it; see Tooltip.
Source§

fn opacity(self, opacity: f32) -> Faded<Self>

Draws the view and everything in it at this opacity, from 0.0 to 1.0, easing to it when it changes. Layout and input stay as they are; see Faded.
§

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