use crate::*; pub trait TransportControl { fn quant (&self) -> &Quantize; fn bpm (&self) -> &BeatsPerMinute; fn next_quant (&self) -> f64 { next_note_length(self.quant().get() as usize) as f64 } fn prev_quant (&self) -> f64 { prev_note_length(self.quant().get() as usize) as f64 } fn sync (&self) -> &LaunchSync; fn next_sync (&self) -> f64 { next_note_length(self.sync().get() as usize) as f64 } fn prev_sync (&self) -> f64 { prev_note_length(self.sync().get() as usize) as f64 } } impl TransportControl for TransportTui { fn bpm (&self) -> &BeatsPerMinute { self.bpm() } fn quant (&self) -> &Quantize { self.quant() } fn sync (&self) -> &LaunchSync { self.sync() } } impl TransportControl for SequencerTui { fn bpm (&self) -> &BeatsPerMinute { self.bpm() } fn quant (&self) -> &Quantize { self.quant() } fn sync (&self) -> &LaunchSync { self.sync() } } pub trait ArrangerControl { fn selected (&self) -> ArrangerSelection; } impl ArrangerControl for ArrangerTui { fn selected (&self) -> ArrangerSelection { self.selected } }