add/insert/duplicate phrase directly from grid

This commit is contained in:
🪞👃🪞 2024-10-11 14:42:36 +03:00
parent dc32c2c2b8
commit de4797ab52
2 changed files with 17 additions and 5 deletions

View file

@ -30,9 +30,21 @@ impl Handle<Tui> for Arranger<Tui> {
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> { fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
if !match self.focused() { if !match self.focused() {
ArrangerFocus::Transport => self.transport.handle(from)?, ArrangerFocus::Transport => self.transport.handle(from)?,
ArrangerFocus::Arrangement => self.arrangement.handle(from)?,
ArrangerFocus::PhrasePool => self.phrases.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) { }.unwrap_or(false) {
match from.event() { match from.event() {
// Tab navigation // Tab navigation
@ -46,7 +58,7 @@ impl Handle<Tui> for Arranger<Tui> {
key!(KeyCode::Left) => { self.focus_left(); }, key!(KeyCode::Left) => { self.focus_left(); },
key!(KeyCode::Right) => { self.focus_right(); }, key!(KeyCode::Right) => { self.focus_right(); },
// Put selected phrase at position // 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 // Global play/pause binding
key!(KeyCode::Char(' ')) => match self.transport { key!(KeyCode::Char(' ')) => match self.transport {
Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; }, Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; },

View file

@ -124,12 +124,12 @@ impl Handle<Tui> for PhrasePool<Tui> {
let mut phrase = Phrase::default(); let mut phrase = Phrase::default();
phrase.name = Arc::new(RwLock::new("(no name)".to_string())); phrase.name = Arc::new(RwLock::new("(no name)".to_string()));
phrase.color = random_color(); 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; self.phrase += 1;
}, },
key!(KeyCode::Char('d')) => { // insert duplicate key!(KeyCode::Char('d')) => { // insert duplicate
let phrase = (*self.phrases[self.phrase].read().unwrap()).clone(); 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; self.phrase += 1;
}, },
key!(KeyCode::Char('c')) => { // change color key!(KeyCode::Char('c')) => { // change color