diff --git a/crates/tek_sequencer/src/arranger.rs b/crates/tek_sequencer/src/arranger.rs index 9f14ce09..b5961f07 100644 --- a/crates/tek_sequencer/src/arranger.rs +++ b/crates/tek_sequencer/src/arranger.rs @@ -347,6 +347,11 @@ impl Arrangement { //}) //}); } + pub fn phrase_put (&mut self) { + if let ArrangementFocus::Clip(track, scene) = self.selected { + self.scenes[scene].clips[track] = Some(self.phrases.read().unwrap().phrase().clone()); + } + } } impl ArrangementTrack { pub fn new (name: &str) -> Self { diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index f60e6bcb..360e721a 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -45,6 +45,8 @@ impl Handle for Arranger { key!(KeyCode::Down) => { self.focus_down(); }, key!(KeyCode::Left) => { self.focus_left(); }, key!(KeyCode::Right) => { self.focus_right(); }, + // Put selected phrase at position + key!(KeyCode::Char('s')) => { self.arrangement.phrase_put(); }, // Global play/pause binding key!(KeyCode::Char(' ')) => match self.transport { Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; }, diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index 59de47e4..4f07256d 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -27,7 +27,7 @@ pub struct PhrasePool { /// Highlighted phrase pub phrase: usize, /// Phrases in the pool - pub phrases: Vec>>>, + pub phrases: Vec>>, /// Whether this widget is focused pub focused: bool, } @@ -126,10 +126,13 @@ impl PhrasePool { _engine: Default::default(), scroll: 0, phrase: 0, - phrases: vec![Arc::new(RwLock::new(Some(Phrase::default())))], + phrases: vec![Arc::new(RwLock::new(Phrase::default()))], focused: false } } + pub fn phrase (&self) -> &Arc> { + &self.phrases[self.phrase] + } } impl PhraseEditor { pub fn new () -> Self { diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index 2e1b6a31..704eabec 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -76,10 +76,10 @@ impl Handle for PhrasePool { self.phrase = (self.phrase + 1) % self.phrases.len() }, key!(KeyCode::Char('i')) => { - self.phrases.insert(self.phrase, Arc::new(RwLock::new(Some(Phrase::default())))) + self.phrases.insert(self.phrase, Arc::new(RwLock::new(Phrase::default()))) }, key!(KeyCode::Char('a')) => { - self.phrases.push(Arc::new(RwLock::new(Some(Phrase::default())))) + self.phrases.push(Arc::new(RwLock::new(Phrase::default()))) }, _ => return Ok(None), }