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>

source

pub fn new() -> Self

Construct a new, empty instance

source

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>

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 page

source

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.

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>

Get a page

source

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

Get a page

source

pub fn get_tab(&self, index: usize) -> Option<&Tab>

Get a tab

source

pub fn get_tab_mut(&mut self, index: usize) -> Option<&mut Tab>

Get a tab

source

pub fn with_tab(self, tab: Tab, widget: W) -> Self

Append a page (inline)

Does not configure or size child.

source

pub fn with_title(self, title: impl Into<AccelString>, widget: W) -> Self

Append a page (inline)

Does not configure or size child.

source

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.

source

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.

source

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.

source

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.

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 = (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>

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: Clone + Widget> Clone for TabStack<W>

source§

fn clone(&self) -> TabStack<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 TabStack<W>

source§

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

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

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

source§

fn default() -> Self

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

impl<W: Widget, T: IntoIterator<Item = (Tab, W)>> From<T> for TabStack<W>

source§

fn from(iter: T) -> Self

Converts to this type from the input type.
source§

impl<W: Widget> Layout for TabStack<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 TabStack<W>

source§

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

Navigation in spatial order Read more
source§

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

Handler for messages from children/descendants Read more
source§

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

Pre-configuration 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_scroll(&mut self, mgr: &mut EventMgr<'_>, scroll: Scroll)

Handler for scrolling Read more
source§

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

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