Struct kas_widgets::TabStack
source · pub struct TabStack<W: Widget> { /* private fields */ }
Expand description
A tabbed 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” via tab
handles or calling Self::set_active
.
Type parameter D
controls the position of tabs relative to the stack;
default value is Direction::Up
: tabs are positioned above the stack.
Within the bar, items are always left-to-right
(TODO: support for vertical bars).
This may only be parametrised with a single widget type, thus usually
it will be necessary to box children (this is what BoxTabStack
is).
See also the main implementing widget: Stack
.
Implementations§
source§impl<W: Widget> TabStack<W>
impl<W: Widget> TabStack<W>
sourcepub fn set_direction(&mut self, direction: Direction) -> Action
pub fn set_direction(&mut self, direction: Direction) -> Action
Set the position of tabs relative to content
Default value: Direction::Up
source§impl<W: Widget> TabStack<W>
impl<W: Widget> TabStack<W>
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 page (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 == active
andSizeRules
were solved: nothing happensSizeRules
were solved: set layout (Layout::set_rect
) and update mouse-cursor target (Action::REGION_MOVED
)- Otherwise: resize the whole window (
Action::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_tab_mut(&mut self, index: usize) -> Option<&mut Tab>
pub fn get_tab_mut(&mut self, index: usize) -> Option<&mut Tab>
Get a tab
sourcepub fn with_tab(self, tab: Tab, widget: W) -> Self
pub fn with_tab(self, tab: Tab, widget: W) -> Self
Append a page (inline)
Does not configure or size child.
sourcepub fn with_title(self, title: impl Into<AccelString>, widget: W) -> Self
pub fn with_title(self, title: impl Into<AccelString>, widget: W) -> Self
Append a page (inline)
Does not configure or size child.
sourcepub fn push(&mut self, mgr: &mut ConfigMgr<'_>, tab: Tab, widget: W) -> usize
pub fn push(&mut self, mgr: &mut ConfigMgr<'_>, tab: Tab, 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.
sourcepub fn pop(&mut self, mgr: &mut ConfigMgr<'_>) -> Option<(Tab, W)>
pub fn pop(&mut self, mgr: &mut ConfigMgr<'_>) -> Option<(Tab, 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, tab: Tab, widget: W)
pub fn insert(&mut self, mgr: &mut ConfigMgr<'_>, index: usize, tab: Tab, 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) -> (Tab, W)
pub fn remove(&mut self, mgr: &mut ConfigMgr<'_>, index: usize) -> (Tab, 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 Action::RESIZE
is triggered.
sourcepub fn extend<T: IntoIterator<Item = (Tab, W)>>(
&mut self,
mgr: &mut ConfigMgr<'_>,
iter: T
)
pub fn extend<T: IntoIterator<Item = (Tab, 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.
Trait Implementations§
source§impl<W: Widget> AutoLayout for TabStack<W>
impl<W: Widget> AutoLayout for TabStack<W>
source§impl<W: Widget> Layout for TabStack<W>
impl<W: Widget> Layout for TabStack<W>
source§impl<W: Widget> Widget for TabStack<W>
impl<W: Widget> Widget for TabStack<W>
source§fn handle_message(&mut self, mgr: &mut EventMgr<'_>)
fn handle_message(&mut self, mgr: &mut EventMgr<'_>)
source§fn translation(&self) -> Offset
fn translation(&self) -> Offset
source§fn 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
source§impl<W: Widget> WidgetChildren for TabStack<W>
impl<W: Widget> WidgetChildren for TabStack<W>
source§fn num_children(&self) -> usize
fn num_children(&self) -> usize
source§fn get_child(&self, _index: usize) -> Option<&dyn Widget>
fn get_child(&self, _index: usize) -> Option<&dyn Widget>
None
if the index is
out of bounds. Read moresource§fn get_child_mut(&mut self, _index: usize) -> Option<&mut dyn Widget>
fn get_child_mut(&mut self, _index: usize) -> Option<&mut dyn Widget>
source§impl<W: Widget> WidgetCore for TabStack<W>
impl<W: Widget> WidgetCore for TabStack<W>
source§fn widget_name(&self) -> &'static str
fn widget_name(&self) -> &'static str
source§fn as_widget_mut(&mut self) -> &mut dyn Widget
fn as_widget_mut(&mut self) -> &mut dyn Widget
Auto Trait Implementations§
impl<W> !RefUnwindSafe for TabStack<W>
impl<W> !Send for TabStack<W>
impl<W> !Sync for TabStack<W>
impl<W> Unpin for TabStack<W>where W: Unpin,
impl<W> !UnwindSafe for TabStack<W>
Blanket Implementations§
§impl<S, T> Cast<T> for Swhere
T: Conv<S>,
impl<S, T> Cast<T> for Swhere T: Conv<S>,
§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>
§fn cast_approx(self) -> T
fn cast_approx(self) -> T
§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
§fn cast_nearest(self) -> T
fn cast_nearest(self) -> T
§fn cast_floor(self) -> T
fn cast_floor(self) -> T
§fn try_cast_trunc(self) -> Result<T, Error>
fn try_cast_trunc(self) -> Result<T, Error>
§fn try_cast_nearest(self) -> Result<T, Error>
fn try_cast_nearest(self) -> Result<T, Error>
§fn try_cast_floor(self) -> Result<T, Error>
fn try_cast_floor(self) -> Result<T, Error>
§fn try_cast_ceil(self) -> Result<T, Error>
fn try_cast_ceil(self) -> Result<T, Error>
source§impl<W> WidgetExt for Wwhere
W: Widget + ?Sized,
impl<W> WidgetExt for Wwhere W: Widget + ?Sized,
source§fn eq_id<T>(&self, rhs: T) -> boolwhere
WidgetId: PartialEq<T>,
fn eq_id<T>(&self, rhs: T) -> boolwhere WidgetId: PartialEq<T>,
source§fn identify(&self) -> IdentifyWidget
fn identify(&self) -> IdentifyWidget
source§fn is_ancestor_of(&self, id: &WidgetId) -> bool
fn is_ancestor_of(&self, id: &WidgetId) -> bool
id
is self or a descendant Read moresource§fn is_strict_ancestor_of(&self, id: &WidgetId) -> bool
fn is_strict_ancestor_of(&self, id: &WidgetId) -> bool
id
is not self and is a descendant Read more