[−][src]Struct cursive_async_view::AsyncView
An AsyncView
is a wrapper view that displays a loading screen, 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 cursive::{views::TextView, Cursive}; use cursive_async_view::AsyncView; let mut siv = Cursive::default(); let async_view = AsyncView::new(&siv, move || { std::thread::sleep(std::time::Duration::from_secs(10)); TextView::new("Yay!\n\nThe content has loaded!") }); siv.add_layer(async_view); // siv.run();
The content will be displayed after 10 seconds.
Threads
The new(siv, creator)
method will spawn 2 threads:
cursive-async-view::creator
The creation thread for the wrapped view. This thread will stop running as soon as the creation function returned.cursive-async-view::updater
The update thread for ensuring 30fps during the loading animation. This thread will be stopped byAsyncView
when 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> AsyncView<T>
[src]
pub fn new<F>(siv: &Cursive, creator: F) -> Self where
F: FnOnce() -> T + Send + 'static,
[src]
F: FnOnce() -> T + Send + 'static,
Create a new AsyncView
instance. The cursive reference is only used
to control the refresh rate of the terminal when the loading animation
is running. 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 loading animation 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 loading animation may consume. By default, the height will be inherited by the parent view.
pub fn with_animation_fn<F>(self, animation_fn: F) -> Self where
F: Fn(usize, usize, usize) -> AnimationFrame + 'static,
[src]
F: Fn(usize, usize, usize) -> AnimationFrame + 'static,
Set a custom animation function for this view, indicating that the wrapped view is
not available yet. See the default_animation
function reference for an example on
how to create a custom animation function.
pub fn set_width(&mut self, width: usize)
[src]
Set the maximum allowed width in characters, the loading animation may consume.
pub fn set_height(&mut self, height: usize)
[src]
Set the maximum allowed height in characters, the loading animation may consume.
pub fn set_animation_fn<F>(&mut self, animation_fn: F) where
F: Fn(usize, usize, usize) -> AnimationFrame + 'static,
[src]
F: Fn(usize, usize, usize) -> AnimationFrame + 'static,
Set a custom animation function for this view, indicating that the wrapped view is
not available yet. See the default_animation
function reference for an example on
how to create a custom animation function.
This function may be set at any time. The loading animation can be changed even if the previous loading animation has already started.
The
frame_idx
of the loading animation is reset to 0 when setting a new animation function
pub fn inherit_width(&mut self)
[src]
Make the loading animation inherit its width from the parent view. This is the default.
pub fn inherit_height(&mut self)
[src]
Make the loading animation inherit its height from the parent view. This is the default.
Trait Implementations
impl<T: View + Send + Sized> View for AsyncView<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 AsyncView<T> where
T: Unpin,
T: Unpin,
impl<T> !Sync for AsyncView<T>
impl<T> !Send for AsyncView<T>
impl<T> !UnwindSafe for AsyncView<T>
impl<T> !RefUnwindSafe for AsyncView<T>
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
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> Identifiable for T where
T: View,
[src]
T: View,
impl<T> Boxable for T where
T: View,
[src]
T: View,
fn boxed(self, width: SizeConstraint, height: SizeConstraint) -> BoxView<Self>
[src]
fn fixed_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>,
[src]
S: Into<XY<usize>>,
fn fixed_width(self, width: usize) -> BoxView<Self>
[src]
fn fixed_height(self, height: usize) -> BoxView<Self>
[src]
fn full_screen(self) -> BoxView<Self>
[src]
fn full_width(self) -> BoxView<Self>
[src]
fn full_height(self) -> BoxView<Self>
[src]
fn max_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>,
[src]
S: Into<XY<usize>>,
fn max_width(self, max_width: usize) -> BoxView<Self>
[src]
fn max_height(self, max_height: usize) -> BoxView<Self>
[src]
fn min_size<S>(self, size: S) -> BoxView<Self> where
S: Into<XY<usize>>,
[src]
S: Into<XY<usize>>,
fn min_width(self, min_width: usize) -> BoxView<Self>
[src]
fn min_height(self, min_height: usize) -> BoxView<Self>
[src]
impl<T> With for T
[src]
fn with<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut 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>,
fn with_if<F>(self, condition: bool, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut Self),
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> Scrollable for T where
T: View,
[src]
T: View,
fn scrollable(self) -> ScrollView<Self>
[src]
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,
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,
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,