From 77798f6ed7c90722ece1fc5d209efd594717ec5d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 29 Mar 2022 16:09:15 -0500 Subject: [PATCH] more MIDI work... still not there --- CMakeLists.txt | 1 + src/gui/gui.h | 65 +++++++- src/gui/guiConst.cpp | 211 +++++++++++++++++++++++++- src/gui/guiConst.h | 3 +- src/gui/midiMap.cpp | 209 ++++++++++++++++++++++++++ src/gui/settings.cpp | 344 +++++++++++++++++++++---------------------- 6 files changed, 657 insertions(+), 176 deletions(-) create mode 100644 src/gui/midiMap.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b9b5729..4d436602 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -379,6 +379,7 @@ src/gui/editing.cpp src/gui/editControls.cpp src/gui/insEdit.cpp src/gui/mixer.cpp +src/gui/midiMap.cpp src/gui/newSong.cpp src/gui/orders.cpp src/gui/osc.cpp diff --git a/src/gui/gui.h b/src/gui/gui.h index 933455de..22b185a4 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -492,12 +492,74 @@ struct UndoStep { std::vector pat; }; +// -1 = any struct MIDIBind { int type, channel, data1, data2; + int action; + MIDIBind(): + type(-1), + channel(-1), + data1(-1), + data2(-1), + action(0) {} }; struct MIDIMap { + // access method: map[type][channel][data1][data2]; + // channel 16 = any + // data1 128 = any + // data2 128 = any + int**** map; std::vector binds; + + bool noteInput, volInput, rawVolume, polyInput, directChannel, programChange, midiClock, midiTimeCode; + // 0: disabled + // + // 1: C- C# D- D# E- F- F# G- G# A- A# B- + // o1 1 3 6 8 A + // 0 2 4 5 7 9 B + // C- C# D- D# E- F- F# G- G# A- A# B- + // o2 D F + // C E + // + // 2: C- C# D- D# E- F- F# G- G# A- A# B- + // o1 1 3 6 8 A + // 0 2 4 5 7 9 B + // C- C# D- D# E- F- F# G- G# A- A# B- + // o2 D F 2 4 6 + // C E 0 1 3 5 7 + // + // 3: C- C# D- D# E- F- F# G- G# A- A# B- + // o1 A B C D E + // 0 1 2 3 4 5 6 + // C- C# D- D# E- F- F# G- G# A- A# B- + // o2 F + // 7 8 9 + // + // 4: use dual CC for value input (nibble) + // 5: use 14-bit CC for value input (MSB/LSB) + int valueInputStyle; + int valueInputControlMSB; // on 4 + int valueInputControlLSB; // on 4 + float volExp; + + void compile(); + void deinit(); + int at(TAMidiMessage& where); + bool read(String path); + bool write(String path); + MIDIMap(): + map(NULL), + noteInput(true), + volInput(false), + rawVolume(false), + polyInput(false), + directChannel(false), + programChange(true), + midiClock(false), + midiTimeCode(false), + valueInputStyle(1), + volExp(1.0f) {} }; struct Particle { @@ -572,6 +634,7 @@ class FurnaceGUI { std::mutex midiLock; std::queue midiQueue; + MIDIMap midiMap; ImFont* mainFont; ImFont* iconFont; @@ -965,4 +1028,4 @@ class FurnaceGUI { FurnaceGUI(); }; -#endif \ No newline at end of file +#endif diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 4aa0f29e..efb52331 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -19,6 +19,7 @@ // guiConst: constants used in the GUI like arrays, strings and other stuff #include "guiConst.h" +#include "gui.h" #include "../engine/song.h" const int opOrder[4]={ @@ -123,6 +124,213 @@ 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"}, + + {"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"}, + + {"COLLAPSE_WINDOW", "Collapse/expand current window"}, + {"CLOSE_WINDOW", "Close current window"}, + {"GLOBAL_MAX", ""}, + + {"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", ""}, + + {"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", ""}, + + {"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", ""}, + + {"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", ""}, + + {"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", ""}, + + {"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", ""}, +}; + // define systems. const int availableSystems[]={ DIV_SYSTEM_YM2612, @@ -168,4 +376,5 @@ const int availableSystems[]={ DIV_SYSTEM_VIC20, DIV_SYSTEM_VRC6, 0 // don't remove this last one! -}; \ No newline at end of file +}; + diff --git a/src/gui/guiConst.h b/src/gui/guiConst.h index 25b4bc4c..6811845e 100644 --- a/src/gui/guiConst.h +++ b/src/gui/guiConst.h @@ -26,4 +26,5 @@ extern const char* pitchLabel[11]; extern const char* insTypes[]; extern const char* sampleDepths[17]; extern const char* resampleStrats[]; -extern const int availableSystems[]; \ No newline at end of file +extern const int availableSystems[]; +extern const char* guiActions[][2]; diff --git a/src/gui/midiMap.cpp b/src/gui/midiMap.cpp new file mode 100644 index 00000000..63337e45 --- /dev/null +++ b/src/gui/midiMap.cpp @@ -0,0 +1,209 @@ +#include "gui.h" +#include "guiConst.h" +#include "../ta-log.h" + +int MIDIMap::at(TAMidiMessage& where) { + if (map==NULL) return 0; + int type=(where.type>>4)-8; + int chan=where.type&15; + int data1=where.data[0]; + int data2=where.data[1]; + if (type<0) return 0; + if (map[type]==NULL) return 0; + + int** chanMap=map[type][chan]; + if (chanMap==NULL) { + chanMap=map[type][16]; + if (chanMap==NULL) return 0; + } + + int* dataMap=chanMap[data1]; + if (dataMap==NULL) { + dataMap=chanMap[128]; + if (dataMap==NULL) return 0; + } + + int ret=dataMap[data2]; + if (ret==0) { + ret=dataMap[128]; + if (ret==0) { // maybe this is not the correct mapping + dataMap=chanMap[128]; + if (dataMap==NULL) { + chanMap=map[type][16]; + if (chanMap==NULL) return 0; + + dataMap=chanMap[data1]; + if (dataMap==NULL) { + dataMap=chanMap[128]; + if (dataMap==NULL) return 0; + } + + ret=dataMap[data2]; + if (ret==0) { + ret=dataMap[128]; + } + } else { + ret=dataMap[data2]; + if (ret==0) { + ret=dataMap[128]; + } + } + } + } + + return ret; +} + +bool MIDIMap::read(String path) { + char line[4096]; + int curLine=1; + FILE* f=fopen(path.c_str(),"rb"); + if (f==NULL) { + logE("error while loading MIDI mapping! %s\n",strerror(errno)); + return false; + } + + binds.clear(); + while (fgets(line,4096,f)) { + char* nlPos=strrchr(line,'\n'); + if (nlPos!=NULL) *nlPos=0; + if (strstr(line,"option")==line) { + char optionName[256]; + char optionValue[256]; + String optionNameS, optionValueS; + int result=sscanf(line,"option %255s %255s",optionName,optionValue); + if (result!=2) { + logW("MIDI map garbage data at line %d: %s\n",curLine,line); + break; + } + + optionNameS=optionName; + optionValueS=optionValue; + + try { + if (optionNameS=="noteInput") { + noteInput=std::stoi(optionValueS); + } else { + logW("MIDI map unknown option %s at line %d: %s\n",optionName,curLine,line); + } + } catch (std::out_of_range& e) { + logW("MIDI map invalid value %s for option %s at line %d: %s\n",optionValue,optionName,curLine,line); + } catch (std::invalid_argument& e) { + logW("MIDI map invalid value %s for option %s at line %d: %s\n",optionValue,optionName,curLine,line); + } + + curLine++; + continue; + } + + char bindAction[256]; + MIDIBind bind; + int result=sscanf(line,"%d %d %d %d %255s",&bind.type,&bind.channel,&bind.data1,&bind.data2,bindAction); + if (result!=5 || result==EOF) { + logW("MIDI map garbage data at line %d: %s\n",curLine,line); + break; + } + + bool foundAction=false; + for (int i=0; i15) continue; + if (i.channel<0 || i.channel>16) continue; + if (i.data1<0 || i.data1>128) continue; + if (i.data2<0 || i.data2>128) continue; + + if (map[i.type-8]==NULL) { + map[i.type-8]=new int**[17]; + memset(map[i.type-8],0,sizeof(int**)*17); + } + if (map[i.type-8][i.channel]==NULL) { + map[i.type-8][i.channel]=new int*[129]; + memset(map[i.type-8][i.channel],0,sizeof(int*)*129); + } + if (map[i.type-8][i.channel][i.data1]==NULL) { + map[i.type-8][i.channel][i.data1]=new int[129]; + memset(map[i.type-8][i.channel][i.data1],0,sizeof(int)*129); + } + + map[i.type-8][i.channel][i.data1][i.data2]=i.action; + logD("MIDI mapping %d %d %d %d to %d\n",i.type-8,i.channel,i.data1,i.data2,i.action); + } +} diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index c2281d63..03c17670 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -21,13 +21,11 @@ #include "fonts.h" #include "../ta-log.h" #include "util.h" +#include "guiConst.h" #include "ImGuiFileDialog.h" #include "IconsFontAwesome4.h" #include "misc/cpp/imgui_stdlib.h" -#include -#include #include -#include #ifdef __APPLE__ #define FURKMOD_CMD FURKMOD_META @@ -102,10 +100,10 @@ const char* saaCores[]={ ImGui::EndTable(); \ } -#define UI_KEYBIND_CONFIG(what,label) \ +#define UI_KEYBIND_CONFIG(what) \ ImGui::TableNextRow(); \ ImGui::TableNextColumn(); \ - ImGui::Text(label); \ + ImGui::TextUnformatted(guiActions[what][1]); \ ImGui::TableNextColumn(); \ if (ImGui::Button(fmt::sprintf("%s##KC_" #what,(bindSetPending && bindSetTarget==what)?"Press key...":getKeyName(actionKeys[what])).c_str())) { \ promptKey(what); \ @@ -662,30 +660,30 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Global hotkeys")) { KEYBIND_CONFIG_BEGIN("keysGlobal"); - UI_KEYBIND_CONFIG(GUI_ACTION_OPEN,"Open file"); - UI_KEYBIND_CONFIG(GUI_ACTION_OPEN_BACKUP,"Restore backup"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAVE,"Save file"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAVE_AS,"Save as"); - UI_KEYBIND_CONFIG(GUI_ACTION_UNDO,"Undo"); - UI_KEYBIND_CONFIG(GUI_ACTION_REDO,"Redo"); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_TOGGLE,"Play/Stop (toggle)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY,"Play"); - UI_KEYBIND_CONFIG(GUI_ACTION_STOP,"Stop"); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_REPEAT,"Play (repeat pattern)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_CURSOR,"Play from cursor"); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_ONE,"Step row"); - UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_UP,"Octave up"); - UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_DOWN,"Octave down"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_UP,"Previous instrument"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_DOWN,"Next instrument"); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_UP,"Increase edit step"); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_DOWN,"Decrease edit step"); - UI_KEYBIND_CONFIG(GUI_ACTION_TOGGLE_EDIT,"Toggle edit mode"); - UI_KEYBIND_CONFIG(GUI_ACTION_METRONOME,"Metronome"); - UI_KEYBIND_CONFIG(GUI_ACTION_REPEAT_PATTERN,"Toggle repeat pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_ORDERS,"Follow orders"); - UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_PATTERN,"Follow pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PANIC,"Panic"); + UI_KEYBIND_CONFIG(GUI_ACTION_OPEN); + UI_KEYBIND_CONFIG(GUI_ACTION_OPEN_BACKUP); + UI_KEYBIND_CONFIG(GUI_ACTION_SAVE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAVE_AS); + UI_KEYBIND_CONFIG(GUI_ACTION_UNDO); + UI_KEYBIND_CONFIG(GUI_ACTION_REDO); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_TOGGLE); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY); + UI_KEYBIND_CONFIG(GUI_ACTION_STOP); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_REPEAT); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_CURSOR); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_TOGGLE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_METRONOME); + UI_KEYBIND_CONFIG(GUI_ACTION_REPEAT_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_ORDERS); + UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_PANIC); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -693,31 +691,31 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Window activation")) { KEYBIND_CONFIG_BEGIN("keysWindow"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EDIT_CONTROLS,"Edit Controls"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ORDERS,"Orders"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_LIST,"Instrument List"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_EDIT,"Instrument Editor"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SONG_INFO,"Song Information"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PATTERN,"Pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_LIST,"Wavetable List"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_EDIT,"Wavetable Editor"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_LIST,"Sample List"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_EDIT,"Sample Editor"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ABOUT,"About"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SETTINGS,"Settings"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_MIXER,"Mixer"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_DEBUG,"Debug Menu"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_OSCILLOSCOPE,"Oscilloscope"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_VOL_METER,"Volume Meter"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_STATS,"Statistics"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_COMPAT_FLAGS,"Compatibility Flags"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PIANO,"Piano"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_NOTES,"Song Comments"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHANNELS,"Channels"); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_REGISTER_VIEW,"Register View"); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EDIT_CONTROLS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ORDERS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SONG_INFO); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ABOUT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SETTINGS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_MIXER); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_DEBUG); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_OSCILLOSCOPE); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_VOL_METER); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_STATS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_COMPAT_FLAGS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PIANO); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_NOTES); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHANNELS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_REGISTER_VIEW); - UI_KEYBIND_CONFIG(GUI_ACTION_COLLAPSE_WINDOW,"Collapse/expand current window"); - UI_KEYBIND_CONFIG(GUI_ACTION_CLOSE_WINDOW,"Close current window"); + UI_KEYBIND_CONFIG(GUI_ACTION_COLLAPSE_WINDOW); + UI_KEYBIND_CONFIG(GUI_ACTION_CLOSE_WINDOW); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -808,49 +806,49 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Pattern")) { KEYBIND_CONFIG_BEGIN("keysPattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NOTE_UP,"Transpose (semitone up)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NOTE_DOWN,"Transpose (semitone down"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_OCTAVE_UP,"Transpose (octave up)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_OCTAVE_DOWN,"Transpose (octave down)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECT_ALL,"Select all"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CUT,"Cut"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COPY,"Copy"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PASTE,"Paste"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP,"Move cursor up"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN,"Move cursor down"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_LEFT,"Move cursor left"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_RIGHT,"Move cursor right"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP_ONE,"Move cursor up by one (override Edit Step)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN_ONE,"Move cursor down by one (override Edit Step)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_LEFT_CHANNEL,"Move cursor to previous channel"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_RIGHT_CHANNEL,"Move cursor to next channel"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_PREVIOUS_CHANNEL,"Move cursor to previous channel (overflow)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_NEXT_CHANNEL,"Move cursor to next channel (overflow)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_BEGIN,"Move cursor to beginning of pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_END,"Move cursor to end of pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP_COARSE,"Move cursor up (coarse)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN_COARSE,"Move cursor down (coarse)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP,"Expand selection upwards"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN,"Expand selection downwards"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_LEFT,"Expand selection to the left"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_RIGHT,"Expand selection to the right"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP_ONE,"Expand selection upwards by one (override Edit Step)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN_ONE,"Expand selection downwards by one (override Edit Step)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_BEGIN,"Expand selection to beginning of pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_END,"Expand selection to end of pattern"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP_COARSE,"Expand selection upwards (coarse)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN_COARSE,"Expand selection downwards (coarse)"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_DELETE,"Delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PULL_DELETE,"Pull delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INSERT,"Insert"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_MUTE_CURSOR,"Mute channel at cursor"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SOLO_CURSOR,"Solo channel at cursor"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_UNMUTE_ALL,"Unmute all channels"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NEXT_ORDER,"Go to next order"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PREV_ORDER,"Go to previous order"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COLLAPSE,"Collapse channel at cursor"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INCREASE_COLUMNS,"Increase effect columns"); - UI_KEYBIND_CONFIG(GUI_ACTION_PAT_DECREASE_COLUMNS,"Decrease effect columns"); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NOTE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NOTE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_OCTAVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_OCTAVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECT_ALL); + 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_CURSOR_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_LEFT); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_RIGHT); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_LEFT_CHANNEL); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_RIGHT_CHANNEL); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_PREVIOUS_CHANNEL); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_NEXT_CHANNEL); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_BEGIN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_END); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_UP_COARSE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_CURSOR_DOWN_COARSE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_LEFT); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_RIGHT); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_BEGIN); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_END); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_UP_COARSE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SELECTION_DOWN_COARSE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PULL_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INSERT); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_MUTE_CURSOR); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_SOLO_CURSOR); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_UNMUTE_ALL); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_NEXT_ORDER); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_PREV_ORDER); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_COLLAPSE); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_INCREASE_COLUMNS); + UI_KEYBIND_CONFIG(GUI_ACTION_PAT_DECREASE_COLUMNS); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -858,16 +856,16 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Instrument list")) { KEYBIND_CONFIG_BEGIN("keysInsList"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_ADD,"Add"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DUPLICATE,"Duplicate"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_OPEN,"Open"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_SAVE,"Save"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_MOVE_UP,"Move up"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_MOVE_DOWN,"Move down"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DELETE,"Delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_EDIT,"Edit"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_UP,"Cursor up"); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DOWN,"Cursor down"); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_ADD); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DUPLICATE); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_OPEN); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_SAVE); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_MOVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_MOVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_LIST_DOWN); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -875,16 +873,16 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Wavetable list")) { KEYBIND_CONFIG_BEGIN("keysWaveList"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_ADD,"Add"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DUPLICATE,"Duplicate"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_OPEN,"Open"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_SAVE,"Save"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_MOVE_UP,"Move up"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_MOVE_DOWN,"Move down"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DELETE,"Delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_EDIT,"Edit"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_UP,"Cursor up"); - UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DOWN,"Cursor down"); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_ADD); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DUPLICATE); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_OPEN); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_SAVE); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_MOVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_MOVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_WAVE_LIST_DOWN); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -892,18 +890,18 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Sample list")) { KEYBIND_CONFIG_BEGIN("keysSampleList"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_ADD,"Add"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DUPLICATE,"Duplicate"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_OPEN,"Open"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_SAVE,"Save"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_MOVE_UP,"Move up"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN,"Move down"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DELETE,"Delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_EDIT,"Edit"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_UP,"Cursor up"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DOWN,"Cursor down"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_PREVIEW,"Preview"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW,"Stop preview"); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_ADD); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DUPLICATE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_OPEN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_SAVE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_MOVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_PREVIEW); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -911,23 +909,23 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Orders")) { KEYBIND_CONFIG_BEGIN("keysOrders"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_UP,"Previous order"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DOWN,"Next order"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_LEFT,"Cursor left"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_RIGHT,"Cursor right"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_INCREASE,"Increase value"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DECREASE,"Decrease value"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_EDIT_MODE,"Switch edit mode"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_LINK,"Toggle alter entire row"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_ADD,"Add"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DUPLICATE,"Duplicate"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DEEP_CLONE,"Deep clone"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DUPLICATE_END,"Duplicate to end of song"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DEEP_CLONE_END,"Deep clone to end of song"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_REMOVE,"Remove"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_MOVE_UP,"Move up"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_MOVE_DOWN,"Move down"); - UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_REPLAY,"Replay"); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_LEFT); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_RIGHT); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_INCREASE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DECREASE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_EDIT_MODE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_LINK); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_ADD); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DUPLICATE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DEEP_CLONE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DUPLICATE_END); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_DEEP_CLONE_END); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_REMOVE); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_MOVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_MOVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_ORDERS_REPLAY); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -935,33 +933,33 @@ void FurnaceGUI::drawSettings() { if (ImGui::TreeNode("Sample editor")) { KEYBIND_CONFIG_BEGIN("keysSampleEdit"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SELECT,"Edit mode: Select"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_DRAW,"Edit mode: Draw"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_CUT,"Cut"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_COPY,"Copy"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE,"Paste"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE_REPLACE,"Paste replace"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE_MIX,"Paste mix"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SELECT_ALL,"Select all"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_RESIZE,"Resize"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_RESAMPLE,"Resample"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_AMPLIFY,"Amplify"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_NORMALIZE,"Normalize"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FADE_IN,"Fade in"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FADE_OUT,"Fade out"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_INSERT,"Insert silence"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SILENCE,"Apply silence"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_DELETE,"Delete"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_TRIM,"Trim"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_REVERSE,"Reverse"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_INVERT,"Invert"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SIGN,"Signed/unsigned exchange"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FILTER,"Apply filter"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PREVIEW,"Preview sample"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_STOP_PREVIEW,"Stop sample preview"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_IN,"Zoom in"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_OUT,"Zoom out"); - UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_AUTO,"Toggle auto-zoom"); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SELECT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_DRAW); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_CUT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_COPY); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE_REPLACE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PASTE_MIX); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SELECT_ALL); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_RESIZE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_RESAMPLE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_AMPLIFY); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_NORMALIZE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FADE_IN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FADE_OUT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_INSERT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SILENCE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_DELETE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_TRIM); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_REVERSE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_INVERT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_SIGN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_FILTER); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_PREVIEW); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_STOP_PREVIEW); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_IN); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_OUT); + UI_KEYBIND_CONFIG(GUI_ACTION_SAMPLE_ZOOM_AUTO); KEYBIND_CONFIG_END; ImGui::TreePop(); @@ -2071,4 +2069,4 @@ void FurnaceGUI::applyUISettings() { if (fileDialog!=NULL) delete fileDialog; fileDialog=new FurnaceGUIFileDialog(settings.sysFileDialog); -} \ No newline at end of file +}