From 265dc1324872c353cdbb04d5a59a20501c4b51fb Mon Sep 17 00:00:00 2001 From: unspeaker Date: Wed, 29 May 2024 14:18:05 +0300 Subject: [PATCH] reorder panes, start in sequencer --- src/main.rs | 52 ++++++++++++++++++++++++++++-------------------- src/transport.rs | 24 ++++++++++++++++------ 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/src/main.rs b/src/main.rs index c93f47f9..26f763ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,7 +81,7 @@ fn run_all () -> Result<(), Box> { main_loop( &mut App { exited: false, - mode: Mode::Transport, + mode: Mode::Sequencer, transport: transport::Transport::new()?, mixer: mixer::Mixer::new()?, looper: looper::Looper::new()?, @@ -100,27 +100,28 @@ fn run_all () -> Result<(), Box> { } let (w, h) = render::render_toolbar_vertical(stdout, (offset.0, offset.1 + 1), &actions)?; - offset.0 = offset.0 + w + 1; + offset.0 = offset.0 + 20; transport::render(&mut state.transport, stdout, (offset.0 + 1, 1))?; render::render_box(stdout, Some("Transport"), offset.0, 0, 70, 4, state.mode == Mode::Transport)?; - mixer::render(&mut state.mixer, stdout, (offset.0 + 1, 6))?; - render::render_box(stdout, Some("Mixer"), offset.0, 5, 70, 9, - state.mode == Mode::Mixer)?; + sequencer::render(&mut state.sequencer, stdout, (offset.0 + 1, 3))?; + render::render_box(stdout, Some("Sequencer"), offset.0, 5, 70, 6, + state.mode == Mode::Sequencer)?; - looper::render(&mut state.looper, stdout, (offset.0 + 1, 16))?; - render::render_box(stdout, Some("Looper"), offset.0, 15, 70, 6, - state.mode == Mode::Looper)?; - - sampler::render(&mut state.sampler, stdout, (offset.0 + 1, 20))?; - render::render_box(stdout, Some("Sampler"), offset.0, 22, 70, 4, + sampler::render(&mut state.sampler, stdout, (offset.0 + 1, 10))?; + render::render_box(stdout, Some("Sampler"), offset.0, 12, 70, 4, state.mode == Mode::Sampler)?; - sequencer::render(&mut state.sequencer, stdout, (offset.0 + 1, 25))?; - render::render_box(stdout, Some("Sequencer"), offset.0, 27, 70, 6, - state.mode == Mode::Sequencer)?; + mixer::render(&mut state.mixer, stdout, (offset.0 + 1, 18))?; + render::render_box(stdout, Some("Mixer"), offset.0, 17, 70, 9, + state.mode == Mode::Mixer)?; + + looper::render(&mut state.looper, stdout, (offset.0 + 1, 28))?; + render::render_box(stdout, Some("Looper"), offset.0, 27, 70, 6, + state.mode == Mode::Looper)?; + Ok(()) }, |state, event| { @@ -131,20 +132,27 @@ fn run_all () -> Result<(), Box> { state.exit(); } }, + KeyCode::Char(' ') => { + if key.modifiers == KeyModifiers::SHIFT { + state.transport.play_from_start_or_stop_and_rewind(); + } else { + state.transport.play_or_pause(); + } + }, KeyCode::Tab => match state.mode { - Mode::Transport => state.mode = Mode::Mixer, + Mode::Transport => state.mode = Mode::Sequencer, + Mode::Sequencer => state.mode = Mode::Sampler, + Mode::Sampler => state.mode = Mode::Mixer, Mode::Mixer => state.mode = Mode::Looper, - Mode::Looper => state.mode = Mode::Sampler, - Mode::Sampler => state.mode = Mode::Sequencer, - Mode::Sequencer => state.mode = Mode::Transport, + Mode::Looper => state.mode = Mode::Transport, _ => {} }, KeyCode::BackTab => match state.mode { - Mode::Transport => state.mode = Mode::Sequencer, - Mode::Sequencer => state.mode = Mode::Sampler, - Mode::Sampler => state.mode = Mode::Looper, + Mode::Transport => state.mode = Mode::Looper, + Mode::Sequencer => state.mode = Mode::Transport, + Mode::Sampler => state.mode = Mode::Sequencer, + Mode::Mixer => state.mode = Mode::Sampler, Mode::Looper => state.mode = Mode::Mixer, - Mode::Mixer => state.mode = Mode::Transport, _ => {} }, _ => match state.mode { diff --git a/src/transport.rs b/src/transport.rs index 41203c62..22e141e8 100644 --- a/src/transport.rs +++ b/src/transport.rs @@ -6,19 +6,31 @@ pub use self::jack::*; pub use self::render::*; use crate::prelude::*; -pub const ACTIONS: [(&'static str, &'static str);2] = [ - ("(Shift-)Tab, Arrows ", "Navigate"), - //("Home", "⏹ Stop and rewind"), - ("(Shift-)Space", "⏮ Play/pause"), +pub const ACTIONS: [(&'static str, &'static str);3] = [ + ("(Shift-)Tab", "Switch pane"), + ("Arrows", "Navigate"), + ("(Shift-)Space", "⯈ Play/pause"), ]; pub struct Transport { - exited: bool + exited: bool, + sample_rate: u64, + position: u64, + bpm: f64, } impl Transport { pub fn new () -> Result> { - Ok(Self { exited: false }) + Ok(Self { + exited: false, + sample_rate: 48000, + position: 0, + bpm: 120.0 + }) + } + pub fn play_from_start_or_stop_and_rewind (&mut self) { + } + pub fn play_or_pause (&mut self) { } }