From 8f10117a9cfeae401283b015ead2387479fcecf4 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 25 Nov 2024 18:46:26 +0100 Subject: [PATCH] enable transport commands in all contexts --- crates/tek_tui/src/tui_control_arranger.rs | 5 ++- crates/tek_tui/src/tui_control_sequencer.rs | 28 +++++++--------- crates/tek_tui/src/tui_control_transport.rs | 37 ++++++++++++++++----- 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/crates/tek_tui/src/tui_control_arranger.rs b/crates/tek_tui/src/tui_control_arranger.rs index 13e87da3..d61cdc04 100644 --- a/crates/tek_tui/src/tui_control_arranger.rs +++ b/crates/tek_tui/src/tui_control_arranger.rs @@ -145,10 +145,9 @@ fn to_arranger_command (state: &ArrangerTui, input: &TuiInput) -> Option { todo!() }, AppFocus::Content(focused) => match focused { ArrangerFocus::Transport(_) => { - use TransportCommand::{Clock, Focus}; match TransportCommand::input_to_command(state, input)? { - Clock(_) => { todo!() }, - Focus(command) => Cmd::Focus(command) + TransportCommand::Clock(command) => Cmd::Clock(command), + _ => return None, } }, ArrangerFocus::PhraseEditor => { diff --git a/crates/tek_tui/src/tui_control_sequencer.rs b/crates/tek_tui/src/tui_control_sequencer.rs index 709e1340..1312b73e 100644 --- a/crates/tek_tui/src/tui_control_sequencer.rs +++ b/crates/tek_tui/src/tui_control_sequencer.rs @@ -53,27 +53,23 @@ pub fn to_sequencer_command (state: &SequencerTui, input: &TuiInput) -> Option Editor( PhraseCommand::Show(state.phrase_to_edit().clone()) ), - key!(Char(' ')) => Clock( - if let Some(TransportState::Stopped) = *state.clock.playing.read().unwrap() { - ClockCommand::Play(None) - } else { - ClockCommand::Pause(None) - } - ), - key!(Shift-Char(' ')) => Clock( - if let Some(TransportState::Stopped) = *state.clock.playing.read().unwrap() { - ClockCommand::Play(Some(0)) - } else { - ClockCommand::Pause(Some(0)) - } - ), + key!(Char(' ')) => Clock(if state.is_stopped() { + ClockCommand::Play(None) + } else { + ClockCommand::Pause(None) + }), + key!(Shift-Char(' ')) => Clock(if state.is_stopped() { + ClockCommand::Play(Some(0)) + } else { + ClockCommand::Pause(Some(0)) + }), _ => match state.focused() { AppFocus::Menu => { todo!() }, AppFocus::Content(focused) => match focused { SequencerFocus::Transport(_) => { match TransportCommand::input_to_command(state, input)? { - TransportCommand::Clock(_) => { todo!() }, - TransportCommand::Focus(command) => Focus(command), + TransportCommand::Clock(command) => Clock(command), + _ => return None, } }, SequencerFocus::Phrases => Phrases( diff --git a/crates/tek_tui/src/tui_control_transport.rs b/crates/tek_tui/src/tui_control_transport.rs index 26a7682d..1ba73743 100644 --- a/crates/tek_tui/src/tui_control_transport.rs +++ b/crates/tek_tui/src/tui_control_transport.rs @@ -18,10 +18,11 @@ impl Command for TransportCommand { use FocusCommand::{Next, Prev}; use ClockCommand::{SetBpm, SetQuant, SetSync}; Ok(match self { - Focus(cmd) => cmd.execute(state)?.map(Focus), - Clock(SetBpm(bpm)) => Some(Clock(SetBpm(state.bpm().set(bpm)))), - Clock(SetQuant(quant)) => Some(Clock(SetQuant(state.quant().set(quant)))), - Clock(SetSync(sync)) => Some(Clock(SetSync(state.sync().set(sync)))), + Focus(cmd) => cmd.execute(state)?.map(Focus), + Clock(cmd) => cmd.execute(state)?.map(Clock), + //Clock(SetBpm(bpm)) => Some(Clock(SetBpm(state.bpm().set(bpm)))), + //Clock(SetQuant(quant)) => Some(Clock(SetQuant(state.quant().set(quant)))), + //Clock(SetSync(sync)) => Some(Clock(SetSync(state.sync().set(sync)))), _ => return Ok(None) }) } @@ -78,8 +79,16 @@ where Some(match input.event() { key!(Left) => Focus(FocusCommand::Prev), key!(Right) => Focus(FocusCommand::Next), - key!(Char(' ')) => todo!("toolbar space"), - key!(Shift-Char(' ')) => todo!("toolbar shift-space"), + key!(Char(' ')) => Clock(if state.is_stopped() { + ClockCommand::Play(None) + } else { + ClockCommand::Pause(None) + }), + key!(Shift-Char(' ')) => Clock(if state.is_stopped() { + ClockCommand::Play(Some(0)) + } else { + ClockCommand::Pause(Some(0)) + }), _ => match state.transport_focused().unwrap() { TransportFocus::Bpm => match input.event() { key!(Char(',')) => Clock(SetBpm(state.bpm().get() - 1.0)), @@ -110,8 +119,20 @@ where _ => return None, }, TransportFocus::PlayPause => match input.event() { - key!(Enter) => todo!("transport play toggle"), - key!(Shift-Enter) => todo!("transport shift-play toggle"), + key!(Enter) => Clock( + if state.is_stopped() { + ClockCommand::Play(None) + } else { + ClockCommand::Pause(None) + } + ), + key!(Shift-Enter) => Clock( + if state.is_stopped() { + ClockCommand::Play(Some(0)) + } else { + ClockCommand::Pause(Some(0)) + } + ), _ => return None, }, }