Struct kas::view::MatrixView

source ·
pub struct MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,
{ /* private fields */ }
Available on crate feature view only.
Expand description

View controller for 2D indexable data (matrix)

This widget generates a view over a list of data items via the MatrixData trait. “View widgets” are constructed via a Driver to represent visible data items. These view widgets are reassigned as required when the matrix is scrolled, keeping the number of widgets in use roughly proportional to the number of data items within the view.

Each view widget has an Id corresponding to its current data item, and may handle events and emit messages like other widegts. See Driver documentation for more on event handling.

This widget is Scrollable, supporting keyboard, wheel and drag scrolling. You may wish to wrap this widget with ScrollBars.

Optionally, data items may be selected; see Self::set_selection_mode. If enabled, SelectionMsg messages are reported; view widgets may emit kas::messages::Select to have themselves be selected.

Implementations§

source§

impl<A, V> MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,

source

pub fn new(driver: V) -> MatrixView<A, V>

Construct a new instance

source

pub fn selection_mode(&self) -> SelectionMode

Get the current selection mode

source

pub fn set_selection_mode(&mut self, mode: SelectionMode) -> Action

Set the current selection mode

By default, selection is disabled. If enabled, items may be selected and deselected via mouse-click/touch or via a view widget emitting Select.

On selection and deselection, a SelectionMsg message is emitted. This is not sent to Driver::on_messages.

The driver may trigger selection by emitting Select from Driver::on_messages. The driver is not notified of selection except via Select from view widgets. (TODO: reconsider this.)

source

pub fn with_selection_mode(self, mode: SelectionMode) -> MatrixView<A, V>

Set the selection mode (inline)

See Self::set_selection_mode documentation.

source

pub fn selection_style(&self) -> SelectionStyle

Get the current selection style

source

pub fn set_selection_style(&mut self, style: SelectionStyle) -> Action

Set the current selection style

By default, SelectionStyle::Highlight is used. Other modes may add margin between elements.

source

pub fn with_selection_style(self, style: SelectionStyle) -> MatrixView<A, V>

Set the selection style (inline)

See Self::set_selection_style documentation.

source

pub fn selected_iter(&self) -> impl Iterator<Item = &<A as SharedData>::Key>

Read the list of selected entries

With mode SelectionMode::Single this may contain zero or one entry; use selected_iter().next() to extract only the first (optional) entry.

source

pub fn is_selected(&self, key: &<A as SharedData>::Key) -> bool

Check whether an entry is selected

source

pub fn clear_selected(&mut self) -> Action

Clear all selected items

source

pub fn select(&mut self, key: <A as SharedData>::Key) -> Action

Directly select an item

Does nothing if Self::selection_mode is SelectionMode::None. Does not verify the validity of key. Does not send SelectionMsg messages.

Returns Action::REDRAW if newly selected, Action::empty() if already selected. Fails if selection mode does not permit selection or if the key is invalid.

source

pub fn deselect(&mut self, key: &<A as SharedData>::Key) -> Action

Directly deselect an item

Returns Action::REDRAW if deselected, Action::empty() if not previously selected or if the key is invalid.

source

pub fn with_num_visible(self, cols: i32, rows: i32) -> MatrixView<A, V>

Set the preferred number of items visible (inline)

This affects the (ideal) size request and whether children are sized according to their ideal or minimum size but not the minimum size.

Trait Implementations§

source§

impl<A, V> Clone for MatrixView<A, V>
where A: Clone + MatrixData, V: Clone + Driver<<A as SharedData>::Item, A>, <A as SharedData>::Key: Clone, <V as Driver<<A as SharedData>::Item, A>>::Widget: Clone,

source§

fn clone(&self) -> MatrixView<A, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<A, V> Debug for MatrixView<A, V>
where A: Debug + MatrixData, V: Debug + Driver<<A as SharedData>::Item, A>, <A as SharedData>::Key: Debug, <V as Driver<<A as SharedData>::Item, A>>::Widget: Debug,

source§

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

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

impl<A, V> Events for MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,

source§

fn make_child_id(&mut self, _: usize) -> Id

Make an identifier for a child Read more
source§

fn configure(&mut self, cx: &mut ConfigCx<'_>)

Configure self Read more
source§

fn configure_recurse( &mut self, _: &mut ConfigCx<'_>, _: &<MatrixView<A, V> as Widget>::Data )

Configure children Read more
source§

fn update(&mut self, cx: &mut ConfigCx<'_>, data: &A)

Update self using input data Read more
source§

fn update_recurse( &mut self, _: &mut ConfigCx<'_>, _: &<MatrixView<A, V> as Widget>::Data )

Update children Read more
source§

fn handle_event( &mut self, cx: &mut EventCx<'_>, data: &A, event: Event ) -> IsUsed

Handle an Event Read more
source§

fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &A)

Handler for messages from children/descendants Read more
source§

fn handle_scroll(&mut self, cx: &mut EventCx<'_>, data: &A, scroll: Scroll)

Handler for scrolling Read more
source§

fn steal_event( &mut self, _: &mut EventCx<'_>, _: &<MatrixView<A, V> as Widget>::Data, _: &Id, _: &Event ) -> IsUsed

Potentially steal an event before it reaches a child Read more
source§

fn navigable(&self) -> bool

Is this widget navigable via Tab key? Read more
source§

fn handle_hover(&mut self, cx: &mut EventCx<'_>, state: bool) -> IsUsed

Mouse focus handler Read more
source§

impl<A, V> Layout for MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,

source§

fn num_children(&self) -> usize

Get the number of child widgets Read more
source§

fn get_child(&self, index: usize) -> Option<&dyn Layout>

Access a child as a dyn Layout Read more
source§

fn find_child_index(&self, id: &Id) -> Option<usize>

Find the child which is an ancestor of this id, if any Read more
source§

fn size_rules(&mut self, sizer: SizeCx<'_>, axis: AxisInfo) -> SizeRules

Get size rules for the given axis Read more
source§

fn set_rect(&mut self, cx: &mut ConfigCx<'_>, rect: Rect)

Set size and position Read more
source§

fn translation(&self) -> Offset

Get translation of children relative to this widget Read more
source§

fn find_id(&mut self, coord: Coord) -> Option<Id>

Translate a coordinate to an Id Read more
source§

fn draw(&mut self, draw: DrawCx<'_>)

Draw a widget and its children Read more
source§

fn as_layout(&self) -> &dyn Layout

Get as a dyn Layout Read more
source§

fn id_ref(&self) -> &Id

Get the widget’s identifier Read more
source§

fn rect(&self) -> Rect

Get the widget’s region, relative to its parent. Read more
source§

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

Get the name of the widget struct Read more
source§

fn nav_next(&self, reverse: bool, from: Option<usize>) -> Option<usize>

Navigation in spatial order Read more
source§

impl<A, V> Scrollable for MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,

source§

fn scroll_axes(&self, size: Size) -> (bool, bool)

Given size size, returns whether (horiz, vert) scrolling is required Read more
source§

fn max_scroll_offset(&self) -> Offset

Get the maximum scroll offset Read more
source§

fn scroll_offset(&self) -> Offset

Get the current scroll offset Read more
source§

fn set_scroll_offset(&mut self, cx: &mut EventCx<'_>, offset: Offset) -> Offset

Set the scroll offset Read more
source§

impl<A, V> Widget for MatrixView<A, V>
where A: MatrixData, V: Driver<<A as SharedData>::Item, A>,

§

type Data = A

Input data type Read more
source§

fn for_child_node( &mut self, data: &A, index: usize, closure: Box<dyn FnOnce(Node<'_>) + '_> )

Call closure on child with given index, if index < self.num_children(). Read more
source§

fn as_node<'a>( &'a mut self, data: &'a <MatrixView<A, V> as Widget>::Data ) -> Node<'a>

Erase type Read more

Auto Trait Implementations§

§

impl<A, V> RefUnwindSafe for MatrixView<A, V>

§

impl<A, V> !Send for MatrixView<A, V>

§

impl<A, V> !Sync for MatrixView<A, V>

§

impl<A, V> Unpin for MatrixView<A, V>
where V: Unpin, <A as SharedData>::Key: Unpin, <V as Driver<<A as SharedData>::Item, A>>::Widget: Unpin,

§

impl<A, V> UnwindSafe for MatrixView<A, V>
where V: UnwindSafe, <A as SharedData>::Key: UnwindSafe, <V as Driver<<A as SharedData>::Item, A>>::Widget: UnwindSafe,

Blanket Implementations§

source§

impl<W> AdaptWidget for W
where W: Widget,

source§

fn map<A, F>(self, f: F) -> Map<A, Self, F>
where F: for<'a> Fn(&'a A) -> &'a Self::Data,

Map data type via a function Read more
source§

fn on_configure<F>(self, f: F) -> AdaptEvents<Self>
where F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,

Call the given closure on Events::configure Read more
source§

fn on_update<F>(self, f: F) -> AdaptEvents<Self>
where F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self, &Self::Data) + 'static,

Call the given closure on Events::update Read more
source§

fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
where M: Debug + 'static, H: Fn(&mut AdaptEventCx<'_, '_>, &mut Self, M) + 'static,

Add a handler on message of type M Read more
source§

fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
where H: Fn(&mut AdaptEventCx<'_, '_>, &mut Self, &Self::Data) + 'static,

Add a generic message handler Read more
source§

fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>

Construct a wrapper, setting minimum size in pixels Read more
source§

fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>

Construct a wrapper, setting minimum size in Em Read more
source§

fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>

Construct a wrapper widget adding a label Read more
source§

impl<W> AdaptWidgetAny for W
where W: Widget<Data = ()>,

source§

fn map_any<A>(self) -> MapAny<A, Self>

Map any input data to () Read more
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<S, T> Cast<T> for S
where T: Conv<S>,

§

fn cast(self) -> T

Cast from Self to T Read more
§

fn try_cast(self) -> Result<T, Error>

Try converting from Self to T Read more
§

impl<S, T> CastApprox<T> for S
where T: ConvApprox<S>,

§

fn try_cast_approx(self) -> Result<T, Error>

Try approximate conversion from Self to T Read more
§

fn cast_approx(self) -> T

Cast approximately from Self to T Read more
§

impl<S, T> CastFloat<T> for S
where T: ConvFloat<S>,

§

fn cast_trunc(self) -> T

Cast to integer, truncating Read more
§

fn cast_nearest(self) -> T

Cast to the nearest integer Read more
§

fn cast_floor(self) -> T

Cast the floor to an integer Read more
§

fn cast_ceil(self) -> T

Cast the ceiling to an integer Read more
§

fn try_cast_trunc(self) -> Result<T, Error>

Try converting to integer with truncation Read more
§

fn try_cast_nearest(self) -> Result<T, Error>

Try converting to the nearest integer Read more
§

fn try_cast_floor(self) -> Result<T, Error>

Try converting the floor to an integer Read more
§

fn try_cast_ceil(self) -> Result<T, Error>

Try convert the ceiling to an integer Read more
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<W> LayoutExt for W
where W: Layout + ?Sized,

source§

fn id(&self) -> Id

Get the widget’s identifier Read more
source§

fn eq_id<T>(&self, rhs: T) -> bool
where Id: PartialEq<T>,

Test widget identifier for equality Read more
source§

fn identify(&self) -> IdentifyWidget<'_>

Display as “StructName#Id”
source§

fn is_ancestor_of(&self, id: &Id) -> bool

Check whether id is self or a descendant Read more
source§

fn is_strict_ancestor_of(&self, id: &Id) -> bool

Check whether id is not self and is a descendant Read more
source§

fn for_children(&self, f: impl FnMut(&dyn Layout))

Run a closure on all children
source§

fn for_children_try<E>( &self, f: impl FnMut(&dyn Layout) -> Result<(), E> ) -> Result<(), E>

Run a fallible closure on all children Read more
source§

fn find_widget(&self, id: &Id) -> Option<&dyn Layout>

Find the descendant with this id, if any Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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

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