use crate::*; pub struct Mixer { pub name: String, pub tracks: Vec>, pub selected_track: usize, pub selected_column: usize, } impl Mixer { pub fn new (name: &str) -> Usually { let (client, _status) = Client::new(name, ClientOptions::NO_START_SERVER)?; Ok(Self { name: name.into(), selected_column: 0, selected_track: 1, tracks: vec![], }) } pub fn track_add (&mut self, name: &str, channels: usize) -> Usually<&mut Self> { let track = Track::new(name)?; self.tracks.push(track); Ok(self) } pub fn track (&self) -> Option<&Track> { self.tracks.get(self.selected_track) } } impl Process for Mixer { fn process (&mut self, _: &Client, _: &ProcessScope) -> Control { Control::Continue } } impl Render for Mixer { fn render (&self, to: &mut Tui) -> Perhaps<[u16;4]> { let mut tracks = Split::right(); for channel in self.tracks.iter() { tracks = tracks.add_ref(channel) } tracks.render(to) } }