mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
75 lines
2.2 KiB
Rust
75 lines
2.2 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(Layers::new(|add|{
|
|
add(&FillBg(Color::Rgb(128,0,0)))?;
|
|
add(&Outset::XY(2, 2, Align::Center(Split::down(|add|{
|
|
add(&Layers::new(|add|{
|
|
add(&FillBg(Color::Rgb(0,128,0)))?;
|
|
add(&Outset::XY(2, 2, Align::Center("12345")))?;
|
|
add(&Align::Center("FOO"))
|
|
}))?;
|
|
add(&Layers::new(|add|{
|
|
add(&Outset::XY(2, 2, Align::Center("1234567")))?;
|
|
add(&Align::Center("BAR"))?;
|
|
add(&FillBg(Color::Rgb(0,0,128)))
|
|
}))?;
|
|
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))
|
|
}
|
|
}
|