From 1e666da666081bece2c244c2297d08801add3103 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 15 Jul 2023 22:16:00 +0200 Subject: Add cursors and fully functioning chain workflow --- src/sequencer.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index eeb7816..9de08f8 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -316,6 +316,7 @@ handle_channel_selection(void) { redraw_params = true; } else if (key_tap(KEY_LEFT)) { input_handler = handle_pattern_selection; + param_selection_loc = 0; redraw_params = true; } else if (key_tap(KEY_UP)) { if (channel_selection_loc == 0) { @@ -459,6 +460,7 @@ handle_right_col_selection(void) { right_col_selection_loc = R_COL_STOP; } else { input_handler = handle_pattern_selection; + param_selection_loc = 0; redraw_trigs = true; } } else if (key_tap(KEY_UP)) { @@ -528,6 +530,64 @@ handle_right_col_selection(void) { } } +void +handle_pattern_chain(void) { + if (key_tap(KEY_A)) { + input_handler = handle_pattern_selection; + } else if (key_tap(KEY_LEFT)) { + if (param_selection_loc == 8) { + param_selection_loc = 15; + } else if (param_selection_loc > 0) { + param_selection_loc--; + } else if (param_selection_loc == 0) { + param_selection_loc = 7; + } + } else if (key_tap(KEY_RIGHT)) { + if (param_selection_loc < 15 && param_selection_loc != 7) { + param_selection_loc++; + } else if (param_selection_loc == 7) { + param_selection_loc = 0; + } else if (param_selection_loc == 15) { + param_selection_loc = 8; + } + } else if (key_tap(KEY_UP)) { + if (param_selection_loc <= 7) { + param_selection_loc += 8; + } else { + param_selection_loc -= 8; + } + } else if (key_tap(KEY_DOWN)) { + if (param_selection_loc <= 7) { + param_selection_loc += 8; + } else { + param_selection_loc -= 8; + } + } else if (key_tap(KEY_B)) { + if (chain.active[param_selection_loc]) { + // Can't toggle current chain. + if (!play_status || param_selection_loc != chain.current) { + chain.active[param_selection_loc] = 0; + chain.len--; + } + } else { + chain.active[param_selection_loc] = 1; + chain.len++; + } + } else if (key_tap(KEY_L)) { + if (chain.active[param_selection_loc] + && chain.chain[param_selection_loc] > 0 + && (!play_status || param_selection_loc != chain.current)) { + chain.chain[param_selection_loc]--; + } + } else if (key_tap(KEY_R)) { + if (chain.active[param_selection_loc] + && chain.chain[param_selection_loc] < 7 + && (!play_status || param_selection_loc != chain.current)) { + chain.chain[param_selection_loc]++; + } + } +} + void handle_pattern_selection(void) { if (key_tap(KEY_B)) { @@ -541,6 +601,8 @@ handle_pattern_selection(void) { if (key_tap(KEY_A)) { if (key_hold(KEY_SELECT)) { clipboard_paste(); + } else { + input_handler = handle_pattern_chain; } } if (key_tap(KEY_RIGHT)) { -- cgit v1.2.1