diff --git a/src/gui/commandPalette.cpp b/src/gui/commandPalette.cpp index d0d61c39a..fcea3e3a6 100644 --- a/src/gui/commandPalette.cpp +++ b/src/gui/commandPalette.cpp @@ -25,10 +25,31 @@ #include #include "../ta-log.h" -static std::vector paletteItems; +enum CommandPaletteType { + CMDPAL_TYPE_MAIN = 0, + CMDPAL_TYPE_RECENT, + // TODO +}; -static inline bool matchFuzzy(const char* haystack, const char* needle) { - // TODO: case insensitivity +enum CommandPaletteExtraAction { + CMDPAL_EXTRA_RECENT = 0, + CMDPAL_EXTRA_MAX, +}; + +struct CommandPaletteExtraDef { + const char* name; + const char* friendlyName; + CommandPaletteExtraDef(const char* n, const char* fn): + name(n), friendlyName(fn) {} +}; + +#define D CommandPaletteExtraDef +const CommandPaletteExtraDef commandPaletteExtras[CMDPAL_EXTRA_MAX] = { + D("CMDPAL_EXTRA_RECENT", "Recent files"), +}; +#undef D + +static inline bool matchFuzzy(const char* haystack,const char* needle) { size_t h_i=0; // haystack idx size_t n_i=0; // needle idx while (needle[n_i]!='\0') { @@ -44,13 +65,6 @@ static inline bool matchFuzzy(const char* haystack, const char* needle) { void FurnaceGUI::drawPalette() { bool accepted=false; - if (paletteFirstFrame) { - paletteItems.clear(); - for (int i=0; i=paletteSearchResults.size()) { + if (curPaletteChoice>=(int)paletteSearchResults.size()) { curPaletteChoice=paletteSearchResults.size()-1; } if (ImGui::IsKeyPressed(ImGuiKey_Enter)) { + // TODO: properly test this - what happens when enter is pressed and the list is empty? accepted=true; } } @@ -105,11 +154,48 @@ void FurnaceGUI::drawPalette() { } if (accepted) { - int action=paletteSearchResults[curPaletteChoice]; - logD("Chose: %s", guiActions[action].friendlyName); - doAction(action); - ImGui::CloseCurrentPopup(); - } + int i=paletteSearchResults[curPaletteChoice]; - paletteFirstFrame=false; + switch (curPaletteType) { + case CMDPAL_TYPE_MAIN: + if (i0) { + showError(fmt::sprintf("Error while loading file! (%s)",lastError)); + } + } + ImGui::CloseCurrentPopup(); + break; + + default: + // TODO: PANIC! DIE! PERISH! + break; + }; + } else { + paletteFirstFrame=false; + } } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index ae19b8ec9..bf15f50ae 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5085,6 +5085,7 @@ bool FurnaceGUI::loop() { paletteQuery=""; paletteFirstFrame=true; curPaletteChoice=0; + curPaletteType=0; displayPalette=false; ImGui::OpenPopup("Command Palette"); } @@ -6674,6 +6675,7 @@ FurnaceGUI::FurnaceGUI(): curGroove(-1), exitDisabledTimer(0), curPaletteChoice(0), + curPaletteType(0), soloTimeout(0.0f), exportFadeOut(5.0), editControlsOpen(true), diff --git a/src/gui/gui.h b/src/gui/gui.h index d3868d762..3bac297f3 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1696,7 +1696,7 @@ class FurnaceGUI { int loopOrder, loopRow, loopEnd, isClipping, extraChannelButtons, newSongCategory, latchTarget; int wheelX, wheelY, dragSourceX, dragSourceXFine, dragSourceY, dragDestinationX, dragDestinationXFine, dragDestinationY, oldBeat, oldBar; int curGroove, exitDisabledTimer; - size_t curPaletteChoice; + int curPaletteChoice, curPaletteType; float soloTimeout; double exportFadeOut;