Subversion Repositories svn.mios32

Compare Revisions

Ignore whitespace Rev 2627 → Rev 2628

/trunk/apps/sequencers/midibox_seq_v4/CHANGELOG.txt
6,6 → 6,25
-> see bottom of this document
 
 
MIDIboxSEQ V4.096
~~~~~~~~~~~~~~~~~
 
o Improved selection handling for midiphy frontpanel:
- if you press&hold the Bookm/Step/Track/Param/Trigger/Instr/Mute or Phrase button, and then
make a selection with SEL or GP buttons, the selection button will jump back to the previous
function
- if you press&release these buttons without a selection, the function stays active.
 
Example: let's say the track selection is active.
Press&Hold Param button, change to a new parameter layer, then release the Param button
-> the selection buttons will jump back to track selection.
 
If it's desired to permanently control the parameter layer with the selection buttons, just
press&release the Param button.
 
o New option 13/32 allows to change the steps of the current selected view only
 
 
MIDIboxSEQ V4.095
~~~~~~~~~~~~~~~~~
 
/trunk/apps/sequencers/midibox_seq_v4/core/seq_ui_opt.c
53,27 → 53,28
#define ITEM_PASTE_CLR_ALL 9
#define ITEM_RESTORE_TRACK_SELECTIONS 10
#define ITEM_MODIFY_PATTERN_BANKS 11
#define ITEM_PRINT_AND_MODIFY_WITHOUT_GATES 12
#define ITEM_PRINT_TRANSPOSED_NOTES 13
#define ITEM_METRONOME 14
#define ITEM_SHADOW_OUT 15
#define ITEM_MIDI_REMOTE 16
#define ITEM_TRACK_CC 17
#define ITEM_RUNTIME_STATUS_OPTIMIZATION 18
#define ITEM_LIVE_LAYER_MUTE 19
#define ITEM_INIT_WITH_TRIGGERS 20
#define ITEM_INIT_CC 21
#define ITEM_DRUM_CC 22
#define ITEM_TPD_MODE 23
#define ITEM_SWAP_GP_LED_COLOURS 24
#define ITEM_INVERT_MUTE_LEDS 25
#define ITEM_BLM_ALWAYS_USE_FTS 26
#define ITEM_BLM_FADERS 27
#define ITEM_MIXER_CC1234 28
#define ITEM_MENU_SHORTCUTS 29
#define ITEM_SCREEN_SAVER 30
#define ITEM_ALL_FOR_STEP_VIEW_ONLY 12
#define ITEM_PRINT_AND_MODIFY_WITHOUT_GATES 13
#define ITEM_PRINT_TRANSPOSED_NOTES 14
#define ITEM_METRONOME 15
#define ITEM_SHADOW_OUT 16
#define ITEM_MIDI_REMOTE 17
#define ITEM_TRACK_CC 18
#define ITEM_RUNTIME_STATUS_OPTIMIZATION 19
#define ITEM_LIVE_LAYER_MUTE 20
#define ITEM_INIT_WITH_TRIGGERS 21
#define ITEM_INIT_CC 22
#define ITEM_DRUM_CC 23
#define ITEM_TPD_MODE 24
#define ITEM_SWAP_GP_LED_COLOURS 25
#define ITEM_INVERT_MUTE_LEDS 26
#define ITEM_BLM_ALWAYS_USE_FTS 27
#define ITEM_BLM_FADERS 28
#define ITEM_MIXER_CC1234 29
#define ITEM_MENU_SHORTCUTS 30
#define ITEM_SCREEN_SAVER 31
 
#define NUM_OF_ITEMS 31
#define NUM_OF_ITEMS 32
 
 
static const char *item_text[NUM_OF_ITEMS][2] = {
139,6 → 140,11
},
 
{//<-------------------------------------->
"ALL Function works on Step View only",
NULL, // enabled/disabled
},
 
{//<-------------------------------------->
"Print/Modify Steps w/o changing Gates",
NULL, // enabled/disabled
},
400,6 → 406,15
return 1;
} break;
 
case ITEM_ALL_FOR_STEP_VIEW_ONLY: {
if( incrementer )
seq_ui_options.ALL_FOR_STEP_VIEW_ONLY = (incrementer > 0) ? 1 : 0;
else
seq_ui_options.ALL_FOR_STEP_VIEW_ONLY ^= 1;
ui_store_file_required = 1;
return 1;
} break;
 
case ITEM_PRINT_AND_MODIFY_WITHOUT_GATES: {
if( incrementer )
seq_ui_options.PRINT_AND_MODIFY_WITHOUT_GATES = (incrementer > 0) ? 1 : 0;
1092,6 → 1107,11
} break;
 
///////////////////////////////////////////////////////////////////////////
case ITEM_ALL_FOR_STEP_VIEW_ONLY: {
enabled_value = seq_ui_options.ALL_FOR_STEP_VIEW_ONLY;
} break;
 
///////////////////////////////////////////////////////////////////////////
case ITEM_PRINT_AND_MODIFY_WITHOUT_GATES: {
enabled_value = seq_ui_options.PRINT_AND_MODIFY_WITHOUT_GATES;
} break;
/trunk/apps/sequencers/midibox_seq_v4/core/seq_file_gc.c
394,6 → 394,10
#ifndef MBSEQV4L
seq_ui_options.INVERT_MUTE_LEDS = value;
#endif
} else if( strcmp(parameter, "UiAllForStepViewOnly") == 0 ) {
#ifndef MBSEQV4L
seq_ui_options.ALL_FOR_STEP_VIEW_ONLY = value;
#endif
} else if( strcmp(parameter, "RemoteMode") == 0 ) {
seq_midi_sysex_remote_mode = (value > 2) ? 0 : value;
} else if( strcmp(parameter, "RemotePort") == 0 ) {
737,6 → 741,11
FLUSH_BUFFER;
#endif
 
#ifndef MBSEQV4L
sprintf(line_buffer, "UiAllForStepViewOnly %d\n", seq_ui_options.ALL_FOR_STEP_VIEW_ONLY);
FLUSH_BUFFER;
#endif
 
sprintf(line_buffer, "RemoteMode %d\n", (u8)seq_midi_sysex_remote_mode);
FLUSH_BUFFER;
 
/trunk/apps/sequencers/midibox_seq_v4/core/seq_ui.c
529,6 → 529,9
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_UI_Button_GP(s32 depressed, u32 gp)
{
if( !depressed ) // selection button has been pressed while Bookm/Step/Track/Param/Trigger/Instr/Mute/Phrase button pressed: don't take over new sel view anymore
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 0;
 
// in MENU page: overrule GP buttons as long as MENU button is pressed/active
if( seq_ui_button_state.MENU_PRESSED || seq_hwcfg_blm.gp_always_select_menu_page ) {
if( depressed ) return -1;
1306,8 → 1309,15
 
static s32 SEQ_UI_Button_Bookmark(s32 depressed)
{
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_BOOKMARKS;
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.bookmark ) {
1430,8 → 1440,15
 
static s32 SEQ_UI_Button_Mute(s32 depressed)
{
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_MUTE;
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
seq_ui_button_state.MUTE_PRESSED = depressed ? 0 : 1;
1507,8 → 1524,15
 
static s32 SEQ_UI_Button_Phrase(s32 depressed)
{
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_PHRASE;
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
seq_ui_button_state.PHRASE_PRESSED = depressed ? 0 : 1;
1593,10 → 1617,19
{
// static seq_ui_page_t prev_page = SEQ_UI_PAGE_NONE;
// also used by seq_ui_stepsel
 
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_STEPS;
if( ui_page == SEQ_UI_PAGE_MUTE || SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG ) SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
 
if( ui_page == SEQ_UI_PAGE_MUTE || SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG )
SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.step_view ) {
1669,8 → 1702,15
 
static s32 SEQ_UI_Button_TrackSel(s32 depressed)
{
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_TRACKS;
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.track_sel ) {
1774,8 → 1814,11
u8 visible_track = SEQ_UI_VisibleTrackGet();
 
if( selbuttons_available ) {
if( !depressed ) // selection button has been pressed while Bookm/Step/Track/Param/Trigger/Instr/Mute/Phrase button pressed: don't take over new sel view anymore
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 0;
 
// for selection buttons of Antilog PCB
switch( seq_ui_sel_view ) {
switch( seq_ui_sel_view ) {
case SEQ_UI_SEL_VIEW_BOOKMARKS:
SEQ_UI_BOOKMARKS_Button_Handler((seq_ui_button_t)sel_button, depressed);
break;
1831,9 → 1874,9
if( depressed )
return 0; // no error
 
if( seq_ui_button_state.PHRASE_PRESSED || (ui_page == SEQ_UI_PAGE_SONG && ui_selected_item >= 1) ) { // TODO: has to be aligned with #define in seq_ui_song.c
SEQ_UI_SONG_Button_Handler((seq_ui_button_t)sel_button, depressed);
} else {
//if( seq_ui_button_state.PHRASE_PRESSED || (ui_page == SEQ_UI_PAGE_SONG && ui_selected_item >= 1) ) { // TODO: has to be aligned with #define in seq_ui_song.c
// SEQ_UI_SONG_Button_Handler((seq_ui_button_t)sel_button, depressed);
//} else {
ui_selected_phrase = sel_button;
ui_song_edit_pos = ui_selected_phrase << 3;
 
1841,7 → 1884,7
SEQ_SONG_PosSet(ui_song_edit_pos);
SEQ_SONG_FetchPos(0, 0);
ui_song_edit_pos = SEQ_SONG_PosGet();
}
//}
} break;
}
} else {
1867,9 → 1910,18
// static seq_ui_page_t prev_page = SEQ_UI_PAGE_NONE;
// also used by seq_ui_parsel.c
 
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_PAR;
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG ) SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
 
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG )
SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.par_layer ) {
1985,9 → 2037,18
// static seq_ui_page_t prev_page = SEQ_UI_PAGE_NONE;
// also used by seq_ui_trgsel.c
 
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_TRG;
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG ) SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
 
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG )
SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.trg_layer ) {
2092,9 → 2153,18
// static seq_ui_page_t prev_page = SEQ_UI_PAGE_NONE;
// also used by seq_ui_insel.c
 
static seq_ui_sel_view_t prev_sel_view = SEQ_UI_SEL_VIEW_NONE;
 
if( !depressed ) {
prev_sel_view = seq_ui_sel_view;
seq_ui_sel_view = SEQ_UI_SEL_VIEW_INS;
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG ) SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
seq_ui_button_state.TAKE_OVER_SEL_VIEW = 1;
 
if( ui_page == SEQ_UI_PAGE_MUTE || ui_page == SEQ_UI_PAGE_PATTERN || ui_page == SEQ_UI_PAGE_SONG )
SEQ_UI_PageSet(SEQ_UI_PAGE_EDIT); // this selection only makes sense in EDIT page
} else {
if( !seq_ui_button_state.TAKE_OVER_SEL_VIEW )
seq_ui_sel_view = prev_sel_view;
}
 
if( seq_hwcfg_button_beh.ins_sel ) {
/trunk/apps/sequencers/midibox_seq_v4/core/seq_ui.h
80,6 → 80,7
u32 UP:1;
u32 DOWN:1;
u32 ENC_BTN_FWD_PRESSED:1;
u32 TAKE_OVER_SEL_VIEW:1;
};
} seq_ui_button_state_t;
 
203,6 → 204,7
u16 SWAP_SELECT_LED_COLOURS:1;
u16 GP_LED_DONT_XOR_POS:1;
u16 INVERT_MUTE_LEDS:1;
u16 ALL_FOR_STEP_VIEW_ONLY:1;
};
} seq_ui_options_t;
 
/trunk/apps/sequencers/midibox_seq_v4/core/seq_ui_edit.c
470,9 → 470,11
if( SEQ_UI_IsSelectedTrack(track) ) {
u16 num_steps = SEQ_PAR_NumStepsGet(track);
u16 trg_step = (changed_step & ~(num_steps-1));
u16 first_step = seq_ui_options.ALL_FOR_STEP_VIEW_ONLY ? (ui_selected_step_view * 16) : 0;
u16 last_step = seq_ui_options.ALL_FOR_STEP_VIEW_ONLY ? (first_step + 15) : (num_steps-1);
 
u16 par_step;
for(par_step=0; par_step<num_steps; ++par_step, ++trg_step) {
for(par_step=first_step; (par_step <= last_step) && (par_step < num_steps); ++par_step, ++trg_step) {
if( !(seq_ui_button_state.CHANGE_ALL_STEPS || seq_ui_button_state.CHANGE_ALL_STEPS_SAME_VALUE) || (!edit_ramp && par_step == changed_step) || (selected_steps & (1 << (par_step % 16))) ) {
change_gate = trg_step == changed_step;
 
/trunk/apps/sequencers/midibox_seq_v4/mios32/mios32_config.h
20,9 → 20,9
#define MIOS32_LCD_BOOT_MSG_DELAY 0 // we delay the boot and print a message inside the app
// <---------------------->
#ifdef MBSEQV4P
#define MIOS32_LCD_BOOT_MSG_LINE1 "MIDIbox SEQ V4+.095"
#define MIOS32_LCD_BOOT_MSG_LINE1 "MIDIbox SEQ V4+.096"
#else
#define MIOS32_LCD_BOOT_MSG_LINE1 "MIDIbox SEQ V4.095"
#define MIOS32_LCD_BOOT_MSG_LINE1 "MIDIbox SEQ V4.096"
#endif
#define MIOS32_LCD_BOOT_MSG_LINE2 "(C) 2018 T. Klose"