use tek::*; fn main () -> Usually<()> { Tui::run(Arc::new(RwLock::new(Demo::new())))?; Ok(()) } pub struct Demo { index: usize, items: Vec>> } impl Demo { fn new () -> Self { Self { index: 0, items: vec![] } } } impl Content for Demo { type Engine = Tui; fn content (&self) -> dyn Render { let border_style = Style::default().fg(Color::Rgb(0,0,0)); Align::Center(Layers::new(move|add|{ add(&Background(Color::Rgb(0,128,128)))?; add(&Margin::XY(1, 1, Stack::down(|add|{ add(&Layers::new(|add|{ add(&Background(Color::Rgb(128,96,0)))?; add(&Border(Square(border_style)))?; add(&Margin::XY(2, 1, "..."))?; Ok(()) }).debug())?; add(&Layers::new(|add|{ add(&Background(Color::Rgb(128,64,0)))?; add(&Border(Lozenge(border_style)))?; add(&Margin::XY(4, 2, "---"))?; Ok(()) }).debug())?; add(&Layers::new(|add|{ add(&Background(Color::Rgb(96,64,0)))?; add(&Border(SquareBold(border_style)))?; add(&Margin::XY(6, 3, "~~~"))?; Ok(()) }).debug())?; Ok(()) })).debug())?; Ok(()) })) //Align::Center(Margin::X(1, Layers::new(|add|{ //add(&Background(Color::Rgb(128,0,0)))?; //add(&Stack::down(|add|{ //add(&Margin::Y(1, Layers::new(|add|{ //add(&Background(Color::Rgb(0,128,0)))?; //add(&Align::Center("12345"))?; //add(&Align::Center("FOO")) //})))?; //add(&Margin::XY(1, 1, Layers::new(|add|{ //add(&Align::Center("1234567"))?; //add(&Align::Center("BAR"))?; //add(&Background(Color::Rgb(0,0,128))) //}))) //})) //}))) //Align::Y(Layers::new(|add|{ //add(&Background(Color::Rgb(128,0,0)))?; //add(&Margin::X(1, Align::Center(Stack::down(|add|{ //add(&Align::X(Margin::Y(1, Layers::new(|add|{ //add(&Background(Color::Rgb(0,128,0)))?; //add(&Align::Center("12345"))?; //add(&Align::Center("FOO")) //})))?; //add(&Margin::XY(1, 1, Layers::new(|add|{ //add(&Align::Center("1234567"))?; //add(&Align::Center("BAR"))?; //add(&Background(Color::Rgb(0,0,128))) //})))?; //Ok(()) //}))))) //})) } } impl Handle for Demo { fn handle (&mut self, from: &TuiIn) -> Perhaps { use KeyCode::{PageUp, PageDown}; match from.event() { kexp!(PageUp) => { self.index = (self.index + 1) % self.items.len(); }, kexp!(PageDown) => { self.index = if self.index > 1 { self.index - 1 } else { self.items.len() - 1 }; }, _ => return Ok(None) } Ok(Some(true)) } }