pub struct ListViewHandle { /* private fields */ }Expand description
A handle on a mounted ListView, to scroll it to an item from outside
the widget — a view-model reacting to a search hit, a “jump to” command.
Cheap to clone, valid before the view is mounted, and it survives the view’s rebuilds. Its methods never compute an offset when they are called: they record the request and ask for a layout pass, and the view applies it there, after row measurement and scroll anchoring have settled. So a model change made in the same turn (rows inserted above, say) is accounted for, a request made before mount is applied at the first layout, and a later request replaces an earlier pending one. A request on an empty list is dropped; an index past the end reveals the last item.
The handle also reads and moves the list’s keyboard cursor, the row
the arrow keys step from and assistive technology is told is current:
cursor, set_cursor and
cursor_signal. In a multiple selection the cursor
and the selection are separate: the accelerator with an arrow moves the
cursor alone, and a selection written from outside leaves the cursor where
it was.
let list = ListView::new(model, |_i, item, _selected| {
Box::new(TextWidget::new(lit!(item)))
});
let handle = list.handle();
// … `ctx.add(list)`, then later, from any handler:
handle.scroll_to_index(120);Implementations§
Source§impl ListViewHandle
impl ListViewHandle
Sourcepub fn scroll_to_index(&self, index: usize)
pub fn scroll_to_index(&self, index: usize)
Scroll so the given model index is aligned to the top of the
viewport, as far as the scroll range allows, at the next layout pass.
Sections are honoured as in ListView::scroll_to_index.
Sourcepub fn ensure_index_visible(&self, index: usize)
pub fn ensure_index_visible(&self, index: usize)
Scroll the minimum distance that brings the given model index fully
into view, at the next layout pass; no scroll when it already is.
Sections are honoured as in ListView::ensure_index_visible.
Sourcepub fn cursor(&self) -> Option<usize>
pub fn cursor(&self) -> Option<usize>
The model index the keyboard cursor is on, or None while the list
has no cursor: it has not been navigated, clicked or given one by
set_cursor. With no cursor the keys start from
the first selected row, and from the first or last row when nothing is
selected.
In a single selection the cursor follows the selection: the keys move
them together, and a selection written from outside takes the cursor
off any other row (it reads None then, and the keys start from the
selection). In a multiple selection they are separate: the accelerator
with an arrow (Ctrl+Arrow) moves the cursor alone, and a selection
written from outside leaves the cursor where it was.
Sourcepub fn set_cursor(&self, index: Option<usize>)
pub fn set_cursor(&self, index: Option<usize>)
Move the keyboard cursor to model index index, or remove it with
None.
An index past the last row is clamped to the last row; on an empty list the cursor is removed. While the list holds keyboard focus it names the row as its active descendant at the next accessibility update, when the row is realized; the next arrow key steps from it.
Keyboard focus and the selection are left alone, and the list does
not scroll: pair it with
ensure_index_visible to bring the row
into view. Usable before the list is mounted (the first build finds
the cursor there) and across its rebuilds. In a single selection the
next change of selection takes the cursor back to the selected row.
Sourcepub fn cursor_signal(&self) -> Signal<Option<usize>>
pub fn cursor_signal(&self) -> Signal<Option<usize>>
A read-only signal of the cursor, as cursor reports
it, for an application to observe or bind: a status line naming the
current row, actions enabled for it. It changes with every write of
the cursor, by the keys, a click, the data shifting it or
set_cursor.
Trait Implementations§
Source§impl Clone for ListViewHandle
impl Clone for ListViewHandle
Source§fn clone(&self) -> ListViewHandle
fn clone(&self) -> ListViewHandle
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for ListViewHandle
impl !Send for ListViewHandle
impl !Sync for ListViewHandle
impl !UnwindSafe for ListViewHandle
impl Freeze for ListViewHandle
impl Unpin for ListViewHandle
impl UnsafeUnpin for ListViewHandle
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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> ErasedDestructor for Twhere
T: 'static,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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