[][src]Crate cursive_async_view

This project provides a wrapper view with a loading screen for gyscos/cursive views. The loading screen will disappear once the wrapped view is fully loaded. This is useful for displaying views which may take long to construct or depend on e.g. the network.

Asynchronous view loading without progress information

If you can't tell the progress during a long taking creation of a view, you may wrap the creation of this view in an AsyncView. This will display a loading animation until the inner view is ready to be drawn.

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();

Asynchronous view loading with a progress bar

If you have information about the progress a long taking view creation has made, you can wrap the creation in an AsyncProgressView. This will display a progress bar until the inner view is ready to be drawn.

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();

Structs

AnimationFrame

This struct represents the content of a single loading animation frame, produced by a animation function of the AsyncView. Read the documentation of the default_animation to see how to implement your own animation function.

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.

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.

Functions

default_animation

The default loading animation for a AsyncView.

default_progress

The default progress animation for a AsyncProgressView.