mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-09 05:06:43 +01:00
wip: refactor pt.20: 44 errors
This commit is contained in:
parent
914c2d6c09
commit
2188bccd63
25 changed files with 664 additions and 486 deletions
|
|
@ -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> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue