tek/crates/tek_core/examples/demo.rs

75 lines
2.1 KiB
Rust

use tek_core::*;
use tek_core::jack::*;
fn main () -> Usually<()> {
Tui::run(Arc::new(RwLock::new(Demo::new())))?;
Ok(())
}
pub struct Demo<E: Engine> {
index: usize,
items: Vec<Box<dyn Widget<Engine = E>>>
}
impl Demo<Tui> {
fn new () -> Self {
Self {
index: 0,
items: vec![
Box::new(tek_sequencer::TransportPlayPauseButton {
_engine: Default::default(),
transport: None,
value: Some(TransportState::Stopped),
focused: true
}),
Box::new(tek_sequencer::TransportPlayPauseButton {
_engine: Default::default(),
transport: None,
value: Some(TransportState::Rolling),
focused: false
}),
]
}
}
}
impl Content for Demo<Tui> {
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
Align::Center(Fixed::XY(10, 10, Layers::new(|add|{
add(&FillBg(Color::Rgb(128,0,0)))?;
add(&Split::down(|add|{
add(&Layers::new(|add|{
add(&FillBg(Color::Rgb(0,128,0)))?;
add(&Align::Center("12345"))?;
add(&Align::Center("FOO"))
}))?;
add(&Layers::new(|add|{
add(&FillBg(Color::Rgb(0,0,128)))?;
add(&Align::Center("1234567"))?;
add(&Align::Center("BAR"))
}))?;
Ok(())
}))
})))
}
}
impl Handle<Tui> for Demo<Tui> {
fn handle (&mut self, from: &Tui) -> Perhaps<bool> {
match from.event() {
key!(KeyCode::PageUp) => {
self.index = (self.index + 1) % self.items.len();
},
key!(KeyCode::PageDown) => {
self.index = if self.index > 1 {
self.index - 1
} else {
self.items.len() - 1
};
},
_ => return Ok(None)
}
Ok(Some(true))
}
}