Add search and A-Z sort to Plandomizer item filter

This commit is contained in:
2026-04-02 21:09:37 -06:00
parent 5a10fd3540
commit 46a09d1769

View File

@@ -34,6 +34,7 @@ static int32_t getTabID = TAB_HINTS;
static int32_t selectedItemFilterIndex = 0;
static std::vector<RandomizerGet> itemFilterList;
static std::vector<std::string> 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<std::pair<std::string, RandomizerGet>> 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()