diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index c9f29346..525f4e45 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -30,7 +30,11 @@ pub struct PhrasePool { pub phrases: Vec>>, /// Whether this widget is focused pub focused: bool, + /// Mode switch + pub mode: Option, } +/// Modes for phrase pool +pub enum PhrasePoolMode { Rename(usize) } /// A MIDI sequence. #[derive(Debug, Clone)] pub struct Phrase { @@ -129,7 +133,8 @@ impl PhrasePool { scroll: 0, phrase: 0, phrases: vec![Arc::new(RwLock::new(Phrase::default()))], - focused: false + focused: false, + mode: None, } } pub fn phrase (&self) -> &Arc> { diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index dd59ba6e..50f8fb22 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -52,7 +52,18 @@ impl Content for PhrasePool { } else { color //Color::Rgb(28, 35, 25) }))?; - if self.focused && i == self.phrase { add(&CORNERS)?; } + match self.mode { + None => { + if self.focused && i == self.phrase { add(&CORNERS)?; } + }, + Some(PhrasePoolMode::Rename(phrase)) => { + if self.focused && i == phrase { + add(&CORNERS)?; + add(&"Rename")?; + } + } + } + Ok(()) }) ) @@ -104,6 +115,9 @@ impl Handle for PhrasePool { let mut phrase = self.phrases[self.phrase].write().unwrap(); phrase.color = random_color(); }, + key!(KeyCode::Char('n')) => { // change name + self.mode = Some(PhrasePoolMode::Rename(self.phrase)); + }, _ => return Ok(None), } return Ok(Some(true))