[−][src]Struct cursive_async_view::AsyncProgressView
An AsyncProgressView is a wrapper view that displays a progress bar, until the
child view is successfully created. The creation of the inner view is done on a
dedicated thread. Therefore, it is necessary for the creation function to always
return, otherwise the thread will get stuck.
Example usage
use crossbeam::Sender; use cursive::{views::TextView, Cursive}; use cursive_async_view::AsyncProgressView; let mut siv = Cursive::default(); let async_view = AsyncProgressView::new(&siv, |s: Sender<f32>| { std::thread::sleep(std::time::Duration::from_secs(1)); s.send(0.2).unwrap(); std::thread::sleep(std::time::Duration::from_secs(1)); s.send(0.4).unwrap(); std::thread::sleep(std::time::Duration::from_secs(1)); s.send(0.6).unwrap(); std::thread::sleep(std::time::Duration::from_secs(1)); s.send(0.8).unwrap(); std::thread::sleep(std::time::Duration::from_secs(1)); s.send(1.0).unwrap(); TextView::new("Yay, the content has loaded!") }); siv.add_layer(async_view); // siv.run();
Threads
The new(siv, creator) method will spawn 2 threads:
cursive-async-view::creatorThe creation thread for the wrapped view. This thread will stop running as soon as the creation function returned.cursive-async-view::updaterThe update thread waits for the creation function to signal progress and will be stopped byAsyncProgressViewwhen the creation function returned and the new view is available for layouting.
The threads are labeled as indicated above.
TODO
- make creation function return a result to mark an unsuccessful creation
Methods
impl<T: View + Send + Sized> AsyncProgressView<T>[src]
pub fn new<F>(siv: &Cursive, creator: F) -> Self where
F: FnOnce(Sender<f32>) -> T + Send + 'static, [src]
F: FnOnce(Sender<f32>) -> T + Send + '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.
pub fn with_width(self, width: usize) -> Self[src]
Mark the maximum allowed width in characters, the progress bar may consume. By default, the width will be inherited by the parent view.
pub fn with_height(self, height: usize) -> Self[src]
Mark the maximum allowed height in characters, the progress bar may consume. By default, the height will be inherited by the parent view.
pub fn with_progress_fn<F>(self, progress_fn: F) -> Self where
F: Fn(usize, usize, f32) -> StyledString + 'static, [src]
F: Fn(usize, usize, f32) -> StyledString + '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.
pub fn set_width(&mut self, width: usize)[src]
Set the maximum allowed width in characters, the progress bar may consume.
pub fn set_height(&mut self, height: usize)[src]
Set the maximum allowed height in characters, the progress bar may consume.
pub fn set_progress_fn<F>(&mut self, progress_fn: F) where
F: Fn(usize, usize, f32) -> StyledString + 'static, [src]
F: Fn(usize, usize, f32) -> StyledString + '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.
pub fn inherit_width(&mut self)[src]
Make the progress bar inherit its width from the parent view. This is the default.
pub fn inherit_height(&mut self)[src]
Make the progress bar inherit its height from the parent view. This is the default.
Trait Implementations
impl<T: View + Send + Sized> View for AsyncProgressView<T>[src]
fn draw(&self, printer: &Printer)[src]
fn layout(&mut self, vec: Vec2)[src]
fn needs_relayout(&self) -> bool[src]
fn required_size(&mut self, constraint: Vec2) -> Vec2[src]
fn on_event(&mut self, ev: Event) -> EventResult[src]
fn call_on_any<'a>(&mut self, sel: &Selector, cb: AnyCb<'a>)[src]
fn focus_view(&mut self, sel: &Selector) -> Result<(), ()>[src]
fn take_focus(&mut self, source: Direction) -> bool[src]
fn important_area(&self, view_size: Vec2) -> Rect[src]
Auto Trait Implementations
impl<T> Unpin for AsyncProgressView<T> where
T: Unpin,
T: Unpin,
impl<T> !Send for AsyncProgressView<T>
impl<T> !Sync for AsyncProgressView<T>
impl<T> !RefUnwindSafe for AsyncProgressView<T>
impl<T> !UnwindSafe for AsyncProgressView<T>
Blanket Implementations
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Finder for T where
T: View, [src]
T: View,
fn call_on<V, F, R>(&mut self, sel: &Selector, callback: F) -> Option<R> where
F: FnOnce(&mut V) -> R,
V: View + Any, [src]
F: FnOnce(&mut V) -> R,
V: View + Any,
fn call_on_id<V, F, R>(&mut self, id: &str, callback: F) -> Option<R> where
F: FnOnce(&mut V) -> R,
V: View + Any, [src]
F: FnOnce(&mut V) -> R,
V: View + Any,
Convenient method to use call_on with a view::Selector::Id.
fn find_id<V>(
&mut self,
id: &str
) -> Option<OwningHandle<OwningRef<Rc<RefCell<V>>, RefCell<V>>, RefMut<'static, V>>> where
V: View + Any, [src]
&mut self,
id: &str
) -> Option<OwningHandle<OwningRef<Rc<RefCell<V>>, RefCell<V>>, RefMut<'static, V>>> where
V: View + Any,
Convenient method to find a view wrapped in an [IdView]. Read more
impl<T> Scrollable for T where
T: View, [src]
T: View,
fn scrollable(self) -> ScrollView<Self>[src]
Wraps self in a ScrollView.
impl<T> View for T where
T: ViewWrapper, [src]
T: ViewWrapper,
fn draw(&self, printer: &Printer)[src]
fn required_size(&mut self, req: XY<usize>) -> XY<usize>[src]
fn on_event(&mut self, ch: Event) -> EventResult[src]
fn layout(&mut self, size: XY<usize>)[src]
fn take_focus(&mut self, source: Direction) -> bool[src]
fn call_on_any(
&mut self,
selector: &Selector,
callback: Box<dyn FnMut(&mut (dyn Any + 'static)) + 'a>
)[src]
&mut self,
selector: &Selector,
callback: Box<dyn FnMut(&mut (dyn Any + 'static)) + 'a>
)
fn needs_relayout(&self) -> bool[src]
fn focus_view(&mut self, selector: &Selector) -> Result<(), ()>[src]
fn important_area(&self, size: XY<usize>) -> Rect[src]
impl<T> With for T[src]
fn with<F>(self, f: F) -> Self where
F: FnOnce(&mut Self), [src]
F: FnOnce(&mut Self),
Calls the given closure on self.
fn try_with<E, F>(self, f: F) -> Result<Self, E> where
F: FnOnce(&mut Self) -> Result<(), E>, [src]
F: FnOnce(&mut Self) -> Result<(), E>,
Calls the given closure on self.
fn with_if<F>(self, condition: bool, f: F) -> Self where
F: FnOnce(&mut Self), [src]
F: FnOnce(&mut Self),
Calls the given closure if condition == true.
impl<T> Boxable for T where
T: View, [src]
T: View,
fn boxed(self, width: SizeConstraint, height: SizeConstraint) -> BoxView<Self>[src]
Wraps self in a BoxView with the given size constraints.
fn fixed_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>, [src]
S: Into<XY<usize>>,
Wraps self into a fixed-size BoxView.
fn fixed_width(self, width: usize) -> BoxView<Self>[src]
Wraps self into a fixed-width BoxView.
fn fixed_height(self, height: usize) -> BoxView<Self>[src]
Wraps self into a fixed-width BoxView.
fn full_screen(self) -> BoxView<Self>[src]
Wraps self into a full-screen BoxView.
fn full_width(self) -> BoxView<Self>[src]
Wraps self into a full-width BoxView.
fn full_height(self) -> BoxView<Self>[src]
Wraps self into a full-height BoxView.
fn max_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>, [src]
S: Into<XY<usize>>,
Wraps self into a limited-size BoxView.
fn max_width(self, max_width: usize) -> BoxView<Self>[src]
Wraps self into a limited-width BoxView.
fn max_height(self, max_height: usize) -> BoxView<Self>[src]
Wraps self into a limited-height BoxView.
fn min_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>, [src]
S: Into<XY<usize>>,
Wraps self into a BoxView at least sized size.
fn min_width(self, min_width: usize) -> BoxView<Self>[src]
Wraps self in a BoxView at least min_width wide.
fn min_height(self, min_height: usize) -> BoxView<Self>[src]
Wraps self in a BoxView at least min_height tall.
impl<T> Identifiable for T where
T: View, [src]
T: View,
fn with_id<S>(self, id: S) -> IdView<Self> where
S: Into<String>, [src]
S: Into<String>,
Wraps this view into an IdView with the given id. Read more
impl<T> AnyView for T where
T: View, [src]
T: View,
fn as_any(&self) -> &(dyn Any + 'static)[src]
Downcast self to a Any.
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)[src]
Downcast self to a mutable Any.
fn as_boxed_any(self: Box<T>) -> Box<dyn Any + 'static>[src]
impl<T> IntoBoxedView for T where
T: View, [src]
T: View,