Struct VecListModel
pub struct VecListModel<T, K> { /* private fields */ }Expand description
Convenient fully-resident model. Database and paged sources generally
implement ListModel directly instead.
Implementations§
§impl<T, K> VecListModel<T, K>
impl<T, K> VecListModel<T, K>
pub fn new(
items: Vec<T>,
key: impl FnMut(&T) -> K,
) -> Result<VecListModel<T, K>, DuplicateListKey>
pub fn new( items: Vec<T>, key: impl FnMut(&T) -> K, ) -> Result<VecListModel<T, K>, DuplicateListKey>
Build the key index once.
pub fn empty() -> VecListModel<T, K>
pub fn empty() -> VecListModel<T, K>
No rows, for a host that shows its list before the first rows are read
(Self::push fills it).
pub fn with_parents(
self,
parent: impl FnMut(&T) -> Option<K>,
) -> VecListModel<T, K>
pub fn with_parents( self, parent: impl FnMut(&T) -> Option<K>, ) -> VecListModel<T, K>
The rows stand as a tree: each under the row of the item parent
names, which stands over it in the same list
(VirtualList::with_tree). A row
outside the tree names no parent, as does one pushed later.
pub fn with_branches(self, branch: impl FnMut(&T) -> bool) -> VecListModel<T, K>
pub fn with_branches(self, branch: impl FnMut(&T) -> bool) -> VecListModel<T, K>
The rows that take subtasks: a folder is one before its contents are read, so it
shows the disclosure that opens it. Read when set, as Self::with_parents does.
pub fn item(&self, index: usize) -> Option<&T>
pub fn items(&self) -> &[T]
pub fn push(&mut self, key: K, item: T) -> Result<(), DuplicateListKey>
pub fn remove(&mut self, index: usize) -> Option<T>
pub fn move_item(&mut self, from: usize, to: usize) -> bool
Trait Implementations§
§impl<T, K> ListModel for VecListModel<T, K>
impl<T, K> ListModel for VecListModel<T, K>
type Key = K
fn len(&self) -> usize
fn key_at(&self, index: usize) -> Option<<VecListModel<T, K> as ListModel>::Key>
fn index_of( &self, key: &<VecListModel<T, K> as ListModel>::Key, ) -> Option<usize>
§fn accepts_children(&self, index: usize) -> bool
fn accepts_children(&self, index: usize) -> bool
Whether the row
index takes other rows as its subtasks: a tree’s drag offers a drop
into it (DropPlacement::Inside), and the keyboard indents a row into it. false
for a leaf, or a model that holds no tree.§fn has_subtasks(&self, index: usize) -> bool
fn has_subtasks(&self, index: usize) -> bool
Whether the row
index has subtasks to disclose, whether or not any of them stands in
the list: a folder read when it opens shows the disclosure that reads it. false for
a leaf, or a model that holds no tree.§fn tree_at(
&self,
index: usize,
) -> Option<TreeRow<<VecListModel<T, K> as ListModel>::Key>>
fn tree_at( &self, index: usize, ) -> Option<TreeRow<<VecListModel<T, K> as ListModel>::Key>>
What the row stands as in a tree (
VirtualList::with_tree): the row it is under, and
what the list shows of its subtasks. None for a row outside a tree, or a model that
holds none.fn is_empty(&self) -> bool
§fn row_state(&self, _index: usize) -> Arrival<(), &str>
fn row_state(&self, _index: usize) -> Arrival<(), &str>
Where a logical row’s data stands:
Arrival::Pending (saying where
it comes from), ready, or failed with the reason. A paged model keeps
stable keys and geometry while its rows arrive; the list reserves a
pending row’s slot and paints its placeholder there
(crate::widget::ArrivingRows), and builds the row’s delegate only
once it is ready.§fn can_retry(&self, _index: usize) -> bool
fn can_retry(&self, _index: usize) -> bool
Whether row
index, failed, can be asked for again: its failure
then offers a retry, which calls Self::retry.§fn request_range(&mut self, _range: Range<usize>)
fn request_range(&mut self, _range: Range<usize>)
Opportunity to enqueue work for the visible window plus overscan.
§fn poll_changed(&mut self) -> bool
fn poll_changed(&mut self) -> bool
Drain a model-owned invalidation wakeup. Return true after logical
order, count, key, or row-state changes. Use
VirtualList::invalidate_rows as well when ready delegate content
changed without changing state.§fn poll_changes(&mut self) -> Vec<ListModelChange<Self::Key>>
fn poll_changes(&mut self) -> Vec<ListModelChange<Self::Key>>
Drain specific model changes. Prefer this to
Self::poll_changed
when an asynchronous source can identify its batch: stable delegates
then survive structural changes and only named content rows rebuild.§fn needs_poll(&self) -> bool
fn needs_poll(&self) -> bool
Keep scheduling frames while
Self::poll_changed or
Self::poll_changes may observe an in-flight asynchronous source.§fn label(&self, _index: usize) -> Option<String>
fn label(&self, _index: usize) -> Option<String>
The name a person reads row
index by, which typing its first
letters in the focused list moves to (crate::type_ahead). None
for a row without one, or a model that names no rows.§fn key_presenting(&self, _id: &str) -> Option<Self::Key>
fn key_presenting(&self, _id: &str) -> Option<Self::Key>
The key of the row showing the resource
id, when the model can say: a host that
renders rows as they show offers this (crate::component::RowSource).§fn group_at(&self, _index: usize) -> Option<RowGroup>
fn group_at(&self, _index: usize) -> Option<RowGroup>
What the row
index is grouped by, when the model groups its rows: the list draws the
heading over the first row of each group (RowGroup), a disclosure the keyboard
reaches like a row and assistive technology reads as one. None for a row in no group,
or a model that groups nothing.§fn renames(&self, _index: usize) -> bool
fn renames(&self, _index: usize) -> bool
Whether the row
index can be renamed in place (VirtualList::on_rename): F2, a
double click and VirtualList::begin_rename open a field only over a row that does.§fn discloses(&self) -> bool
fn discloses(&self) -> bool
Whether the list heads or nests its rows, keeping a disclosure gutter left of its column.
§fn opens_in_place(&self, _index: usize) -> bool
fn opens_in_place(&self, _index: usize) -> bool
Whether the row
index opens into its item where it stands: the row carries the
item’s document under it, and choosing the row opens it there rather than anywhere
else. false for a row that opens elsewhere, or a model whose rows open nothing.Auto Trait Implementations§
impl<T, K> Freeze for VecListModel<T, K>
impl<T, K> RefUnwindSafe for VecListModel<T, K>where
T: RefUnwindSafe,
K: RefUnwindSafe,
impl<T, K> Send for VecListModel<T, K>
impl<T, K> Sync for VecListModel<T, K>
impl<T, K> Unpin for VecListModel<T, K>
impl<T, K> UnsafeUnpin for VecListModel<T, K>
impl<T, K> UnwindSafe for VecListModel<T, K>where
K: UnwindSafe,
T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
§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>
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>
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)
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)
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 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>
Converts
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>
Converts
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)
Converts
&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)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§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>
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 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>
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