diff --git a/src/gui/gui.h b/src/gui/gui.h index 2881fa2f9..becd759bc 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -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; diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 462c9f827..33974bba8 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -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[]={ diff --git a/src/gui/guiConst.h b/src/gui/guiConst.h index dfafea88c..ef41650af 100644 --- a/src/gui/guiConst.h +++ b/src/gui/guiConst.h @@ -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]; \ No newline at end of file diff --git a/src/gui/midiMap.cpp b/src/gui/midiMap.cpp index a38fe11b7..071540f92 100644 --- a/src/gui/midiMap.cpp +++ b/src/gui/midiMap.cpp @@ -165,7 +165,7 @@ bool MIDIMap::read(String path) { bool foundAction=false; for (int i=0; i #include -#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; jgetConfInt("keybind_" #x,y); - #define clampSetting(x,minV,maxV) \ if (xgetConfInt(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; isetConf(String("keybind_GUI_ACTION_")+String(guiActions[i].name),actionKeys[i]); + } parseKeybinds();