Struct AsyncProgressView

Source
pub struct AsyncProgressView<T: View> { /* private fields */ }
Expand description

An AsyncProgressView is a wrapper view that displays a progress bar, until the child view is successfully created or an error in the creation progress occured.

To achieve this a poll_ready callback is passed in the creation of AsyncProgressView which returns an AsyncProgressState that can indicate that the process is still Pending (this contains a float between 0 and 1, communicating the progress, this information is displayed in the bar), has been successfully completed Available containing the view to be displayed, or if the creation has thrown an Error containing a message to be shown to the user.

The poll_ready callback should only check for data to be available and create the child view when the data got available. It must never block until the data is available or do heavy calculations! Otherwise cursive cannot proceed displaying and your application will have a blocking loading process!

If you have troubles and need some more in-depth examples have a look at the provided examples in the project.

§Example usage

use cursive::{views::TextView, Cursive, CursiveExt};
use cursive_async_view::{AsyncProgressView, AsyncProgressState};

let mut siv = Cursive::default();
let start = std::time::Instant::now();
let async_view = AsyncProgressView::new(&mut siv, move || {
    if start.elapsed().as_secs() < 3 {
        AsyncProgressState::Pending(start.elapsed().as_secs() as f32 / 3f32)
    } else {
        AsyncProgressState::Available(TextView::new("Finally it loaded!"))
    }
});

siv.add_layer(async_view);
// siv.run();

Implementations§

Source§

impl<T: View> AsyncProgressView<T>

Source

pub fn new<F>(siv: &mut Cursive, creator: F) -> Self
where F: FnMut() -> AsyncProgressState<T> + 'static,

Create a new AsyncProgressView instance. The cursive reference is only used to update the screen when a progress update is received. In order to show the view, it has to be directly or indirectly added to a cursive layer like any other view.

The creator function will be executed on a dedicated thread in the background. Make sure that this function will never block indefinitely. Otherwise, the creation thread will get stuck.

Source

pub fn with_width(self, width: usize) -> Self

Mark the maximum allowed width in characters, the progress bar may consume. By default, the width will be inherited by the parent view.

Source

pub fn with_height(self, height: usize) -> Self

Mark the maximum allowed height in characters, the progress bar may consume. By default, the height will be inherited by the parent view.

Source

pub fn with_progress_fn<F>(self, progress_fn: F) -> Self
where F: Fn(usize, usize, f32, usize, usize) -> AnimationProgressFrame + Send + Sync + 'static,

Set a custom progress function for this view, indicating the progress of the wrapped view creation. See the default_progress function reference for an example on how to create a custom progress function.

Source

pub fn with_error_fn<F>(self, error_fn: F) -> Self
where F: Fn(String, usize, usize, f32, usize, usize) -> AnimationProgressFrame + Send + Sync + 'static,

Source

pub fn set_width(&mut self, width: usize)

Set the maximum allowed width in characters, the progress bar may consume.

Source

pub fn set_height(&mut self, height: usize)

Set the maximum allowed height in characters, the progress bar may consume.

Source

pub fn set_progress_fn<F>(&mut self, progress_fn: F)
where F: Fn(usize, usize, f32, usize, usize) -> AnimationProgressFrame + Send + Sync + 'static,

Set a custom progress function for this view, indicating the progress of the wrapped view creation. See the default_progress function reference for an example on how to create a custom progress function.

The function may be set at any time. The progress bar can be changed even if the previous progress bar has already be drawn.

Source

pub fn set_error_fn<F>(&mut self, error_fn: F)
where F: Fn(String, usize, usize, f32, usize, usize) -> AnimationProgressFrame + Send + Sync + 'static,

Set a custom error function for this view, indicating that an error occured during the wrapped view creation. See the default_progress_error function reference for an example on how to create a custom error function.

The function may be set at any time. The progress bar can be changed even if the previous progress bar has already be drawn.

Source

pub fn inherit_width(&mut self)

Make the progress bar inherit its width from the parent view. This is the default.

Source

pub fn inherit_height(&mut self)

Make the progress bar inherit its height from the parent view. This is the default.

Trait Implementations§

Source§

impl<T: View> Drop for AsyncProgressView<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T: View + Sized> View for AsyncProgressView<T>

Source§

fn draw(&self, printer: &Printer<'_, '_>)

Draws the view with the given printer (includes bounds) and focus. Read more
Source§

fn layout(&mut self, vec: Vec2)

Called once the size for this view has been decided. Read more
Source§

fn needs_relayout(&self) -> bool

Should return true if the view content changed since the last call to layout(). Read more
Source§

fn required_size(&mut self, constraint: Vec2) -> Vec2

Returns the minimum size the view requires with the given restrictions. Read more
Source§

fn on_event(&mut self, ev: Event) -> EventResult

Called when an event is received (key press, mouse event, …). Read more
Source§

fn call_on_any<'a>(&mut self, sel: &Selector<'_>, cb: AnyCb<'a>)

Runs a closure on the view identified by the given selector. Read more
Source§

fn focus_view( &mut self, sel: &Selector<'_>, ) -> Result<EventResult, ViewNotFound>

Moves the focus to the view identified by the given selector. Read more
Source§

fn take_focus(&mut self, source: Direction) -> Result<EventResult, CannotFocus>

Attempt to give this view the focus. Read more
Source§

fn important_area(&self, view_size: Vec2) -> Rect

What part of the view is important and should be visible? Read more
Source§

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

Returns the type of this view. Read more

Auto Trait Implementations§

§

impl<T> Freeze for AsyncProgressView<T>
where T: Freeze,

§

impl<T> !RefUnwindSafe for AsyncProgressView<T>

§

impl<T> Send for AsyncProgressView<T>

§

impl<T> Sync for AsyncProgressView<T>

§

impl<T> Unpin for AsyncProgressView<T>
where T: Unpin,

§

impl<T> !UnwindSafe for AsyncProgressView<T>

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> AnyView for T
where T: View,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Downcast self to a Any.

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Downcast self to a mutable Any.

Source§

fn as_boxed_any(self: Box<T>) -> Box<dyn Any>

Returns a boxed any from a boxed 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> Finder for T
where T: View,

Source§

fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
where V: View, F: FnMut(&mut V),

Runs a callback on all views identified by sel. Read more
Source§

fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Runs a callback on the view identified by sel. Read more
Source§

fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Convenient method to use call_on with a view::Selector::Name.
Source§

fn find_name<V>(&mut self, name: &str) -> Option<ViewRef<V>>
where V: View,

Convenient method to find a view wrapped in an NamedView.
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> IntoBoxedView for T
where T: View,

Source§

fn into_boxed_view(self) -> Box<dyn View>

Returns a Box<View>.
Source§

impl<T> Nameable for T
where T: View,

Source§

fn with_name<S>(self, name: S) -> NamedView<Self>
where S: Into<String>,

Wraps this view into an NamedView with the given id. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Resizable for T
where T: View,

Source§

fn resized( self, width: SizeConstraint, height: SizeConstraint, ) -> ResizedView<Self>

Wraps self in a ResizedView with the given size constraints.
Source§

fn fixed_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a fixed-size ResizedView.
Source§

fn fixed_width(self, width: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn fixed_height(self, height: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn full_screen(self) -> ResizedView<Self>

Wraps self into a full-screen ResizedView.
Source§

fn full_width(self) -> ResizedView<Self>

Wraps self into a full-width ResizedView.
Source§

fn full_height(self) -> ResizedView<Self>

Wraps self into a full-height ResizedView.
Source§

fn max_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a limited-size ResizedView.
Source§

fn max_width(self, max_width: usize) -> ResizedView<Self>

Wraps self into a limited-width ResizedView.
Source§

fn max_height(self, max_height: usize) -> ResizedView<Self>

Wraps self into a limited-height ResizedView.
Source§

fn min_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a ResizedView at least sized size.
Source§

fn min_width(self, min_width: usize) -> ResizedView<Self>

Wraps self in a ResizedView at least min_width wide.
Source§

fn min_height(self, min_height: usize) -> ResizedView<Self>

Wraps self in a ResizedView at least min_height tall.
Source§

impl<T> Scrollable for T
where T: View,

Source§

fn scrollable(self) -> ScrollView<Self>

Wraps self in a ScrollView.
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.
Source§

impl<T> With for T

Source§

fn wrap_with<U, F>(self, f: F) -> U
where F: FnOnce(Self) -> U,

Calls the given closure and return the result. Read more
Source§

fn with<F>(self, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure on self.
Source§

fn try_with<E, F>(self, f: F) -> Result<Self, E>
where F: FnOnce(&mut Self) -> Result<(), E>,

Calls the given closure on self.
Source§

fn with_if<F>(self, condition: bool, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure if condition == true.