diff --git a/soh/soh/Enhancements/randomizer/Plandomizer.cpp b/soh/soh/Enhancements/randomizer/Plandomizer.cpp index 597d7d384..0d0991889 100644 --- a/soh/soh/Enhancements/randomizer/Plandomizer.cpp +++ b/soh/soh/Enhancements/randomizer/Plandomizer.cpp @@ -34,6 +34,7 @@ static int32_t getTabID = TAB_HINTS; static int32_t selectedItemFilterIndex = 0; static std::vector itemFilterList; static std::vector itemFilterNames; +static char itemFilterSearch[64] = ""; void PlandomizerPopulateItemFilterMap(); @@ -1081,11 +1082,53 @@ void PlandomizerDrawOptions() { ImGui::EndCombo(); } ImGui::SameLine(); + ImGui::SetNextItemWidth(150); + if (ImGui::InputText("##ItemSearch", itemFilterSearch, sizeof(itemFilterSearch), ImGuiInputTextFlags_EnterReturnsTrue)) { + if (strlen(itemFilterSearch) > 0) { + for (int i = 0; i < (int32_t)itemFilterNames.size(); i++) { + std::string lowerSearch = itemFilterSearch; + std::transform(lowerSearch.begin(), lowerSearch.end(), lowerSearch.begin(), ::tolower); + std::string lowerName = itemFilterNames[i]; + std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), ::tolower); + if (lowerName.find(lowerSearch) != std::string::npos) { + selectedItemFilterIndex = i; + break; + } + } + } + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Type to search and press Enter"); + } + ImGui::SameLine(); + if (UIWidgets::Button("A-Z", UIWidgets::ButtonOptions() + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(8.f, 6.f)) + .Tooltip("Sort items A-Z"))) { + std::vector> sorted; + for (size_t i = 1; i < itemFilterNames.size(); i++) { + sorted.push_back({ itemFilterNames[i], itemFilterList[i] }); + } + std::sort(sorted.begin(), sorted.end(), [](const auto& a, const auto& b) { + return a.first < b.first; + }); + itemFilterList.clear(); + itemFilterNames.clear(); + itemFilterList.push_back(RG_NONE); + itemFilterNames.push_back("All Items"); + for (const auto& pair : sorted) { + itemFilterList.push_back(pair.second); + itemFilterNames.push_back(pair.first); + } + } + ImGui::SameLine(); if (UIWidgets::Button("Clear Item Filter", UIWidgets::ButtonOptions() .Color(THEME_COLOR) .Size(UIWidgets::Sizes::Inline) .Padding(ImVec2(10.f, 6.f)))) { selectedItemFilterIndex = 0; + itemFilterSearch[0] = '\0'; } ImGui::SameLine(); if (UIWidgets::Button("Empty All Rewards", UIWidgets::ButtonOptions()