diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index b7fe7118..6b3c38b7 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -66,6 +66,8 @@ pub struct PhraseEditor { _engine: PhantomData, /// Phrase being played pub phrase: Option>>, + /// Length of note that will be inserted, in pulses + pub note_len: usize, /// The full piano keys are rendered to this buffer pub keys: Buffer, /// The full piano roll is rendered to this buffer @@ -223,6 +225,7 @@ impl PhraseEditor { Self { _engine: Default::default(), phrase: None, + note_len: 24, notes_in: Arc::new(RwLock::new([false;128])), notes_out: Arc::new(RwLock::new([false;128])), keys: keys_vert(), diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 198d1d6c..9ab0debd 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -53,26 +53,14 @@ impl Handle for PhrasePool { self.mode = None; }, key!(KeyCode::Up) => match focus { - PhraseLengthFocus::Bar => { - *length += 4 * PPQ - }, - PhraseLengthFocus::Beat => { - *length += PPQ - }, - PhraseLengthFocus::Tick => { - *length += 1 - }, + PhraseLengthFocus::Bar => { *length += 4 * PPQ }, + PhraseLengthFocus::Beat => { *length += PPQ }, + PhraseLengthFocus::Tick => { *length += 1 }, }, key!(KeyCode::Down) => match focus { - PhraseLengthFocus::Bar => { - *length = length.saturating_sub(4 * PPQ) - }, - PhraseLengthFocus::Beat => { - *length = length.saturating_sub(PPQ) - }, - PhraseLengthFocus::Tick => { - *length = length.saturating_sub(1) - }, + PhraseLengthFocus::Bar => { *length = length.saturating_sub(4 * PPQ) }, + PhraseLengthFocus::Beat => { *length = length.saturating_sub(PPQ) }, + PhraseLengthFocus::Tick => { *length = length.saturating_sub(1) }, }, _ => return Ok(Some(true)) } @@ -98,11 +86,10 @@ impl Handle for PhrasePool { impl Handle for PhraseEditor { fn handle (&mut self, from: &TuiInput) -> Perhaps { match from.event() { - key!(KeyCode::Char('`')) => { - self.mode = !self.mode; - }, - key!(KeyCode::Enter) => { self.entered = true; }, - key!(KeyCode::Esc) => { self.entered = false; }, + key!(KeyCode::Char('`')) => { self.mode = !self.mode; }, + key!(KeyCode::Enter) => { self.entered = true; }, + key!(KeyCode::Esc) => { self.entered = false; }, + key!(KeyCode::Up) => match self.entered { true => { self.note_axis.point_dec(); }, false => { self.note_axis.start_dec(); }, @@ -119,9 +106,18 @@ impl Handle for PhraseEditor { true => { self.time_axis.point_inc(); }, false => { self.time_axis.start_inc(); }, }, - _ => { - return Ok(None) - } + key!(KeyCode::Char(',')) => match self.entered { + true => {}, + false => {}, + }, + key!(KeyCode::Char('.')) => match self.entered { + true => {}, + false => {}, + }, + key!(KeyCode::Char('a')) => if self.entered {}, + key!(KeyCode::Char('i')) => if self.entered {}, + + _ => { return Ok(None) } } return Ok(Some(true)) } diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index f77a13aa..2b7691a1 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -48,7 +48,9 @@ impl Content for PhrasePool { impl Content for PhraseEditor { type Engine = Tui; fn content (&self) -> impl Widget { - let Self { focused, entered, time_axis, note_axis, keys, phrase, buffer, .. } = self; + let Self { + focused, entered, time_axis, note_axis, keys, phrase, buffer, note_len, .. + } = self; let offset = Self::H_KEYS_OFFSET as u16; let keys = CustomWidget::new(|_|Ok(Some([32u16,4u16])), move|to: &mut TuiOutput|{ if to.area().h() >= 2 { @@ -120,8 +122,8 @@ impl Content for PhraseEditor { } if *focused { if *entered { - lower_left = "[Esc] Exit edit mode [A]ppend [I]nsert".to_string(); - lower_right = format!("[,.] Length: ?? {lower_right}"); + lower_left = "[Esc] Exit edit mode [A]ppend [S]et".to_string(); + lower_right = format!("[,.] Length: {} {lower_right}", ppq_to_name(*note_len)); } else { lower_left = "[Enter] Edit notes".to_string(); lower_right = format!("[,.] {lower_right}");