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)) } } //lisp!(CONTENT Demo (LET //(BORDER-STYLE (STYLE (FG (RGB 0 0 0)))) //(BG-COLOR-0 (RGB 0 128 128)) //(BG-COLOR-1 (RGB 128 96 0)) //(BG-COLOR-2 (RGB 128 64 0)) //(BG-COLOR-3 (RGB 96 64 0)) //(CENTER (LAYERS //(BACKGROUND BG-COLOR-0) //(OUTSET-XY 1 1 (SPLIT-DOWN //(LAYERS (BACKGROUND BG-COLOR-1) //(BORDER SQUARE BORDER-STYLE) //(OUTSET-XY 2 1 "...")) //(LAYERS (BACKGROUND BG-COLOR-2) //(BORDER LOZENGE BORDER-STYLE) //(OUTSET-XY 4 2 "---")) //(LAYERS (BACKGROUND BG-COLOR-3) //(BORDER SQUARE-BOLD BORDER-STYLE) //(OUTSET-XY 2 1 "~~~"))))))))