prompt/
prompt.rs

1//! Demonstrates centered prompts.
2
3use tuit::prelude::*;
4use tuit::std::stdout_render::StdoutRenderer;
5use tuit::style::{Ansi4, Colour::Ansi16, Style};
6use tuit::terminal::ConstantSize;
7use tuit::widgets::builtins::sweeper::Sweeper;
8use tuit::widgets::builtins::{Buttons, Text};
9
10#[cfg(not(feature = "ansi_renderer"))]
11fn main() {
12    println!("You must apply the stdout_render feature to view this example. Use `cargo --features stdout_render`");
13}
14
15#[cfg(feature = "ansi_renderer")]
16fn main() {
17    let mut terminal: ConstantSize<57, 14> = ConstantSize::new();
18    //
19    // let text = CenteredText::new("Hello world!");
20    //
21    // text.drawn(&mut terminal)
22    //     .expect("This method CAN fail, but only if the prompt is too large. Here, it is not.");
23
24    let mut renderer = StdoutRenderer::default();
25
26    let sweeper = Sweeper::of_colour(Ansi16(Ansi4::BrightCyan));
27    sweeper.drawn(&mut terminal).ok();
28
29    let query = Text::new("Continue?").with_margin(1);
30    let mut buttons = Buttons::new(&[" Yes ", " No "]);
31
32    buttons.selected_button_style = Style::new().fg(Ansi16(Ansi4::BrightWhite)).inverted();
33
34    let buttons = buttons.select_last();
35
36    let prompt = query.on_top_of(buttons).centered();
37
38    prompt.use_backdrop(Ansi16(Ansi4::Yellow)).drawn(&mut terminal).expect("Infallible");
39
40    prompt.drawn(&mut terminal).ok();
41
42    renderer.render(terminal).ok();
43}