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

@ -440,6 +440,12 @@ enum PasteMode {
#define FURKMOD_ALT (1<<27)
#define FURK_MASK 0x40ffffff
#ifdef __APPLE__
#define FURKMOD_CMD FURKMOD_META
#else
#define FURKMOD_CMD FURKMOD_CTRL
#endif
struct SelectionPoint {
int xCoarse, xFine;
int y;

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[]={

View File

@ -19,6 +19,14 @@
// guiConst: constants used in the GUI like arrays, strings and other stuff
struct FurnaceGUIActionDef {
const char* name;
const char* friendlyName;
int defaultBind;
FurnaceGUIActionDef(const char* n, const char* fn, int db):
name(n), friendlyName(fn), defaultBind(db) {}
};
extern const int opOrder[4];
extern const char* noteNames[180];
extern const char* noteNamesG[180];
@ -27,6 +35,6 @@ extern const char* insTypes[];
extern const char* sampleDepths[17];
extern const char* resampleStrats[];
extern const int availableSystems[];
extern const char* guiActions[][2];
extern const FurnaceGUIActionDef guiActions[];
extern const int altValues[24];
extern const int vgmVersions[6];

View File

@ -165,7 +165,7 @@ bool MIDIMap::read(String path) {
bool foundAction=false;
for (int i=0; i<GUI_ACTION_MAX; i++) {
if (strcmp(bindAction,guiActions[i][0])==0) {
if (strcmp(bindAction,guiActions[i].name)==0) {
bind.action=i;
foundAction=true;
break;
@ -217,7 +217,7 @@ bool MIDIMap::write(String path) {
}
for (MIDIBind& i: binds) {
if (fprintf(f,"%d %d %d %d %s\n",i.type,i.channel,i.data1,i.data2,guiActions[i.action][0])<0) {
if (fprintf(f,"%d %d %d %d %s\n",i.type,i.channel,i.data1,i.data2,guiActions[i.action].name)<0) {
logW("did not write MIDI mapping entirely! %s\n",strerror(errno));
break;
}

View File

@ -28,12 +28,6 @@
#include <fmt/printf.h>
#include <imgui.h>
#ifdef __APPLE__
#define FURKMOD_CMD FURKMOD_META
#else
#define FURKMOD_CMD FURKMOD_CTRL
#endif
#define DEFAULT_NOTE_KEYS "5:7;6:4;7:3;8:16;10:6;11:8;12:24;13:10;16:11;17:9;18:26;19:28;20:12;21:17;22:1;23:19;24:23;25:5;26:14;27:2;28:21;29:0;30:100;31:13;32:15;34:18;35:20;36:22;38:25;39:27;43:100;46:101;47:29;48:31;53:102;"
const char* mainFonts[]={
@ -165,7 +159,7 @@ const char* specificControls[18]={
#define UI_KEYBIND_CONFIG(what) \
ImGui::TableNextRow(); \
ImGui::TableNextColumn(); \
ImGui::TextUnformatted(guiActions[what][1]); \
ImGui::TextUnformatted(guiActions[what].friendlyName); \
ImGui::TableNextColumn(); \
if (ImGui::Button(fmt::sprintf("%s##KC_" #what,(bindSetPending && bindSetTarget==what)?"Press key...":getKeyName(actionKeys[what])).c_str())) { \
promptKey(what); \
@ -586,16 +580,16 @@ void FurnaceGUI::drawSettings() {
ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (ImGui::BeginCombo("##BAction",(bind.action==0)?"--none--":guiActions[bind.action][1])) {
if (ImGui::BeginCombo("##BAction",(bind.action==0)?"--none--":guiActions[bind.action].friendlyName)) {
if (ImGui::Selectable("--none--",bind.action==0)) {
bind.action=0;
}
for (int j=0; j<GUI_ACTION_MAX; j++) {
if (strcmp(guiActions[j][1],"")==0) continue;
if (strstr(guiActions[j][1],"---")==guiActions[j][1]) {
ImGui::TextUnformatted(guiActions[j][1]);
if (strcmp(guiActions[j].friendlyName,"")==0) continue;
if (strstr(guiActions[j].friendlyName,"---")==guiActions[j].friendlyName) {
ImGui::TextUnformatted(guiActions[j].friendlyName);
} else {
snprintf(bindID,1024,"%s##BA_%d",guiActions[j][1],j);
snprintf(bindID,1024,"%s##BA_%d",guiActions[j].friendlyName,j);
if (ImGui::Selectable(bindID,bind.action==j)) {
bind.action=j;
}
@ -1168,6 +1162,10 @@ void FurnaceGUI::drawSettings() {
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CUT);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COPY);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE_MIX);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE_MIX_BG);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE_FLOOD);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE_OVERFLOW);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_LEFT);
@ -1203,6 +1201,15 @@ void FurnaceGUI::drawSettings() {
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COLLAPSE);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INCREASE_COLUMNS);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_DECREASE_COLUMNS);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INTERPOLATE);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_FADE);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INVERT_VALUES);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_FLIP_SELECTION);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COLLAPSE_ROWS);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_EXPAND_ROWS);
UI_KEYBIND_CONFIG(GUI_ACTION_PAT_LATCH);
// TODO: collapse/expand pattern and song
KEYBIND_CONFIG_END;
ImGui::TreePop();
@ -1337,9 +1344,6 @@ void FurnaceGUI::drawSettings() {
ImGui::End();
}
#define LOAD_KEYBIND(x,y) \
actionKeys[x]=e->getConfInt("keybind_" #x,y);
#define clampSetting(x,minV,maxV) \
if (x<minV) { \
x=minV; \
@ -1458,181 +1462,10 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.frameBorders,0,1);
// keybinds
LOAD_KEYBIND(GUI_ACTION_OPEN,FURKMOD_CMD|SDLK_o);
LOAD_KEYBIND(GUI_ACTION_OPEN_BACKUP,0);
LOAD_KEYBIND(GUI_ACTION_SAVE,FURKMOD_CMD|SDLK_s);
LOAD_KEYBIND(GUI_ACTION_SAVE_AS,FURKMOD_CMD|FURKMOD_SHIFT|SDLK_s);
LOAD_KEYBIND(GUI_ACTION_UNDO,FURKMOD_CMD|SDLK_z);
LOAD_KEYBIND(GUI_ACTION_REDO,FURKMOD_CMD|SDLK_y);
LOAD_KEYBIND(GUI_ACTION_PLAY_TOGGLE,SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_PLAY,0);
LOAD_KEYBIND(GUI_ACTION_STOP,0);
LOAD_KEYBIND(GUI_ACTION_PLAY_REPEAT,0);
LOAD_KEYBIND(GUI_ACTION_PLAY_CURSOR,FURKMOD_SHIFT|SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_STEP_ONE,FURKMOD_CMD|SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_OCTAVE_UP,SDLK_KP_MULTIPLY);
LOAD_KEYBIND(GUI_ACTION_OCTAVE_DOWN,SDLK_KP_DIVIDE);
LOAD_KEYBIND(GUI_ACTION_INS_UP,FURKMOD_SHIFT|SDLK_KP_DIVIDE);
LOAD_KEYBIND(GUI_ACTION_INS_DOWN,FURKMOD_SHIFT|SDLK_KP_MULTIPLY);
LOAD_KEYBIND(GUI_ACTION_STEP_UP,FURKMOD_CMD|SDLK_KP_MULTIPLY);
LOAD_KEYBIND(GUI_ACTION_STEP_DOWN,FURKMOD_CMD|SDLK_KP_DIVIDE);
LOAD_KEYBIND(GUI_ACTION_TOGGLE_EDIT,SDLK_SPACE);
LOAD_KEYBIND(GUI_ACTION_METRONOME,FURKMOD_CMD|SDLK_m);
LOAD_KEYBIND(GUI_ACTION_REPEAT_PATTERN,0);
LOAD_KEYBIND(GUI_ACTION_FOLLOW_ORDERS,0);
LOAD_KEYBIND(GUI_ACTION_FOLLOW_PATTERN,0);
LOAD_KEYBIND(GUI_ACTION_PANIC,SDLK_F12);
LOAD_KEYBIND(GUI_ACTION_WINDOW_EDIT_CONTROLS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_ORDERS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_INS_LIST,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_INS_EDIT,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_SONG_INFO,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_PATTERN,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_WAVE_LIST,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_WAVE_EDIT,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_SAMPLE_LIST,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_SAMPLE_EDIT,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_ABOUT,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_SETTINGS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_MIXER,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_DEBUG,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_OSCILLOSCOPE,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_VOL_METER,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_STATS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_COMPAT_FLAGS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_PIANO,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_NOTES,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_CHANNELS,0);
LOAD_KEYBIND(GUI_ACTION_WINDOW_REGISTER_VIEW,0);
LOAD_KEYBIND(GUI_ACTION_COLLAPSE_WINDOW,0);
LOAD_KEYBIND(GUI_ACTION_CLOSE_WINDOW,FURKMOD_SHIFT|SDLK_ESCAPE);
LOAD_KEYBIND(GUI_ACTION_PAT_NOTE_UP,FURKMOD_CMD|SDLK_F2);
LOAD_KEYBIND(GUI_ACTION_PAT_NOTE_DOWN,FURKMOD_CMD|SDLK_F1);
LOAD_KEYBIND(GUI_ACTION_PAT_OCTAVE_UP,FURKMOD_CMD|SDLK_F4);
LOAD_KEYBIND(GUI_ACTION_PAT_OCTAVE_DOWN,FURKMOD_CMD|SDLK_F3);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECT_ALL,FURKMOD_CMD|SDLK_a);
LOAD_KEYBIND(GUI_ACTION_PAT_CUT,FURKMOD_CMD|SDLK_x);
LOAD_KEYBIND(GUI_ACTION_PAT_COPY,FURKMOD_CMD|SDLK_c);
LOAD_KEYBIND(GUI_ACTION_PAT_PASTE,FURKMOD_CMD|SDLK_v);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_UP,SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN,SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_LEFT,SDLK_LEFT);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_RIGHT,SDLK_RIGHT);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_UP_ONE,FURKMOD_SHIFT|SDLK_HOME);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN_ONE,FURKMOD_SHIFT|SDLK_END);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_LEFT_CHANNEL,0);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_RIGHT_CHANNEL,0);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_NEXT_CHANNEL,0);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_PREVIOUS_CHANNEL,0);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_BEGIN,SDLK_HOME);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_END,SDLK_END);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_UP_COARSE,SDLK_PAGEUP);
LOAD_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN_COARSE,SDLK_PAGEDOWN);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_UP,FURKMOD_SHIFT|SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN,FURKMOD_SHIFT|SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_LEFT,FURKMOD_SHIFT|SDLK_LEFT);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_RIGHT,FURKMOD_SHIFT|SDLK_RIGHT);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_UP_ONE,0);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN_ONE,0);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_BEGIN,0);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_END,0);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_UP_COARSE,FURKMOD_SHIFT|SDLK_PAGEUP);
LOAD_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN_COARSE,FURKMOD_SHIFT|SDLK_PAGEDOWN);
LOAD_KEYBIND(GUI_ACTION_PAT_DELETE,SDLK_DELETE);
LOAD_KEYBIND(GUI_ACTION_PAT_PULL_DELETE,SDLK_BACKSPACE);
LOAD_KEYBIND(GUI_ACTION_PAT_INSERT,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_PAT_MUTE_CURSOR,FURKMOD_ALT|SDLK_F9);
LOAD_KEYBIND(GUI_ACTION_PAT_SOLO_CURSOR,FURKMOD_ALT|SDLK_F10);
LOAD_KEYBIND(GUI_ACTION_PAT_UNMUTE_ALL,FURKMOD_ALT|FURKMOD_SHIFT|SDLK_F9);
LOAD_KEYBIND(GUI_ACTION_PAT_NEXT_ORDER,0);
LOAD_KEYBIND(GUI_ACTION_PAT_PREV_ORDER,0);
LOAD_KEYBIND(GUI_ACTION_PAT_COLLAPSE,0);
LOAD_KEYBIND(GUI_ACTION_PAT_INCREASE_COLUMNS,0);
LOAD_KEYBIND(GUI_ACTION_PAT_DECREASE_COLUMNS,0);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_ADD,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_DUPLICATE,FURKMOD_CMD|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_OPEN,0);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_SAVE,0);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_MOVE_UP,FURKMOD_SHIFT|SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_MOVE_DOWN,FURKMOD_SHIFT|SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_DELETE,0);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_EDIT,FURKMOD_SHIFT|SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_UP,SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_INS_LIST_DOWN,SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_ADD,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_DUPLICATE,FURKMOD_CMD|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_OPEN,0);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_SAVE,0);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_MOVE_UP,FURKMOD_SHIFT|SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_MOVE_DOWN,FURKMOD_SHIFT|SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_DELETE,0);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_EDIT,FURKMOD_SHIFT|SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_UP,SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_WAVE_LIST_DOWN,SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_ADD,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_DUPLICATE,FURKMOD_CMD|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_OPEN,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_SAVE,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_MOVE_UP,FURKMOD_SHIFT|SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN,FURKMOD_SHIFT|SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_DELETE,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_EDIT,FURKMOD_SHIFT|SDLK_RETURN);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_UP,SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_DOWN,SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_PREVIEW,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_SELECT,FURKMOD_SHIFT|SDLK_i);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_DRAW,FURKMOD_SHIFT|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_CUT,FURKMOD_CMD|SDLK_x);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_COPY,FURKMOD_CMD|SDLK_c);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_PASTE,FURKMOD_CMD|SDLK_v);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_PASTE_REPLACE,FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_PASTE_MIX,FURKMOD_CMD|FURKMOD_ALT|SDLK_v);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_SELECT_ALL,FURKMOD_CMD|SDLK_a);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_RESIZE,FURKMOD_CMD|SDLK_r);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_RESAMPLE,FURKMOD_CMD|SDLK_e);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_AMPLIFY,FURKMOD_CMD|SDLK_b);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_NORMALIZE,FURKMOD_CMD|SDLK_n);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_FADE_IN,FURKMOD_CMD|SDLK_i);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_FADE_OUT,FURKMOD_CMD|SDLK_o);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_INSERT,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_SILENCE,FURKMOD_SHIFT|SDLK_DELETE);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_DELETE,SDLK_DELETE);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_TRIM,FURKMOD_CMD|SDLK_DELETE);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_REVERSE,FURKMOD_CMD|SDLK_t);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_INVERT,FURKMOD_CMD|FURKMOD_SHIFT|SDLK_t);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_SIGN,FURKMOD_CMD|SDLK_u);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_FILTER,FURKMOD_CMD|SDLK_f);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_PREVIEW,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_STOP_PREVIEW,0);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_IN,FURKMOD_CMD|SDLK_EQUALS);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_OUT,FURKMOD_CMD|SDLK_MINUS);
LOAD_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_AUTO,FURKMOD_CMD|SDLK_0);
LOAD_KEYBIND(GUI_ACTION_ORDERS_UP,SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DOWN,SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_ORDERS_LEFT,SDLK_LEFT);
LOAD_KEYBIND(GUI_ACTION_ORDERS_RIGHT,SDLK_RIGHT);
LOAD_KEYBIND(GUI_ACTION_ORDERS_INCREASE,0);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DECREASE,0);
LOAD_KEYBIND(GUI_ACTION_ORDERS_EDIT_MODE,0);
LOAD_KEYBIND(GUI_ACTION_ORDERS_LINK,FURKMOD_CMD|SDLK_l);
LOAD_KEYBIND(GUI_ACTION_ORDERS_ADD,SDLK_INSERT);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DUPLICATE,FURKMOD_CMD|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DEEP_CLONE,FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DUPLICATE_END,FURKMOD_CMD|SDLK_e);
LOAD_KEYBIND(GUI_ACTION_ORDERS_DEEP_CLONE_END,FURKMOD_CMD|FURKMOD_SHIFT|SDLK_e);
LOAD_KEYBIND(GUI_ACTION_ORDERS_REMOVE,SDLK_DELETE);
LOAD_KEYBIND(GUI_ACTION_ORDERS_MOVE_UP,FURKMOD_SHIFT|SDLK_UP);
LOAD_KEYBIND(GUI_ACTION_ORDERS_MOVE_DOWN,FURKMOD_SHIFT|SDLK_DOWN);
LOAD_KEYBIND(GUI_ACTION_ORDERS_REPLAY,0);
for (int i=0; i<GUI_ACTION_MAX; i++) {
if (guiActions[i].defaultBind==-1) continue; // not a bind
actionKeys[i]=e->getConfInt(String("keybind_GUI_ACTION_")+String(guiActions[i].name),guiActions[i].defaultBind);
}
decodeKeyMap(noteKeys,e->getConfString("noteKeys",DEFAULT_NOTE_KEYS));
@ -1804,181 +1637,11 @@ void FurnaceGUI::commitSettings() {
PUT_UI_COLOR(GUI_COLOR_EE_VALUE);
PUT_UI_COLOR(GUI_COLOR_PLAYBACK_STAT);
SAVE_KEYBIND(GUI_ACTION_OPEN);
SAVE_KEYBIND(GUI_ACTION_OPEN_BACKUP);
SAVE_KEYBIND(GUI_ACTION_SAVE);
SAVE_KEYBIND(GUI_ACTION_SAVE_AS);
SAVE_KEYBIND(GUI_ACTION_UNDO);
SAVE_KEYBIND(GUI_ACTION_REDO);
SAVE_KEYBIND(GUI_ACTION_PLAY_TOGGLE);
SAVE_KEYBIND(GUI_ACTION_PLAY);
SAVE_KEYBIND(GUI_ACTION_STOP);
SAVE_KEYBIND(GUI_ACTION_PLAY_REPEAT);
SAVE_KEYBIND(GUI_ACTION_PLAY_CURSOR);
SAVE_KEYBIND(GUI_ACTION_STEP_ONE);
SAVE_KEYBIND(GUI_ACTION_OCTAVE_UP);
SAVE_KEYBIND(GUI_ACTION_OCTAVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_INS_UP);
SAVE_KEYBIND(GUI_ACTION_INS_DOWN);
SAVE_KEYBIND(GUI_ACTION_STEP_UP);
SAVE_KEYBIND(GUI_ACTION_STEP_DOWN);
SAVE_KEYBIND(GUI_ACTION_TOGGLE_EDIT);
SAVE_KEYBIND(GUI_ACTION_METRONOME);
SAVE_KEYBIND(GUI_ACTION_REPEAT_PATTERN);
SAVE_KEYBIND(GUI_ACTION_FOLLOW_ORDERS);
SAVE_KEYBIND(GUI_ACTION_FOLLOW_PATTERN);
SAVE_KEYBIND(GUI_ACTION_PANIC);
SAVE_KEYBIND(GUI_ACTION_WINDOW_EDIT_CONTROLS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_ORDERS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_INS_LIST);
SAVE_KEYBIND(GUI_ACTION_WINDOW_INS_EDIT);
SAVE_KEYBIND(GUI_ACTION_WINDOW_SONG_INFO);
SAVE_KEYBIND(GUI_ACTION_WINDOW_PATTERN);
SAVE_KEYBIND(GUI_ACTION_WINDOW_WAVE_LIST);
SAVE_KEYBIND(GUI_ACTION_WINDOW_WAVE_EDIT);
SAVE_KEYBIND(GUI_ACTION_WINDOW_SAMPLE_LIST);
SAVE_KEYBIND(GUI_ACTION_WINDOW_SAMPLE_EDIT);
SAVE_KEYBIND(GUI_ACTION_WINDOW_ABOUT);
SAVE_KEYBIND(GUI_ACTION_WINDOW_SETTINGS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_MIXER);
SAVE_KEYBIND(GUI_ACTION_WINDOW_DEBUG);
SAVE_KEYBIND(GUI_ACTION_WINDOW_OSCILLOSCOPE);
SAVE_KEYBIND(GUI_ACTION_WINDOW_VOL_METER);
SAVE_KEYBIND(GUI_ACTION_WINDOW_STATS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_COMPAT_FLAGS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_PIANO);
SAVE_KEYBIND(GUI_ACTION_WINDOW_NOTES);
SAVE_KEYBIND(GUI_ACTION_WINDOW_CHANNELS);
SAVE_KEYBIND(GUI_ACTION_WINDOW_REGISTER_VIEW);
SAVE_KEYBIND(GUI_ACTION_COLLAPSE_WINDOW);
SAVE_KEYBIND(GUI_ACTION_CLOSE_WINDOW);
SAVE_KEYBIND(GUI_ACTION_PAT_NOTE_UP);
SAVE_KEYBIND(GUI_ACTION_PAT_NOTE_DOWN);
SAVE_KEYBIND(GUI_ACTION_PAT_OCTAVE_UP);
SAVE_KEYBIND(GUI_ACTION_PAT_OCTAVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECT_ALL);
SAVE_KEYBIND(GUI_ACTION_PAT_CUT);
SAVE_KEYBIND(GUI_ACTION_PAT_COPY);
SAVE_KEYBIND(GUI_ACTION_PAT_PASTE);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_UP);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_LEFT);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_RIGHT);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_UP_ONE);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN_ONE);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_LEFT_CHANNEL);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_RIGHT_CHANNEL);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_NEXT_CHANNEL);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_PREVIOUS_CHANNEL);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_BEGIN);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_END);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_UP_COARSE);
SAVE_KEYBIND(GUI_ACTION_PAT_CURSOR_DOWN_COARSE);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_UP);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_LEFT);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_RIGHT);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_UP_ONE);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN_ONE);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_BEGIN);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_END);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_UP_COARSE);
SAVE_KEYBIND(GUI_ACTION_PAT_SELECTION_DOWN_COARSE);
SAVE_KEYBIND(GUI_ACTION_PAT_DELETE);
SAVE_KEYBIND(GUI_ACTION_PAT_PULL_DELETE);
SAVE_KEYBIND(GUI_ACTION_PAT_INSERT);
SAVE_KEYBIND(GUI_ACTION_PAT_MUTE_CURSOR);
SAVE_KEYBIND(GUI_ACTION_PAT_SOLO_CURSOR);
SAVE_KEYBIND(GUI_ACTION_PAT_UNMUTE_ALL);
SAVE_KEYBIND(GUI_ACTION_PAT_NEXT_ORDER);
SAVE_KEYBIND(GUI_ACTION_PAT_PREV_ORDER);
SAVE_KEYBIND(GUI_ACTION_PAT_COLLAPSE);
SAVE_KEYBIND(GUI_ACTION_PAT_INCREASE_COLUMNS);
SAVE_KEYBIND(GUI_ACTION_PAT_DECREASE_COLUMNS);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_ADD);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_DUPLICATE);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_OPEN);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_SAVE);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_MOVE_UP);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_MOVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_DELETE);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_EDIT);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_UP);
SAVE_KEYBIND(GUI_ACTION_INS_LIST_DOWN);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_ADD);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_DUPLICATE);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_OPEN);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_SAVE);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_MOVE_UP);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_MOVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_DELETE);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_EDIT);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_UP);
SAVE_KEYBIND(GUI_ACTION_WAVE_LIST_DOWN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_ADD);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_OPEN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_SAVE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_MOVE_UP);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_DELETE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_EDIT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_UP);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_DOWN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_PREVIEW);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_SELECT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_DRAW);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_CUT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_COPY);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_PASTE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_PASTE_REPLACE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_PASTE_MIX);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_SELECT_ALL);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_RESIZE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_RESAMPLE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_AMPLIFY);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_NORMALIZE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_FADE_IN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_FADE_OUT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_INSERT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_SILENCE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_DELETE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_TRIM);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_REVERSE);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_INVERT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_SIGN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_FILTER);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_PREVIEW);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_STOP_PREVIEW);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_IN);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_OUT);
SAVE_KEYBIND(GUI_ACTION_SAMPLE_ZOOM_AUTO);
SAVE_KEYBIND(GUI_ACTION_ORDERS_UP);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DOWN);
SAVE_KEYBIND(GUI_ACTION_ORDERS_LEFT);
SAVE_KEYBIND(GUI_ACTION_ORDERS_RIGHT);
SAVE_KEYBIND(GUI_ACTION_ORDERS_INCREASE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DECREASE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_EDIT_MODE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_LINK);
SAVE_KEYBIND(GUI_ACTION_ORDERS_ADD);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DUPLICATE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DEEP_CLONE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DUPLICATE_END);
SAVE_KEYBIND(GUI_ACTION_ORDERS_DEEP_CLONE_END);
SAVE_KEYBIND(GUI_ACTION_ORDERS_REMOVE);
SAVE_KEYBIND(GUI_ACTION_ORDERS_MOVE_UP);
SAVE_KEYBIND(GUI_ACTION_ORDERS_MOVE_DOWN);
SAVE_KEYBIND(GUI_ACTION_ORDERS_REPLAY);
// keybinds
for (int i=0; i<GUI_ACTION_MAX; i++) {
if (guiActions[i].defaultBind==-1) continue; // not a bind
e->setConf(String("keybind_GUI_ACTION_")+String(guiActions[i].name),actionKeys[i]);
}
parseKeybinds();