From 912c37a54c13aca6bbdf290984f7eeccad4ccc0b Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 4 Apr 2023 11:08:58 +0200 Subject: Add UI for bank selection --- src/sequencer.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 8 deletions(-) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index 587a720..c4a1d2a 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -6,7 +6,7 @@ // - Copy paste trigs/notes/params // - Different banks for storing patterns // - Finish noise channel (parameter editing) - +void set_time(int bpm); // // Color indexes. @@ -69,6 +69,9 @@ #define STOP_START_Y (TRIG_START_Y + 14) #define PLAY_STOP_H (10) +#define BANK_START_X (R_SIDEBAR_X + 5) +#define BANK_START_Y (PAT_START_Y) + #define SEQ_N_CHANNELS 4 // @@ -207,11 +210,16 @@ int right_col_selection_loc = 0; int play_status = 0; static int current_pattern = 0; static int next_pattern = 0; +static int current_bank = 0; enum RIGHT_COL_LOC { R_COL_BPM = 0, R_COL_STOP = 1, R_COL_PLAY = 2, + R_COL_BANK_D = 3, + R_COL_BANK_C = 4, + R_COL_BANK_B = 5, + R_COL_BANK_A = 6, }; typedef struct TriggerNote { @@ -426,7 +434,7 @@ typedef struct Pattern { ChannelSquare ch2; ChannelWave ch3; ChannelNoise ch4; - u8 bpm; + int bpm; u8 bank; } Pattern; @@ -562,6 +570,26 @@ draw_right_col_cursor(u8 clr) { x1 = x0 + R_COL_W; y = PLAY_START_Y + PLAY_STOP_H + 2; } break; + case R_COL_BANK_A: { + x0 = BANK_START_X; + x1 = x0 + PAT_W; + y = BANK_START_Y + PAT_H + 2; + } break; + case R_COL_BANK_B: { + x0 = BANK_START_X; + x1 = x0 + PAT_W; + y = BANK_START_Y + PAT_H + 2 + 1 * PAT_OFFSET_Y; + } break; + case R_COL_BANK_C: { + x0 = BANK_START_X; + x1 = x0 + PAT_W; + y = BANK_START_Y + PAT_H + 2 + 2 * PAT_OFFSET_Y; + } break; + case R_COL_BANK_D: { + x0 = BANK_START_X; + x1 = x0 + PAT_W; + y = BANK_START_Y + PAT_H + 2 + 3 * PAT_OFFSET_Y; + } break; } draw_line(x0, y, x1, y, clr); } @@ -578,16 +606,15 @@ draw_current_step(u8 col) { void draw_bank_buttons() { - size_t x = R_SIDEBAR_X + 5; - size_t y = PAT_START_Y; + size_t x = BANK_START_X; + size_t y = BANK_START_Y; txt_drawf_small("BANK", x - 2, y - 10, 4, COL_FG); char bank_names[] = { 'A', 'B', 'C', 'D', }; for (int i = 0; i < 4; i++) { int color = COL_GREY; - if (i == current_pattern) { - // TODO: current bank. + if (i == current_bank) { color = COL_FG; } draw_filled_rect(x, y, x + PAT_W, y + PAT_H, COL_BG); @@ -1789,13 +1816,13 @@ handle_right_col_selection(void) { draw_note(trig->note, COL_NOTE_PRESSED); draw_parameters(); } else if (key_tap(KEY_UP)) { - if (right_col_selection_loc < 2) { + if (right_col_selection_loc < R_COL_BANK_A) { draw_right_col_cursor(COL_BG); right_col_selection_loc++; draw_right_col_cursor(COL_CURSOR); } } else if (key_tap(KEY_DOWN)) { - if (right_col_selection_loc > 0) { + if (right_col_selection_loc > R_COL_BPM) { draw_right_col_cursor(COL_BG); right_col_selection_loc--; draw_right_col_cursor(COL_CURSOR); @@ -1834,6 +1861,25 @@ handle_right_col_selection(void) { case R_COL_PLAY: { pause_playing(); } break; + // TODO: stop playing + // TODO: reset cursors if applicable + // TODO: load bank from sram + case R_COL_BANK_A: { + current_bank = 0; + draw_bank_buttons(); + } break; + case R_COL_BANK_B: { + current_bank = 1; + draw_bank_buttons(); + } break; + case R_COL_BANK_C: { + current_bank = 2; + draw_bank_buttons(); + } break; + case R_COL_BANK_D: { + current_bank = 3; + draw_bank_buttons(); + } break; } } } -- cgit v1.2.1