diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index 760fc8e4..cf1e3322 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -30,9 +30,21 @@ impl Handle for Arranger { fn handle (&mut self, from: &TuiInput) -> Perhaps { if !match self.focused() { ArrangerFocus::Transport => self.transport.handle(from)?, - ArrangerFocus::Arrangement => self.arrangement.handle(from)?, ArrangerFocus::PhrasePool => self.phrases.handle(from)?, - ArrangerFocus::PhraseEditor => self.editor.handle(from)? + ArrangerFocus::PhraseEditor => self.editor.handle(from)?, + ArrangerFocus::Arrangement => { + let mut handle_phrase = ||{ + let result = self.phrases.handle(from); + self.arrangement.phrase_put(); + result + }; + match from.event() { + key!(KeyCode::Char('a')) => handle_phrase()?, + key!(KeyCode::Char('i')) => handle_phrase()?, + key!(KeyCode::Char('d')) => handle_phrase()?, + _ => self.arrangement.handle(from)? + } + }, }.unwrap_or(false) { match from.event() { // Tab navigation @@ -46,7 +58,7 @@ impl Handle for Arranger { 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(); }, + 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_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index d8732fc8..68c80670 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -124,12 +124,12 @@ impl Handle for PhrasePool { let mut phrase = Phrase::default(); phrase.name = Arc::new(RwLock::new("(no name)".to_string())); phrase.color = random_color(); - self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase))); + self.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase))); self.phrase += 1; }, key!(KeyCode::Char('d')) => { // insert duplicate let phrase = (*self.phrases[self.phrase].read().unwrap()).clone(); - self.phrases.insert(self.phrase, Arc::new(RwLock::new(phrase))); + self.phrases.insert(self.phrase + 1, Arc::new(RwLock::new(phrase))); self.phrase += 1; }, key!(KeyCode::Char('c')) => { // change color