From 20b1b448b7a1c8e22cb2e0f2d6294533f7a220af Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Wed, 12 Jul 2023 18:24:46 +0200 Subject: Add a notification system and use it for save/copy/paste events --- src/clipboard.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/clipboard.c') diff --git a/src/clipboard.c b/src/clipboard.c index eba28ae..edb9b31 100644 --- a/src/clipboard.c +++ b/src/clipboard.c @@ -35,16 +35,20 @@ clipboard_paste(void) { case 0: { pat_dst->ch1.notes[trig_selection_loc] = pat_src->ch1.notes[clipboard.src_trig]; pat_dst->ch1.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED NOTE & PARAMS"); } break; case 1: { pat_dst->ch2.notes[trig_selection_loc] = pat_src->ch1.notes[clipboard.src_trig]; pat_dst->ch2.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED NOTE & PARAMS"); } break; case 2: { pat_dst->ch3.notes[trig_selection_loc] = pat_src->ch1.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 3: { pat_dst->ch4.notes[trig_selection_loc] = pat_src->ch1.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; } } break; @@ -56,16 +60,20 @@ clipboard_paste(void) { pat_dst->ch1.params[trig_selection_loc].env_time = pat_src->ch2.params[clipboard.src_trig].env_time; pat_dst->ch1.params[trig_selection_loc].env_direction = pat_src->ch2.params[clipboard.src_trig].env_direction; pat_dst->ch1.params[trig_selection_loc].duty_cycle = pat_src->ch2.params[clipboard.src_trig].duty_cycle; + send_notif("PASTED NOTE & PARAMS"); } break; case 1: { pat_dst->ch2.notes[trig_selection_loc] = pat_src->ch2.notes[clipboard.src_trig]; pat_dst->ch2.params[trig_selection_loc] = pat_src->ch2.params[clipboard.src_trig]; + send_notif("PASTED NOTE & PARAMS"); } break; case 2: { pat_dst->ch3.notes[trig_selection_loc] = pat_src->ch2.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 3: { pat_dst->ch4.notes[trig_selection_loc] = pat_src->ch2.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; } } break; @@ -73,16 +81,20 @@ clipboard_paste(void) { switch (channel_selection_loc) { case 0: { pat_dst->ch1.notes[trig_selection_loc] = pat_src->ch3.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 1: { pat_dst->ch2.notes[trig_selection_loc] = pat_src->ch3.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 2: { pat_dst->ch3.notes[trig_selection_loc] = pat_src->ch3.notes[clipboard.src_trig]; pat_dst->ch3.params[trig_selection_loc] = pat_src->ch3.params[clipboard.src_trig]; + send_notif("PASTED NOTE & PARAMS"); } break; case 3: { pat_dst->ch4.notes[trig_selection_loc] = pat_src->ch3.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; } } break; @@ -90,16 +102,20 @@ clipboard_paste(void) { switch (channel_selection_loc) { case 0: { pat_dst->ch1.notes[trig_selection_loc] = pat_src->ch4.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 1: { pat_dst->ch2.notes[trig_selection_loc] = pat_src->ch4.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 2: { pat_dst->ch3.notes[trig_selection_loc] = pat_src->ch4.notes[clipboard.src_trig]; + send_notif("PASTED NOTE"); } break; case 3: { pat_dst->ch4.notes[trig_selection_loc] = pat_src->ch4.notes[clipboard.src_trig]; pat_dst->ch4.params[trig_selection_loc] = pat_src->ch4.params[clipboard.src_trig]; + send_notif("PASTED NOTE & PARAMS"); } break; } } break; @@ -110,9 +126,11 @@ clipboard_paste(void) { switch (channel_selection_loc) { case 0: { pat_dst->ch1.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); } break; case 1: { pat_dst->ch2.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); } break; } } @@ -123,40 +141,50 @@ clipboard_paste(void) { pat_dst->ch1.params[trig_selection_loc].env_time = pat_src->ch2.params[clipboard.src_trig].env_time; pat_dst->ch1.params[trig_selection_loc].env_direction = pat_src->ch2.params[clipboard.src_trig].env_direction; pat_dst->ch1.params[trig_selection_loc].duty_cycle = pat_src->ch2.params[clipboard.src_trig].duty_cycle; + send_notif("PASTED PARAMS"); } break; case 1: { pat_dst->ch2.params[trig_selection_loc] = pat_src->ch2.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); } break; } } if (clipboard.type == CLIP_PARAM_CH3 && channel_selection_loc == clipboard.src_chan) { pat_dst->ch3.params[trig_selection_loc] = pat_src->ch3.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); } if (clipboard.type == CLIP_PARAM_CH4 && channel_selection_loc == clipboard.src_chan) { pat_dst->ch4.params[trig_selection_loc] = pat_src->ch4.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); } draw_triggers(); draw_parameters(); } else if (input_handler == handle_param_selection_sq1 && clipboard.type == CLIP_PARAM_CH1) { pat_dst->ch1.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_param_selection_sq1 && clipboard.type == CLIP_PARAM_CH2) { pat_dst->ch1.params[trig_selection_loc].env_volume = pat_src->ch2.params[clipboard.src_trig].env_volume; pat_dst->ch1.params[trig_selection_loc].env_time = pat_src->ch2.params[clipboard.src_trig].env_time; pat_dst->ch1.params[trig_selection_loc].env_direction = pat_src->ch2.params[clipboard.src_trig].env_direction; pat_dst->ch1.params[trig_selection_loc].duty_cycle = pat_src->ch2.params[clipboard.src_trig].duty_cycle; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_param_selection_sq2 && clipboard.type == CLIP_PARAM_CH2) { pat_dst->ch2.params[trig_selection_loc] = pat_src->ch2.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_param_selection_sq2 && clipboard.type == CLIP_PARAM_CH1) { pat_dst->ch2.params[trig_selection_loc] = pat_src->ch1.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_param_selection_wave && clipboard.type == CLIP_PARAM_CH3) { pat_dst->ch3.params[trig_selection_loc] = pat_src->ch3.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_param_selection_noise && clipboard.type == CLIP_PARAM_CH4) { pat_dst->ch4.params[trig_selection_loc] = pat_src->ch4.params[clipboard.src_trig]; + send_notif("PASTED PARAMS"); draw_parameters(); } else if (input_handler == handle_channel_selection && clipboard.type == CLIP_CHANNEL) { // Copy notes from a different channel OR notes and parameters @@ -168,6 +196,7 @@ clipboard_paste(void) { case 2: { pat_dst->ch3 = pat_src->ch3; } break; case 3: { pat_dst->ch4 = pat_src->ch4; } break; } + send_notif("PASTED NOTES & PARAMS"); } else { switch (clipboard.src_chan) { case 0: { @@ -177,22 +206,26 @@ clipboard_paste(void) { pat_dst->ch1.notes[i] = pat_src->ch1.notes[i]; pat_dst->ch1.params[i] = pat_src->ch1.params[i]; } + send_notif("PASTED NOTES & PARAMS"); } break; case 1: { for (size_t i = 0; i < 16; i++) { pat_dst->ch2.notes[i] = pat_src->ch1.notes[i]; pat_dst->ch2.params[i] = pat_src->ch1.params[i]; } + send_notif("PASTED NOTES & PARAMS"); } break; case 2: { for (size_t i = 0; i < 16; i++) { pat_dst->ch3.notes[i] = pat_src->ch1.notes[i]; } + send_notif("PASTED NOTES"); } break; case 3: { for (size_t i = 0; i < 16; i++) { pat_dst->ch4.notes[i] = pat_src->ch1.notes[i]; } + send_notif("PASTED NOTES"); } break; } } break; @@ -206,22 +239,26 @@ clipboard_paste(void) { pat_dst->ch1.params[i].env_direction = pat_src->ch2.params[i].env_direction; pat_dst->ch1.params[i].duty_cycle = pat_src->ch2.params[i].duty_cycle; } + send_notif("PASTED NOTES & PARAMS"); } break; case 1: { for (size_t i = 0; i < 16; i++) { pat_dst->ch2.notes[i] = pat_src->ch2.notes[i]; pat_dst->ch2.params[i] = pat_src->ch2.params[i]; } + send_notif("PASTED NOTES & PARAMS"); } break; case 2: { for (size_t i = 0; i < 16; i++) { pat_dst->ch3.notes[i] = pat_src->ch2.notes[i]; } + send_notif("PASTED NOTES"); } break; case 3: { for (size_t i = 0; i < 16; i++) { pat_dst->ch4.notes[i] = pat_src->ch2.notes[i]; } + send_notif("PASTED NOTES"); } break; } } break; @@ -231,22 +268,26 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch1.notes[i] = pat_src->ch3.notes[i]; } + send_notif("PASTED NOTES"); } break; case 1: { for (size_t i = 0; i < 16; i++) { pat_dst->ch2.notes[i] = pat_src->ch3.notes[i]; } + send_notif("PASTED NOTES"); } break; case 2: { for (size_t i = 0; i < 16; i++) { pat_dst->ch3.notes[i] = pat_src->ch3.notes[i]; pat_dst->ch3.params[i] = pat_src->ch3.params[i]; } + send_notif("PASTED NOTES & PARAMS"); } break; case 3: { for (size_t i = 0; i < 16; i++) { pat_dst->ch4.notes[i] = pat_src->ch3.notes[i]; } + send_notif("PASTED NOTES"); } break; } } break; @@ -256,22 +297,26 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch1.notes[i] = pat_src->ch4.notes[i]; } + send_notif("PASTED NOTES"); } break; case 1: { for (size_t i = 0; i < 16; i++) { pat_dst->ch2.notes[i] = pat_src->ch4.notes[i]; } + send_notif("PASTED NOTES"); } break; case 2: { for (size_t i = 0; i < 16; i++) { pat_dst->ch3.notes[i] = pat_src->ch4.notes[i]; } + send_notif("PASTED NOTES"); } break; case 3: { for (size_t i = 0; i < 16; i++) { pat_dst->ch4.notes[i] = pat_src->ch4.notes[i]; pat_dst->ch4.params[i] = pat_src->ch4.params[i]; } + send_notif("PASTED NOTES & PARAMS"); } break; } } break; @@ -290,6 +335,7 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch1.params[i] = pat_src->ch1.params[clipboard.src_trig]; } + send_notif("PASTED PARAMS"); } if (clipboard.src_chan == 1) { ch1_params.env_volume = pat_src->ch2.params[clipboard.src_trig].env_volume; @@ -302,6 +348,7 @@ clipboard_paste(void) { pat_dst->ch1.params[i].env_direction = pat_src->ch2.params[clipboard.src_trig].env_direction; pat_dst->ch1.params[i].duty_cycle = pat_src->ch2.params[clipboard.src_trig].duty_cycle; } + send_notif("PASTED PARAMS"); } } } break; @@ -314,12 +361,14 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch2.params[i] = pat_src->ch1.params[clipboard.src_trig]; } + send_notif("PASTED PARAMS"); } if (clipboard.src_chan == 1) { ch2_params = pat_src->ch2.params[clipboard.src_trig]; for (size_t i = 0; i < 16; i++) { pat_dst->ch2.params[i] = pat_src->ch2.params[clipboard.src_trig]; } + send_notif("PASTED PARAMS"); } } } break; @@ -332,6 +381,7 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch3.params[i] = pat_src->ch3.params[clipboard.src_trig]; } + send_notif("PASTED PARAMS"); } } break; case 3: { @@ -343,6 +393,7 @@ clipboard_paste(void) { for (size_t i = 0; i < 16; i++) { pat_dst->ch4.params[i] = pat_src->ch4.params[clipboard.src_trig]; } + send_notif("PASTED PARAMS"); } } break; } @@ -352,10 +403,13 @@ clipboard_paste(void) { *pat_dst = *pat_src; draw_channels(); draw_triggers(); + send_notif("PASTED PATTERN"); } } } +void send_notif(char *msg); + void clipboard_copy(void) { if (input_handler == handle_trigger_selection) { @@ -363,33 +417,40 @@ clipboard_copy(void) { clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; clipboard.src_trig = trig_selection_loc; + send_notif("COPIED TRIGGER"); } else if (input_handler == handle_param_selection_sq1) { clipboard.type = CLIP_PARAM_CH1; clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; clipboard.src_trig = trig_selection_loc; + send_notif("COPIED CH1 PARAMS"); } else if (input_handler == handle_param_selection_sq2) { clipboard.type = CLIP_PARAM_CH2; clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; clipboard.src_trig = trig_selection_loc; + send_notif("COPIED CH2 PARAMS"); } else if (input_handler == handle_param_selection_wave) { clipboard.type = CLIP_PARAM_CH3; clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; clipboard.src_trig = trig_selection_loc; + send_notif("COPIED CH3 PARAMS"); } else if (input_handler == handle_param_selection_noise) { clipboard.type = CLIP_PARAM_CH4; clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; clipboard.src_trig = trig_selection_loc; + send_notif("COPIED CH4 PARAMS"); } else if (input_handler == handle_channel_selection) { clipboard.type = CLIP_CHANNEL; clipboard.src_pat = pattern_selection_loc; clipboard.src_chan = channel_selection_loc; + send_notif("COPIED CHANNEL"); } else if (input_handler == handle_pattern_selection) { clipboard.type = CLIP_PATTERN; clipboard.src_pat = pattern_selection_loc; + send_notif("COPIED PATTERN"); } } -- cgit v1.2.1