DialogStack

Struct DialogStack 

Source
pub struct DialogStack<Event, Context, Error> { /* private fields */ }
Expand description

Hold a stack of dialog-widgets.

Renders them and integrates them into event-handling.

Hold the dialog-stack in your global state, call render() at the very end of rendering and handle() near the start of event-handling.

The event-handler will consume all crossterm events and block any widget interaction later in event-handling. It will pass through any application level events.

Implementations§

Source§

impl<Event, Context, Error> DialogStack<Event, Context, Error>

Source

pub fn new() -> Self

Source

pub fn push( &self, render: impl Fn(Rect, &mut Buffer, &mut dyn Any, &mut Context) + 'static, event: impl Fn(&Event, &mut dyn Any, &mut Context) -> Result<WindowControl<Event>, Error> + 'static, state: impl Any, )

Push a dialog-window on the stack.

  • render is called in reverse stack order, to render bottom to top.
  • event is called in stack-order to handle events. if you don’t want events to propagate to dialog-windows in the background, you must consume them by returning StackControl::Unchanged.
  • state as Any
Source

pub fn pop(&self) -> Option<Box<dyn Any>>

Pop the top dialog-window from the stack.

It will return None if the stack is empty.

Panic

This function is partially reentrant. When called during rendering/event-handling it will panic when trying to pop your current dialog-window. Return WindowControl::Close instead of calling this function.

Source

pub fn remove(&self, n: usize) -> Box<dyn Any>

Remove some dialog-window.

Panic

This function is not reentrant. It will panic when called during rendering or event-handling of any dialog-window. Return WindowControl::Close instead of calling this function.

Panics when out-of-bounds.

Source

pub fn is_empty(&self) -> bool

No windows.

Source

pub fn len(&self) -> usize

Number of dialog-windows.

Source

pub fn state_is<S: 'static>(&self, n: usize) -> bool

Typecheck the state.

Source

pub fn top<S: 'static>(&self) -> Option<usize>

Find top state with this type.

Source

pub fn find<S: 'static>(&self) -> Vec<usize>

Find all states with this type.

Source

pub fn get_mut<'a, S: 'static>(&'a self, n: usize) -> Option<RefMut<'a, S>>

Get a mutable reference to the state at index n.

Panic

Panics when out-of-bounds.

Fails

Fails when recursively accessing the same state. Accessing a different window-state is fine. Fails when the types don’t match.

Source

pub fn get<'a, S: 'static>(&'a self, n: usize) -> Option<Ref<'a, S>>

Get a reference to the state at index n.

Panic

Panics when out-of-bounds.

Fails

Fails when recursively accessing the same state. Accessing a different window-state is fine. Fails when the types don’t match.

Trait Implementations§

Source§

impl<Event, Context, Error> Clone for DialogStack<Event, Context, Error>

Source§

fn clone(&self) -> Self

Returns a duplicate 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<Event, Context, Error> Debug for DialogStack<Event, Context, Error>

Source§

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

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

impl<Event, Context, Error> Default for DialogStack<Event, Context, Error>

Source§

fn default() -> Self

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

impl<Event, Context, Error> HandleEvent<Event, &mut Context, Result<WindowControl<Event>, Error>> for DialogStack<Event, Context, Error>
where Event: TryAsRef<Event> + 'static, Error: 'static,

Handle events from top to bottom of the stack.

crossterm events will only be passed on to the first dialog window. Other application events will go through all the windows on the stack until they are consumed.

Panic

This function is not reentrant, it will panic when called from within it’s call-stack.

Source§

fn handle( &mut self, event: &Event, ctx: &mut Context, ) -> Result<WindowControl<Event>, Error>

Handle an event. Read more
Source§

impl<Event, Context, Error> StatefulWidget for DialogStack<Event, Context, Error>

Source§

type State = Context

State associated with the stateful widget. Read more
Source§

fn render(self, area: Rect, buf: &mut Buffer, ctx: &mut Self::State)

Draws the current state of the widget in the given buffer. That is the only method required to implement a custom stateful widget.

Auto Trait Implementations§

§

impl<Event, Context, Error> Freeze for DialogStack<Event, Context, Error>

§

impl<Event, Context, Error> !RefUnwindSafe for DialogStack<Event, Context, Error>

§

impl<Event, Context, Error> !Send for DialogStack<Event, Context, Error>

§

impl<Event, Context, Error> !Sync for DialogStack<Event, Context, Error>

§

impl<Event, Context, Error> Unpin for DialogStack<Event, Context, Error>

§

impl<Event, Context, Error> !UnwindSafe for DialogStack<Event, Context, Error>

Blanket Implementations§

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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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>,

Source§

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>,

Source§

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.