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
sourceimpl<W: Widget> Stack<W>
impl<W: Widget> Stack<W>
sourcepub fn new_vec(widgets: Vec<W>) -> Self
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.
sourcepub fn edit<F: FnOnce(&mut Vec<W>)>(&mut self, f: F) -> TkAction
pub fn edit<F: FnOnce(&mut Vec<W>)>(&mut self, f: F) -> TkAction
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, TkAction::RECONFIGURE).
sourcepub fn set_size_limit(&mut self, limit: usize)
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.
sourcepub fn with_active(self, active: usize) -> Self
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.
sourcepub fn set_active(&mut self, mgr: &mut ConfigMgr<'_>, index: usize)
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 displayedindex == activeandSizeRuleswere solved: nothing happensSizeRuleswere solved: set layout (Layout::set_rect) and update mouse-cursor target (TkAction::REGION_MOVED)- Otherwise: resize the whole window (
TkAction::RESIZE)
sourcepub fn get_active(&self) -> Option<&W>
pub fn get_active(&self) -> Option<&W>
Get a direct reference to the active child widget, if any
sourcepub fn get_mut(&mut self, index: usize) -> Option<&mut W>
pub fn get_mut(&mut self, index: usize) -> Option<&mut W>
Returns a mutable reference to the page, if any
sourcepub fn push(&mut self, mgr: &mut ConfigMgr<'_>, widget: W) -> usize
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 TkAction::RESIZE will be triggered.
Returns the new page’s index.
sourcepub fn pop(&mut self, mgr: &mut ConfigMgr<'_>) -> Option<W>
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.
sourcepub fn insert(&mut self, mgr: &mut ConfigMgr<'_>, index: usize, widget: W)
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.
sourcepub fn remove(&mut self, mgr: &mut ConfigMgr<'_>, index: usize) -> W
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.
sourcepub fn replace(&mut self, mgr: &mut ConfigMgr<'_>, index: usize, w: W) -> W
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 TkAction::RESIZE is triggered.
sourcepub fn extend<T: IntoIterator<Item = W>>(
&mut self,
mgr: &mut ConfigMgr<'_>,
iter: T
)
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 TkAction::RESIZE is triggered.
sourcepub fn resize_with<F: Fn(usize) -> W>(
&mut self,
mgr: &mut ConfigMgr<'_>,
len: usize,
f: F
)
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 TkAction::RESIZE is triggered.
Trait Implementations
sourceimpl<W: Widget> FromIterator<W> for Stack<W>
impl<W: Widget> FromIterator<W> for Stack<W>
sourcefn from_iter<T>(iter: T) -> Selfwhere
T: IntoIterator<Item = W>,
fn from_iter<T>(iter: T) -> Selfwhere
T: IntoIterator<Item = W>,
Creates a value from an iterator. Read more
sourceimpl<W: Widget> Layout for Stack<W>
impl<W: Widget> Layout for Stack<W>
sourceimpl<W: Widget> Widget for Stack<W>
impl<W: Widget> Widget for Stack<W>
sourcefn pre_configure(&mut self, _: &mut ConfigMgr<'_>, id: WidgetId)
fn pre_configure(&mut self, _: &mut ConfigMgr<'_>, id: WidgetId)
Pre-configuration Read more
Navigation in spatial order Read more
Is this widget navigable via Tab key? Read more
sourcefn translation(&self) -> Offset
fn translation(&self) -> Offset
Get translation of children relative to this widget Read more
sourcefn handle_event(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response
fn handle_event(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response
Handle an event sent to this widget Read more
sourcefn steal_event(
&mut self,
mgr: &mut EventMgr<'_>,
id: &WidgetId,
event: &Event
) -> Response
fn steal_event(
&mut self,
mgr: &mut EventMgr<'_>,
id: &WidgetId,
event: &Event
) -> Response
Potentially steal an event before it reaches a child Read more
sourcefn handle_unused(
&mut self,
mgr: &mut EventMgr<'_>,
index: usize,
event: Event
) -> Response
fn handle_unused(
&mut self,
mgr: &mut EventMgr<'_>,
index: usize,
event: Event
) -> Response
Handle an event sent to child index but left unhandled Read more
sourcefn handle_message(&mut self, mgr: &mut EventMgr<'_>, index: usize)
fn handle_message(&mut self, mgr: &mut EventMgr<'_>, index: usize)
Handler for messages from children/descendants Read more
sourcefn handle_scroll(&mut self, mgr: &mut EventMgr<'_>, scroll: Scroll)
fn handle_scroll(&mut self, mgr: &mut EventMgr<'_>, scroll: Scroll)
Handler for scrolling Read more
sourceimpl<W: Widget> WidgetChildren for Stack<W>
impl<W: Widget> WidgetChildren for Stack<W>
sourcefn num_children(&self) -> usize
fn num_children(&self) -> usize
Get the number of child widgets Read more
sourcefn get_child(&self, index: usize) -> Option<&dyn Widget>
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
sourcefn get_child_mut(&mut self, index: usize) -> Option<&mut dyn Widget>
fn get_child_mut(&mut self, index: usize) -> Option<&mut dyn Widget>
Mutable variant of get Read more
sourcefn find_child_index(&self, id: &WidgetId) -> Option<usize>
fn find_child_index(&self, id: &WidgetId) -> Option<usize>
Find the child which is an ancestor of this id, if any Read more
sourcefn make_child_id(&mut self, index: usize) -> WidgetId
fn make_child_id(&mut self, index: usize) -> WidgetId
Make an identifier for a child Read more
sourceimpl<W: Widget> WidgetCore for Stack<W>
impl<W: Widget> WidgetCore for Stack<W>
sourcefn widget_name(&self) -> &'static str
fn widget_name(&self) -> &'static str
Get the name of the widget struct
sourcefn as_widget_mut(&mut self) -> &mut dyn Widget
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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
impl<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
fn try_cast_approx(self) -> Result<T, Error>
fn try_cast_approx(self) -> Result<T, Error>
Try approximate conversion from Self to T Read more
fn cast_approx(self) -> T
fn cast_approx(self) -> T
Cast approximately from Self to T Read more
impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
fn cast_trunc(self) -> T
fn cast_trunc(self) -> T
Cast to integer, truncating Read more
fn cast_nearest(self) -> T
fn cast_nearest(self) -> T
Cast to the nearest integer Read more
fn cast_floor(self) -> T
fn cast_floor(self) -> T
Cast the floor to an integer Read more
fn try_cast_trunc(self) -> Result<T, Error>
fn try_cast_trunc(self) -> Result<T, Error>
Try converting to integer with truncation Read more
fn try_cast_nearest(self) -> Result<T, Error>
fn try_cast_nearest(self) -> Result<T, Error>
Try converting to the nearest integer Read more
fn try_cast_floor(self) -> Result<T, Error>
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>
fn try_cast_ceil(self) -> Result<T, Error>
Try convert the ceiling to an integer Read more
sourceimpl<W> WidgetExt for Wwhere
W: Widget + ?Sized,
impl<W> WidgetExt for Wwhere
W: Widget + ?Sized,
sourcefn eq_id<T>(&self, rhs: T) -> boolwhere
WidgetId: PartialEq<T>,
fn eq_id<T>(&self, rhs: T) -> boolwhere
WidgetId: PartialEq<T>,
Test widget identifier for equality Read more
sourcefn identify(&self) -> IdentifyWidget
fn identify(&self) -> IdentifyWidget
Display as “StructName#WidgetId”
sourcefn is_ancestor_of(&self, id: &WidgetId) -> bool
fn is_ancestor_of(&self, id: &WidgetId) -> bool
Check whether id is self or a descendant Read more
sourcefn is_strict_ancestor_of(&self, id: &WidgetId) -> bool
fn is_strict_ancestor_of(&self, id: &WidgetId) -> bool
Check whether id is not self and is a descendant Read more
sourcefn find_widget(&self, id: &WidgetId) -> Option<&dyn Widget>
fn find_widget(&self, id: &WidgetId) -> Option<&dyn Widget>
Find the descendant with this id, if any
sourcefn find_widget_mut(&mut self, id: &WidgetId) -> Option<&mut dyn Widget>
fn find_widget_mut(&mut self, id: &WidgetId) -> Option<&mut dyn Widget>
Find the descendant with this id, if any