wip: refactor pt.20: 44 errors

This commit is contained in:
🪞👃🪞 2024-11-12 02:17:38 +01:00
parent 914c2d6c09
commit 2188bccd63
25 changed files with 664 additions and 486 deletions

View file

@ -1,19 +1,80 @@
use crate::*;
use std::cmp::PartialEq;
pub type SequencerApp = AppContainer<
Tui,
SequencerModel,
SequencerView<Tui>,
SequencerViewCommand,
SequencerAudio,
SequencerStatusBar
>;
impl SequencerApp {
pub fn run <'a> (jack: &Arc<RwLock<JackClient>>) -> Usually<Self> {
let clock = Arc::new(Clock::from(Instant::default()));
let transport = Arc::new(RwLock::new(tek_api::Transport {
metronome: false,
transport: jack.read().unwrap().transport(),
jack: jack.clone(),
clock: clock.clone()
}));
let phrases = Arc::new(RwLock::new(PhrasePool {
phrases: vec![] // FIXME
}));
let player = Arc::new(RwLock::new(MIDIPlayer::new(jack, &clock, "preview")?));
let model = Arc::new(RwLock::new(SequencerModel {
transport: transport.clone(),
phrases: phrases.clone(),
player: player.clone()
}));
Ok(Self::new(
&model,
SequencerView::from(&model),
SequencerAudio(transport.clone(), player.clone()),
None,
None,
))
}
}
pub struct SequencerModel {
/// State of the JACK transport.
pub transport: Arc<RwLock<tek_api::Transport>>,
/// State of the phrase pool.
pub phrases: Arc<RwLock<PhrasePool>>,
/// State of the phrase player.
pub player: Arc<RwLock<MIDIPlayer>>,
}
impl<E: Engine> From<&Arc<RwLock<SequencerModel>>> for SequencerView<E> {
fn from (model: &Arc<RwLock<SequencerModel>>) -> Self {
Self {
split: 20,
transport: TransportView::from(&model.read().unwrap().transport),
phrases: PhrasePoolView::from(&model.read().unwrap().phrases),
editor: PhraseEditor::new(),
model: model.clone(),
}
}
}
/// Root level object for standalone `tek_sequencer`.
/// Also embeddable, in which case the `player` is used for preview.
pub struct SequencerView<E: Engine> {
/// Controls the JACK transport.
pub model: Arc<RwLock<SequencerModel>>,
/// Displays the JACK transport.
pub transport: TransportView<E>,
/// Displays the phrase pool
pub phrases: PhrasePoolView<E>,
/// Displays the phrase editor
pub editor: PhraseEditor<E>,
/// Width of phrase pool
pub split: u16,
/// Pool of all phrases available to the sequencer
pub phrases: PhrasePoolView<E>,
/// Phrase editor view
pub editor: PhraseEditor<E>,
/// Phrase player
pub player: MIDIPlayer,
}
impl Content for SequencerView<Tui> {