use crate::*; use std::cmp::PartialEq; /// Root level object for standalone `tek_sequencer` pub struct SequencerView { /// Controls the JACK transport. pub transport: TransportView, /// Width of phrase pool pub split: u16, /// Pool of all phrases available to the sequencer pub phrases: PhrasePoolView, /// Phrase editor view pub editor: PhraseEditor, /// Phrase player pub player: MIDIPlayer, } /// JACK process callback for sequencer app impl Audio for SequencerView { fn process (&mut self, client: &Client, scope: &ProcessScope) -> Control { self.transport.process(client, scope); self.player.process(client, scope); Control::Continue } } impl Content for SequencerView { type Engine = Tui; fn content (&self) -> impl Widget { Stack::down(move|add|{ add(&self.transport)?; add(&self.phrases .split(Direction::Right, 20, &self.editor as &dyn Widget) .min_y(20)) }) } }