Struct kas_widgets::Stack

source ·
pub struct Stack<W: Widget> { /* private fields */ }
Expand description

A stack of widgets

A stack consists a set of child widgets, “pages”, all of equal size. Only a single page is visible at a time. The page is “turned” by calling Self::set_active.

This may only be parametrised with a single widget type, thus usually it will be necessary to box children (this is what BoxStack is).

By default, all pages are configured and sized. To avoid configuring hidden pages (thus preventing these pages from affecting size) call Self::set_size_limit or Self::with_size_limit.

Implementations§

source§

impl<W: Widget> Stack<W>

source

pub fn new() -> Self

Construct a new, empty instance

See also Stack::from.

source

pub fn set_size_limit(&mut self, limit: usize)

Limit the number of pages considered and sized

By default, this is usize::MAX: all pages are configured and affect the stack’s size requirements.

Set this to 0 to avoid configuring all hidden pages. Set this to n to configure the active page and the first n pages.

source

pub fn with_size_limit(self, limit: usize) -> Self

Limit the number of pages configured and sized (inline)

By default, this is usize::MAX: all pages are configured and affect the stack’s size requirements.

Set this to 0 to avoid configuring all hidden pages. Set this to n to configure the active page and the first n pages.

source

pub fn active(&self) -> usize

Get the index of the active widget

source

pub fn with_active(self, active: usize) -> Self

Set the active widget (inline)

Unlike Self::set_active, this does not update anything; it is assumed that sizing happens afterwards.

source

pub fn set_active( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, index: usize )

Set the active page

source

pub fn get_active(&self) -> Option<&W>

Get a direct reference to the active child widget, if any

source

pub fn is_empty(&self) -> bool

True if there are no pages

source

pub fn len(&self) -> usize

Returns the number of pages

source

pub fn clear(&mut self)

Remove all pages

This does not change the activen page index.

source

pub fn get(&self, index: usize) -> Option<&W>

Returns a reference to the page, if any

source

pub fn get_mut(&mut self, index: usize) -> Option<&mut W>

Returns a mutable reference to the page, if any

source

pub fn push( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, widget: W ) -> usize

Append a page

The new page is not made active (the active index may be changed to avoid this). Consider calling Self::set_active.

Returns the new page’s index.

source

pub fn pop(&mut self, cx: &mut EventState) -> Option<W>

Remove the last child widget (if any) and return

If this page was active then no page will be left active. Consider also calling Self::set_active.

source

pub fn insert( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, index: usize, widget: W )

Inserts a child widget position index

Panics if index > len.

The active page does not change (the index of the active page may change instead).

source

pub fn remove(&mut self, cx: &mut EventState, index: usize) -> W

Removes the child widget at position index

Panics if index is out of bounds.

If this page was active then no page will be left active. Consider also calling Self::set_active.

source

pub fn replace( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, index: usize, widget: W ) -> W

Replace the child at index

Panics if index is out of bounds.

If the new child replaces the active page then Action::RESIZE is triggered.

source

pub fn extend<T: IntoIterator<Item = W>>( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, iter: T )

Append child widgets from an iterator

The new pages are not made active (the active index may be changed to avoid this). Consider calling Self::set_active.

source

pub fn resize_with<F: Fn(usize) -> W>( &mut self, cx: &mut ConfigCx<'_>, data: &W::Data, len: usize, f: F )

Resize, using the given closure to construct new widgets

The new pages are not made active (the active index may be changed to avoid this). Consider calling Self::set_active.

Trait Implementations§

source§

impl<W: Clone + Widget> Clone for Stack<W>

source§

fn clone(&self) -> Stack<W>

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<W: Debug + Widget> Debug for Stack<W>

source§

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

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

impl<W: Widget> Default for Stack<W>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<W: Widget> Events for Stack<W>

source§

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

Make an identifier for a child Read more
source§

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

Configure self Read more
source§

fn configure_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)

Configure children Read more
source§

fn update_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)

Update children Read more
source§

fn steal_event( &mut self, _: &mut EventCx<'_>, _: &Self::Data, _: &Id, _: &Event ) -> IsUsed

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

fn handle_event( &mut self, _: &mut EventCx<'_>, _: &Self::Data, _: Event ) -> IsUsed

Handle an Event Read more
source§

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

Update self using input data 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§

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

Handler for messages from children/descendants Read more
source§

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

Handler for scrolling Read more
source§

impl<W: Widget, I> From<I> for Stack<W>
where I: IntoIterator<Item = W>,

source§

fn from(iter: I) -> Self

Converts to this type from the input type.
source§

impl<W: Widget> Index<usize> for Stack<W>

§

type Output = W

The returned type after indexing.
source§

fn index(&self, index: usize) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
source§

impl<W: Widget> IndexMut<usize> for Stack<W>

source§

fn index_mut(&mut self, index: usize) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
source§

impl<W: Widget> Layout for Stack<W>

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 nav_next(&self, _: bool, from: Option<usize>) -> Option<usize>

Navigation in spatial order 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 translation(&self) -> Offset

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

impl<W: Widget> Widget for Stack<W>

§

type Data = <W as Widget>::Data

Input data type Read more
source§

fn for_child_node( &mut self, data: &W::Data, 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 Self::Data) -> Node<'a>

Erase type Read more

Auto Trait Implementations§

§

impl<W> RefUnwindSafe for Stack<W>
where W: RefUnwindSafe,

§

impl<W> !Send for Stack<W>

§

impl<W> !Sync for Stack<W>

§

impl<W> Unpin for Stack<W>
where W: Unpin,

§

impl<W> UnwindSafe for Stack<W>
where W: 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
§

impl<T> Downcast for T
where T: 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>

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)

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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
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
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