GUI: simplify keybind load/save code

as of now action definitions are in guiConst.cpp.
This commit is contained in:
tildearrow 2022-04-06 01:52:58 -05:00
parent 7f51f0f246
commit 1054f92029
5 changed files with 247 additions and 565 deletions

View file

@ -138,212 +138,217 @@ const char* resampleStrats[]={
"best possible"
};
const char* guiActions[GUI_ACTION_MAX][2]={
{"GLOBAL_MIN", "---Global"},
{"OPEN", "Open file"},
{"OPEN_BACKUP", "Restore backup"},
{"SAVE", "Save file"},
{"SAVE_AS", "Save as"},
{"UNDO", "Undo"},
{"REDO", "Redo"},
{"PLAY_TOGGLE", "Play/Stop (toggle)"},
{"PLAY", "Play"},
{"STOP", "Stop"},
{"PLAY_REPEAT", "Play (repeat pattern)"},
{"PLAY_CURSOR", "Play from cursor"},
{"STEP_ONE", "Step row"},
{"OCTAVE_UP", "Octave up"},
{"OCTAVE_DOWN", "Octave down"},
{"INS_UP", "Previous instrument"},
{"INS_DOWN", "Next instrument"},
{"STEP_UP", "Increase edit step"},
{"STEP_DOWN", "Decrease edit step"},
{"TOGGLE_EDIT", "Toggle edit mode"},
{"METRONOME", "Metronome"},
{"REPEAT_PATTERN", "Toggle repeat pattern"},
{"FOLLOW_ORDERS", "Follow orders"},
{"FOLLOW_PATTERN", "Follow pattern"},
{"PANIC", "Panic"},
#define D FurnaceGUIActionDef
#define NOT_AN_ACTION -1
{"WINDOW_EDIT_CONTROLS", "Edit Controls"},
{"WINDOW_ORDERS", "Orders"},
{"WINDOW_INS_LIST", "Instrument List"},
{"WINDOW_INS_EDIT", "Instrument Editor"},
{"WINDOW_SONG_INFO", "Song Information"},
{"WINDOW_PATTERN", "Pattern"},
{"WINDOW_WAVE_LIST", "Wavetable List"},
{"WINDOW_WAVE_EDIT", "Wavetable Editor"},
{"WINDOW_SAMPLE_LIST", "Sample List"},
{"WINDOW_SAMPLE_EDIT", "Sample Editor"},
{"WINDOW_ABOUT", "About"},
{"WINDOW_SETTINGS", "Settings"},
{"WINDOW_MIXER", "Mixer"},
{"WINDOW_DEBUG", "Debug Menu"},
{"WINDOW_OSCILLOSCOPE", "Oscilloscope"},
{"WINDOW_VOL_METER", "Volume Meter"},
{"WINDOW_STATS", "Statistics"},
{"WINDOW_COMPAT_FLAGS", "Compatibility Flags"},
{"WINDOW_PIANO", "Piano"},
{"WINDOW_NOTES", "Song Comments"},
{"WINDOW_CHANNELS", "Channels"},
{"WINDOW_REGISTER_VIEW", "Register View"},
// format: ("ACTION_ENUM", "Action name", defaultBind)
const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={
D("GLOBAL_MIN", "---Global", NOT_AN_ACTION),
D("OPEN", "Open file", FURKMOD_CMD|SDLK_o),
D("OPEN_BACKUP", "Restore backup", 0),
D("SAVE", "Save file", FURKMOD_CMD|SDLK_s),
D("SAVE_AS", "Save as", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_s),
D("UNDO", "Undo", FURKMOD_CMD|SDLK_z),
D("REDO", "Redo", FURKMOD_CMD|SDLK_y),
D("PLAY_TOGGLE", "Play/Stop (toggle)", SDLK_RETURN),
D("PLAY", "Play", 0),
D("STOP", "Stop", 0),
D("PLAY_REPEAT", "Play (repeat pattern)", 0),
D("PLAY_CURSOR", "Play from cursor", FURKMOD_SHIFT|SDLK_RETURN),
D("STEP_ONE", "Step row", FURKMOD_CMD|SDLK_RETURN),
D("OCTAVE_UP", "Octave up", SDLK_KP_MULTIPLY),
D("OCTAVE_DOWN", "Octave down", SDLK_KP_DIVIDE),
D("INS_UP", "Previous instrument", FURKMOD_SHIFT|SDLK_KP_DIVIDE),
D("INS_DOWN", "Next instrument", FURKMOD_SHIFT|SDLK_KP_MULTIPLY),
D("STEP_UP", "Increase edit step", FURKMOD_CMD|SDLK_KP_MULTIPLY),
D("STEP_DOWN", "Decrease edit step", FURKMOD_CMD|SDLK_KP_DIVIDE),
D("TOGGLE_EDIT", "Toggle edit mode", SDLK_SPACE),
D("METRONOME", "Metronome", FURKMOD_CMD|SDLK_m),
D("REPEAT_PATTERN", "Toggle repeat pattern", 0),
D("FOLLOW_ORDERS", "Follow orders", 0),
D("FOLLOW_PATTERN", "Follow pattern", 0),
D("PANIC", "Panic", SDLK_F12),
{"COLLAPSE_WINDOW", "Collapse/expand current window"},
{"CLOSE_WINDOW", "Close current window"},
{"GLOBAL_MAX", ""},
D("WINDOW_EDIT_CONTROLS", "Edit Controls", 0),
D("WINDOW_ORDERS", "Orders", 0),
D("WINDOW_INS_LIST", "Instrument List", 0),
D("WINDOW_INS_EDIT", "Instrument Editor", 0),
D("WINDOW_SONG_INFO", "Song Information", 0),
D("WINDOW_PATTERN", "Pattern", 0),
D("WINDOW_WAVE_LIST", "Wavetable List", 0),
D("WINDOW_WAVE_EDIT", "Wavetable Editor", 0),
D("WINDOW_SAMPLE_LIST", "Sample List", 0),
D("WINDOW_SAMPLE_EDIT", "Sample Editor", 0),
D("WINDOW_ABOUT", "About", 0),
D("WINDOW_SETTINGS", "Settings", 0),
D("WINDOW_MIXER", "Mixer", 0),
D("WINDOW_DEBUG", "Debug Menu", 0),
D("WINDOW_OSCILLOSCOPE", "Oscilloscope", 0),
D("WINDOW_VOL_METER", "Volume Meter", 0),
D("WINDOW_STATS", "Statistics", 0),
D("WINDOW_COMPAT_FLAGS", "Compatibility Flags", 0),
D("WINDOW_PIANO", "Piano", 0),
D("WINDOW_NOTES", "Song Comments", 0),
D("WINDOW_CHANNELS", "Channels", 0),
D("WINDOW_REGISTER_VIEW", "Register View", 0),
{"PAT_MIN", "---Pattern"},
{"PAT_NOTE_UP", "Transpose (+1)"},
{"PAT_NOTE_DOWN", "Transpose (-1)"},
{"PAT_OCTAVE_UP", "Transpose (+1 octave)"},
{"PAT_OCTAVE_DOWN", "Transpose (-1 octave)"},
{"PAT_SELECT_ALL", "Select all"},
{"PAT_CUT", "Cut"},
{"PAT_COPY", "Copy"},
{"PAT_PASTE", "Paste"},
{"PAT_PASTE_MIX", "Paste Mix (foreground)"},
{"PAT_PASTE_MIX_BG", "Paste Mix (background)"},
{"PAT_PASTE_FLOOD", "Paste Flood"},
{"PAT_PASTE_OVERFLOW", "Paste Overflow"},
{"PAT_CURSOR_UP", "Move cursor up"},
{"PAT_CURSOR_DOWN", "Move cursor down"},
{"PAT_CURSOR_LEFT", "Move cursor left"},
{"PAT_CURSOR_RIGHT", "Move cursor right"},
{"PAT_CURSOR_UP_ONE", "Move cursor up by one (override Edit Step)"},
{"PAT_CURSOR_DOWN_ONE", "Move cursor down by one (override Edit Step)"},
{"PAT_CURSOR_LEFT_CHANNEL", "Move cursor to previous channel"},
{"PAT_CURSOR_RIGHT_CHANNEL", "Move cursor to next channel"},
{"PAT_CURSOR_NEXT_CHANNEL", "Move cursor to previous channel (overflow)"},
{"PAT_CURSOR_PREVIOUS_CHANNEL", "Move cursor to next channel (overflow)"},
{"PAT_CURSOR_BEGIN", "Move cursor to beginning of pattern"},
{"PAT_CURSOR_END", "Move cursor to end of pattern"},
{"PAT_CURSOR_UP_COARSE", "Move cursor up (coarse)"},
{"PAT_CURSOR_DOWN_COARSE", "Move cursor down (coarse)"},
{"PAT_SELECTION_UP", "Expand selection upwards"},
{"PAT_SELECTION_DOWN", "Expand selection downwards"},
{"PAT_SELECTION_LEFT", "Expand selection to the left"},
{"PAT_SELECTION_RIGHT", "Expand selection to the right"},
{"PAT_SELECTION_UP_ONE", "Expand selection upwards by one (override Edit Step)"},
{"PAT_SELECTION_DOWN_ONE", "Expand selection downwards by one (override Edit Step)"},
{"PAT_SELECTION_BEGIN", "Expand selection to beginning of pattern"},
{"PAT_SELECTION_END", "Expand selection to end of pattern"},
{"PAT_SELECTION_UP_COARSE", "Expand selection upwards (coarse)"},
{"PAT_SELECTION_DOWN_COARSE", "Expand selection downwards (coarse)"},
{"PAT_DELETE", "Delete"},
{"PAT_PULL_DELETE", "Pull delete"},
{"PAT_INSERT", "Insert"},
{"PAT_MUTE_CURSOR", "Mute channel at cursor"},
{"PAT_SOLO_CURSOR", "Solo channel at cursor"},
{"PAT_UNMUTE_ALL", "Unmute all channels"},
{"PAT_NEXT_ORDER", "Go to next order"},
{"PAT_PREV_ORDER", "Go to previous order"},
{"PAT_COLLAPSE", "Collapse channel at cursor"},
{"PAT_INCREASE_COLUMNS", "Increase effect columns"},
{"PAT_DECREASE_COLUMNS", "Decrease effect columns"},
{"PAT_INTERPOLATE", "Interpolate"},
{"PAT_FADE", "Fade"},
{"PAT_INVERT_VALUES", "Invert values"},
{"PAT_FLIP_SELECTION", "Flip selection"},
{"PAT_COLLAPSE_ROWS", "Collapse rows"},
{"PAT_EXPAND_ROWS", "Expand rows"},
{"PAT_COLLAPSE_PAT", "Collapse pattern"},
{"PAT_EXPAND_PAT", "Expand pattern"},
{"PAT_COLLAPSE_SONG", "Collapse song"},
{"PAT_EXPAND_SONG", "Expand song"},
{"PAT_LATCH", "Set note input latch"},
{"PAT_MAX", ""},
D("COLLAPSE_WINDOW", "Collapse/expand current window", 0),
D("CLOSE_WINDOW", "Close current window", FURKMOD_SHIFT|SDLK_ESCAPE),
D("GLOBAL_MAX", "", NOT_AN_ACTION),
{"INS_LIST_MIN", "---Instrument list"},
{"INS_LIST_ADD", "Add"},
{"INS_LIST_DUPLICATE", "Duplicate"},
{"INS_LIST_OPEN", "Open"},
{"INS_LIST_SAVE", "Save"},
{"INS_LIST_MOVE_UP", "Move up"},
{"INS_LIST_MOVE_DOWN", "Move down"},
{"INS_LIST_DELETE", "Delete"},
{"INS_LIST_EDIT", "Edit"},
{"INS_LIST_UP", "Cursor up"},
{"INS_LIST_DOWN", "Cursor down"},
{"INS_LIST_MAX", ""},
D("PAT_MIN", "---Pattern", NOT_AN_ACTION),
D("PAT_NOTE_UP", "Transpose (+1)", FURKMOD_CMD|SDLK_F2),
D("PAT_NOTE_DOWN", "Transpose (-1)", FURKMOD_CMD|SDLK_F1),
D("PAT_OCTAVE_UP", "Transpose (+1 octave)", FURKMOD_CMD|SDLK_F4),
D("PAT_OCTAVE_DOWN", "Transpose (-1 octave)", FURKMOD_CMD|SDLK_F3),
D("PAT_SELECT_ALL", "Select all", FURKMOD_CMD|SDLK_a),
D("PAT_CUT", "Cut", FURKMOD_CMD|SDLK_x),
D("PAT_COPY", "Copy", FURKMOD_CMD|SDLK_c),
D("PAT_PASTE", "Paste", FURKMOD_CMD|SDLK_v),
D("PAT_PASTE_MIX", "Paste Mix (foreground)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
D("PAT_PASTE_MIX_BG", "Paste Mix (background)", 0),
D("PAT_PASTE_FLOOD", "Paste Flood", 0),
D("PAT_PASTE_OVERFLOW", "Paste Overflow", 0),
D("PAT_CURSOR_UP", "Move cursor up", SDLK_UP),
D("PAT_CURSOR_DOWN", "Move cursor down", SDLK_DOWN),
D("PAT_CURSOR_LEFT", "Move cursor left", SDLK_LEFT),
D("PAT_CURSOR_RIGHT", "Move cursor right", SDLK_RIGHT),
D("PAT_CURSOR_UP_ONE", "Move cursor up by one (override Edit Step)", FURKMOD_SHIFT|SDLK_HOME),
D("PAT_CURSOR_DOWN_ONE", "Move cursor down by one (override Edit Step)", FURKMOD_SHIFT|SDLK_END),
D("PAT_CURSOR_LEFT_CHANNEL", "Move cursor to previous channel", 0),
D("PAT_CURSOR_RIGHT_CHANNEL", "Move cursor to next channel", 0),
D("PAT_CURSOR_NEXT_CHANNEL", "Move cursor to previous channel (overflow)", 0),
D("PAT_CURSOR_PREVIOUS_CHANNEL", "Move cursor to next channel (overflow)", 0),
D("PAT_CURSOR_BEGIN", "Move cursor to beginning of pattern", SDLK_HOME),
D("PAT_CURSOR_END", "Move cursor to end of pattern", SDLK_END),
D("PAT_CURSOR_UP_COARSE", "Move cursor up (coarse)", SDLK_PAGEUP),
D("PAT_CURSOR_DOWN_COARSE", "Move cursor down (coarse)", SDLK_PAGEDOWN),
D("PAT_SELECTION_UP", "Expand selection upwards", FURKMOD_SHIFT|SDLK_UP),
D("PAT_SELECTION_DOWN", "Expand selection downwards", FURKMOD_SHIFT|SDLK_DOWN),
D("PAT_SELECTION_LEFT", "Expand selection to the left", FURKMOD_SHIFT|SDLK_LEFT),
D("PAT_SELECTION_RIGHT", "Expand selection to the right", FURKMOD_SHIFT|SDLK_RIGHT),
D("PAT_SELECTION_UP_ONE", "Expand selection upwards by one (override Edit Step)", 0),
D("PAT_SELECTION_DOWN_ONE", "Expand selection downwards by one (override Edit Step)", 0),
D("PAT_SELECTION_BEGIN", "Expand selection to beginning of pattern", 0),
D("PAT_SELECTION_END", "Expand selection to end of pattern", 0),
D("PAT_SELECTION_UP_COARSE", "Expand selection upwards (coarse)", FURKMOD_SHIFT|SDLK_PAGEUP),
D("PAT_SELECTION_DOWN_COARSE", "Expand selection downwards (coarse)", FURKMOD_SHIFT|SDLK_PAGEDOWN),
D("PAT_DELETE", "Delete", SDLK_DELETE),
D("PAT_PULL_DELETE", "Pull delete", SDLK_BACKSPACE),
D("PAT_INSERT", "Insert", SDLK_INSERT),
D("PAT_MUTE_CURSOR", "Mute channel at cursor", FURKMOD_ALT|SDLK_F9),
D("PAT_SOLO_CURSOR", "Solo channel at cursor", FURKMOD_ALT|SDLK_F10),
D("PAT_UNMUTE_ALL", "Unmute all channels", FURKMOD_ALT|FURKMOD_SHIFT|SDLK_F9),
D("PAT_NEXT_ORDER", "Go to next order", 0),
D("PAT_PREV_ORDER", "Go to previous order", 0),
D("PAT_COLLAPSE", "Collapse channel at cursor", 0),
D("PAT_INCREASE_COLUMNS", "Increase effect columns", 0),
D("PAT_DECREASE_COLUMNS", "Decrease effect columns", 0),
D("PAT_INTERPOLATE", "Interpolate", 0),
D("PAT_FADE", "Fade", 0),
D("PAT_INVERT_VALUES", "Invert values", 0),
D("PAT_FLIP_SELECTION", "Flip selection", 0),
D("PAT_COLLAPSE_ROWS", "Collapse rows", 0),
D("PAT_EXPAND_ROWS", "Expand rows", 0),
D("PAT_COLLAPSE_PAT", "Collapse pattern", 0),
D("PAT_EXPAND_PAT", "Expand pattern", 0),
D("PAT_COLLAPSE_SONG", "Collapse song", 0),
D("PAT_EXPAND_SONG", "Expand song", 0),
D("PAT_LATCH", "Set note input latch", 0),
D("PAT_MAX", "", NOT_AN_ACTION),
{"WAVE_LIST_MIN", "---Wavetable list"},
{"WAVE_LIST_ADD", "Add"},
{"WAVE_LIST_DUPLICATE", "Duplicate"},
{"WAVE_LIST_OPEN", "Open"},
{"WAVE_LIST_SAVE", "Save"},
{"WAVE_LIST_MOVE_UP", "Move up"},
{"WAVE_LIST_MOVE_DOWN", "Move down"},
{"WAVE_LIST_DELETE", "Delete"},
{"WAVE_LIST_EDIT", "Edit"},
{"WAVE_LIST_UP", "Cursor up"},
{"WAVE_LIST_DOWN", "Cursor down"},
{"WAVE_LIST_MAX", ""},
D("INS_LIST_MIN", "---Instrument list", NOT_AN_ACTION),
D("INS_LIST_ADD", "Add", SDLK_INSERT),
D("INS_LIST_DUPLICATE", "Duplicate", FURKMOD_CMD|SDLK_d),
D("INS_LIST_OPEN", "Open", 0),
D("INS_LIST_SAVE", "Save", 0),
D("INS_LIST_MOVE_UP", "Move up", FURKMOD_SHIFT|SDLK_UP),
D("INS_LIST_MOVE_DOWN", "Move down", FURKMOD_SHIFT|SDLK_DOWN),
D("INS_LIST_DELETE", "Delete", 0),
D("INS_LIST_EDIT", "Edit", FURKMOD_SHIFT|SDLK_RETURN),
D("INS_LIST_UP", "Cursor up", SDLK_UP),
D("INS_LIST_DOWN", "Cursor down", SDLK_DOWN),
D("INS_LIST_MAX", "", NOT_AN_ACTION),
{"SAMPLE_LIST_MIN", "---Sample list"},
{"SAMPLE_LIST_ADD", "Add"},
{"SAMPLE_LIST_DUPLICATE", "Duplicate"},
{"SAMPLE_LIST_OPEN", "Open"},
{"SAMPLE_LIST_SAVE", "Save"},
{"SAMPLE_LIST_MOVE_UP", "Move up"},
{"SAMPLE_LIST_MOVE_DOWN", "Move down"},
{"SAMPLE_LIST_DELETE", "Delete"},
{"SAMPLE_LIST_EDIT", "Edit"},
{"SAMPLE_LIST_UP", "Cursor up"},
{"SAMPLE_LIST_DOWN", "Cursor down"},
{"SAMPLE_LIST_PREVIEW", "Preview"},
{"SAMPLE_LIST_STOP_PREVIEW", "Stop preview"},
{"SAMPLE_LIST_MAX", ""},
D("WAVE_LIST_MIN", "---Wavetable list", NOT_AN_ACTION),
D("WAVE_LIST_ADD", "Add", SDLK_INSERT),
D("WAVE_LIST_DUPLICATE", "Duplicate", FURKMOD_CMD|SDLK_d),
D("WAVE_LIST_OPEN", "Open", 0),
D("WAVE_LIST_SAVE", "Save", 0),
D("WAVE_LIST_MOVE_UP", "Move up", FURKMOD_SHIFT|SDLK_UP),
D("WAVE_LIST_MOVE_DOWN", "Move down", FURKMOD_SHIFT|SDLK_DOWN),
D("WAVE_LIST_DELETE", "Delete", 0),
D("WAVE_LIST_EDIT", "Edit", FURKMOD_SHIFT|SDLK_RETURN),
D("WAVE_LIST_UP", "Cursor up", SDLK_UP),
D("WAVE_LIST_DOWN", "Cursor down", SDLK_DOWN),
D("WAVE_LIST_MAX", "", NOT_AN_ACTION),
{"SAMPLE_MIN", "---Sample editor"},
{"SAMPLE_SELECT", "Edit mode: Select"},
{"SAMPLE_DRAW", "Edit mode: Draw"},
{"SAMPLE_CUT", "Cut"},
{"SAMPLE_COPY", "Copy"},
{"SAMPLE_PASTE", "Paste"},
{"SAMPLE_PASTE_REPLACE", "Paste replace"},
{"SAMPLE_PASTE_MIX", "Paste mix"},
{"SAMPLE_SELECT_ALL", "Select all"},
{"SAMPLE_RESIZE", "Resize"},
{"SAMPLE_RESAMPLE", "Resample"},
{"SAMPLE_AMPLIFY", "Amplify"},
{"SAMPLE_NORMALIZE", "Normalize"},
{"SAMPLE_FADE_IN", "Fade in"},
{"SAMPLE_FADE_OUT", "Fade out"},
{"SAMPLE_SILENCE", "Apply silence"},
{"SAMPLE_INSERT", "Insert silence"},
{"SAMPLE_DELETE", "Delete"},
{"SAMPLE_TRIM", "Trim"},
{"SAMPLE_REVERSE", "Reverse"},
{"SAMPLE_INVERT", "Invert"},
{"SAMPLE_SIGN", "Signed/unsigned exchange"},
{"SAMPLE_FILTER", "Apply filter"},
{"SAMPLE_PREVIEW", "Preview sample"},
{"SAMPLE_STOP_PREVIEW", "Stop sample preview"},
{"SAMPLE_ZOOM_IN", "Zoom in"},
{"SAMPLE_ZOOM_OUT", "Zoom out"},
{"SAMPLE_ZOOM_AUTO", "Toggle auto-zoom"},
{"SAMPLE_MAX", ""},
D("SAMPLE_LIST_MIN", "---Sample list", NOT_AN_ACTION),
D("SAMPLE_LIST_ADD", "Add", SDLK_INSERT),
D("SAMPLE_LIST_DUPLICATE", "Duplicate", FURKMOD_CMD|SDLK_d),
D("SAMPLE_LIST_OPEN", "Open", 0),
D("SAMPLE_LIST_SAVE", "Save", 0),
D("SAMPLE_LIST_MOVE_UP", "Move up", FURKMOD_SHIFT|SDLK_UP),
D("SAMPLE_LIST_MOVE_DOWN", "Move down", FURKMOD_SHIFT|SDLK_DOWN),
D("SAMPLE_LIST_DELETE", "Delete", 0),
D("SAMPLE_LIST_EDIT", "Edit", FURKMOD_SHIFT|SDLK_RETURN),
D("SAMPLE_LIST_UP", "Cursor up", SDLK_UP),
D("SAMPLE_LIST_DOWN", "Cursor down", SDLK_DOWN),
D("SAMPLE_LIST_PREVIEW", "Preview", 0),
D("SAMPLE_LIST_STOP_PREVIEW", "Stop preview", 0),
D("SAMPLE_LIST_MAX", "", NOT_AN_ACTION),
{"ORDERS_MIN", "---Orders"},
{"ORDERS_UP", "Previous order"},
{"ORDERS_DOWN", "Next order"},
{"ORDERS_LEFT", "Cursor left"},
{"ORDERS_RIGHT", "Cursor right"},
{"ORDERS_INCREASE", "Increase value"},
{"ORDERS_DECREASE", "Decrease value"},
{"ORDERS_EDIT_MODE", "Switch edit mode"},
{"ORDERS_LINK", "Toggle alter entire row"},
{"ORDERS_ADD", "Add"},
{"ORDERS_DUPLICATE", "Duplicate"},
{"ORDERS_DEEP_CLONE", "Deep clone"},
{"ORDERS_DUPLICATE_END", "Duplicate to end of song"},
{"ORDERS_DEEP_CLONE_END", "Deep clone to end of song"},
{"ORDERS_REMOVE", "Remove"},
{"ORDERS_MOVE_UP", "Move up"},
{"ORDERS_MOVE_DOWN", "Move down"},
{"ORDERS_REPLAY", "Replay"},
{"ORDERS_MAX", ""},
D("SAMPLE_MIN", "---Sample editor", NOT_AN_ACTION),
D("SAMPLE_SELECT", "Edit mode: Select", FURKMOD_SHIFT|SDLK_i),
D("SAMPLE_DRAW", "Edit mode: Draw", FURKMOD_SHIFT|SDLK_d),
D("SAMPLE_CUT", "Cut", FURKMOD_CMD|SDLK_x),
D("SAMPLE_COPY", "Copy", FURKMOD_CMD|SDLK_c),
D("SAMPLE_PASTE", "Paste", FURKMOD_CMD|SDLK_v),
D("SAMPLE_PASTE_REPLACE", "Paste replace", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
D("SAMPLE_PASTE_MIX", "Paste mix", FURKMOD_CMD|FURKMOD_ALT|SDLK_v),
D("SAMPLE_SELECT_ALL", "Select all", FURKMOD_CMD|SDLK_a),
D("SAMPLE_RESIZE", "Resize", FURKMOD_CMD|SDLK_r),
D("SAMPLE_RESAMPLE", "Resample", FURKMOD_CMD|SDLK_e),
D("SAMPLE_AMPLIFY", "Amplify", FURKMOD_CMD|SDLK_b),
D("SAMPLE_NORMALIZE", "Normalize", FURKMOD_CMD|SDLK_n),
D("SAMPLE_FADE_IN", "Fade in", FURKMOD_CMD|SDLK_i),
D("SAMPLE_FADE_OUT", "Fade out", FURKMOD_CMD|SDLK_o),
D("SAMPLE_SILENCE", "Apply silence", FURKMOD_SHIFT|SDLK_DELETE),
D("SAMPLE_INSERT", "Insert silence", SDLK_INSERT),
D("SAMPLE_DELETE", "Delete", SDLK_DELETE),
D("SAMPLE_TRIM", "Trim", FURKMOD_CMD|SDLK_DELETE),
D("SAMPLE_REVERSE", "Reverse", FURKMOD_CMD|SDLK_t),
D("SAMPLE_INVERT", "Invert", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_t),
D("SAMPLE_SIGN", "Signed/unsigned exchange", FURKMOD_CMD|SDLK_u),
D("SAMPLE_FILTER", "Apply filter", FURKMOD_CMD|SDLK_f),
D("SAMPLE_PREVIEW", "Preview sample", 0),
D("SAMPLE_STOP_PREVIEW", "Stop sample preview", 0),
D("SAMPLE_ZOOM_IN", "Zoom in", FURKMOD_CMD|SDLK_EQUALS),
D("SAMPLE_ZOOM_OUT", "Zoom out", FURKMOD_CMD|SDLK_MINUS),
D("SAMPLE_ZOOM_AUTO", "Toggle auto-zoom", FURKMOD_CMD|SDLK_0),
D("SAMPLE_MAX", "", NOT_AN_ACTION),
D("ORDERS_MIN", "---Orders", NOT_AN_ACTION),
D("ORDERS_UP", "Previous order", SDLK_UP),
D("ORDERS_DOWN", "Next order", SDLK_DOWN),
D("ORDERS_LEFT", "Cursor left", SDLK_LEFT),
D("ORDERS_RIGHT", "Cursor right", SDLK_RIGHT),
D("ORDERS_INCREASE", "Increase value", 0),
D("ORDERS_DECREASE", "Decrease value", 0),
D("ORDERS_EDIT_MODE", "Switch edit mode", 0),
D("ORDERS_LINK", "Toggle alter entire row", FURKMOD_CMD|SDLK_l),
D("ORDERS_ADD", "Add", SDLK_INSERT),
D("ORDERS_DUPLICATE", "Duplicate", FURKMOD_CMD|SDLK_d),
D("ORDERS_DEEP_CLONE", "Deep clone", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d),
D("ORDERS_DUPLICATE_END", "Duplicate to end of song", FURKMOD_CMD|SDLK_e),
D("ORDERS_DEEP_CLONE_END", "Deep clone to end of song", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_e),
D("ORDERS_REMOVE", "Remove", SDLK_DELETE),
D("ORDERS_MOVE_UP", "Move up", FURKMOD_SHIFT|SDLK_UP),
D("ORDERS_MOVE_DOWN", "Move down", FURKMOD_SHIFT|SDLK_DOWN),
D("ORDERS_REPLAY", "Replay", 0),
D("ORDERS_MAX", "", NOT_AN_ACTION),
};
#undef D
// define systems.
const int availableSystems[]={