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

Configuring is O(n) in the number of pages n. Resizing may be O(n) or may be limited: see Self::set_size_limit. Drawing is O(1), and so is event handling in the expected case.

Implementations§

source§

impl<W: Widget> Stack<W>

source

pub fn new() -> Self

Construct a new, empty instance

source

pub fn new_vec(widgets: Vec<W>) -> Self

Construct a new instance

Initially, the first page (if any) will be shown. Use Self::with_active to change this.

source

pub fn edit<F: FnOnce(&mut Vec<W>)>(&mut self, f: F) -> Action

Edit the list of children directly

This may be used to edit pages before window construction. It may also be used from a running UI, but in this case a full reconfigure of the window’s widgets is required (triggered by the the return value, Action::RECONFIGURE).

source

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

Limit the number of pages considered by Layout::size_rules

By default, this is usize::MAX: all pages affect the result. If this is set to 1 then only the active page will affect the result. If this is n > 1, then min(n, num_pages) pages (including active) will be used. (If this is set to 0 it is silently replaced with 1.)

Using a limit lower than the number of pages has two effects: (1) resizing is faster and (2) calling Self::set_active may cause a full-window resize.

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, mgr: &mut ConfigMgr<'_>, index: usize)

Set the active page

Behaviour depends on whether SizeRules were already solved for index (see Self::set_size_limit and note that methods like Self::push do not solve rules for new pages). Case:

  • index >= num_pages: no page displayed
  • index == active and SizeRules were solved: nothing happens
  • SizeRules were solved: set layout (Layout::set_rect) and update mouse-cursor target (Action::REGION_MOVED)
  • Otherwise: resize the whole window (Action::RESIZE)
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 active 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, mgr: &mut ConfigMgr<'_>, widget: W) -> usize

Append a page

The new page is configured immediately. If it becomes the active page and then Action::RESIZE will be triggered.

Returns the new page’s index.

source

pub fn pop(&mut self, mgr: &mut ConfigMgr<'_>) -> Option<W>

Remove the last child widget (if any) and return

If this page was active then the previous page becomes active.

source

pub fn insert(&mut self, mgr: &mut ConfigMgr<'_>, index: usize, widget: W)

Inserts a child widget position index

Panics if index > len.

The new child is configured immediately. The active page does not change.

source

pub fn remove(&mut self, mgr: &mut ConfigMgr<'_>, index: usize) -> W

Removes the child widget at position index

Panics if index is out of bounds.

If the active page is removed then the previous page (if any) becomes active.

source

pub fn replace(&mut self, mgr: &mut ConfigMgr<'_>, index: usize, w: W) -> W

Replace the child at index

Panics if index is out of bounds.

The new child is configured immediately. If it replaces the active page, then Action::RESIZE is triggered.

source

pub fn extend<T: IntoIterator<Item = W>>( &mut self, mgr: &mut ConfigMgr<'_>, iter: T )

Append child widgets from an iterator

New children are configured immediately. If a new page becomes active, then Action::RESIZE is triggered.

source

pub fn resize_with<F: Fn(usize) -> W>( &mut self, mgr: &mut ConfigMgr<'_>, len: usize, f: F )

Resize, using the given closure to construct new widgets

New children are configured immediately. If a new page becomes active, then Action::RESIZE is triggered.

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> FromIterator<W> for Stack<W>

source§

fn from_iter<T>(iter: T) -> Selfwhere T: IntoIterator<Item = W>,

Creates a value from an iterator. Read more
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 size_rules(&mut self, size_mgr: SizeMgr<'_>, axis: AxisInfo) -> SizeRules

Get size rules for the given axis Read more
source§

fn set_rect(&mut self, mgr: &mut ConfigMgr<'_>, rect: Rect)

Set size and position Read more
source§

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

Translate a coordinate to a WidgetId Read more
source§

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

Draw a widget and its children Read more
source§

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

source§

fn pre_configure(&mut self, _: &mut ConfigMgr<'_>, id: WidgetId)

Pre-configuration Read more
source§

fn nav_next( &mut self, _: &mut ConfigMgr<'_>, _: bool, from: Option<usize> ) -> Option<usize>

Navigation in spatial order Read more
source§

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

Configure widget Read more
source§

fn navigable(&self) -> bool

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

fn translation(&self) -> Offset

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

fn handle_event(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response

Handle an Event sent to this widget Read more
source§

fn steal_event( &mut self, mgr: &mut EventMgr<'_>, id: &WidgetId, event: &Event ) -> Response

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

fn handle_unused(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response

Handle an event sent to child index but left unhandled Read more
source§

fn handle_message(&mut self, mgr: &mut EventMgr<'_>)

Handler for messages from children/descendants Read more
source§

fn handle_scroll(&mut self, mgr: &mut EventMgr<'_>, scroll: Scroll)

Handler for scrolling Read more
source§

impl<W: Widget> WidgetChildren 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 Widget>

Get a reference to a child widget by index, or None if the index is out of bounds. Read more
source§

fn get_child_mut(&mut self, index: usize) -> Option<&mut dyn Widget>

Mutable variant of get Read more
source§

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

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

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

Make an identifier for a child Read more
source§

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

source§

fn id_ref(&self) -> &WidgetId

Get the widget’s identifier Read more
source§

fn rect(&self) -> Rect

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

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

Get the name of the widget struct
source§

fn as_widget(&self) -> &dyn Widget

Erase type
source§

fn as_widget_mut(&mut self) -> &mut dyn Widget

Erase type

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<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<S, T> Cast<T> for Swhere 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 Swhere 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 Swhere 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

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · 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> ToOwned for Twhere 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 Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<W> WidgetExt for Wwhere W: Widget + ?Sized,

source§

fn id(&self) -> WidgetId

Get the widget’s identifier Read more
source§

fn eq_id<T>(&self, rhs: T) -> boolwhere WidgetId: PartialEq<T>,

Test widget identifier for equality Read more
source§

fn identify(&self) -> IdentifyWidget

Display as “StructName#WidgetId”
source§

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

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

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

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

fn find_widget(&self, id: &WidgetId) -> Option<&dyn Widget>

Find the descendant with this id, if any
source§

fn find_widget_mut(&mut self, id: &WidgetId) -> Option<&mut dyn Widget>

Find the descendant with this id, if any