Implement extra search index.

Add various controls, audio editor, and tracker options to the extra search index.
Fix capitalization on a few options.
Add click-to-view functionality to extra search column.
This commit is contained in:
Malkierian 2025-07-05 20:01:08 -07:00
commit 1ffa08dac5
10 changed files with 142 additions and 17 deletions

View file

@ -437,7 +437,8 @@ void PresetsCustomWidget(WidgetInfo& info) {
void RegisterPresetsWidgets() { void RegisterPresetsWidgets() {
SohGui::mSohMenu->AddSidebarEntry("Settings", "Presets", 1); SohGui::mSohMenu->AddSidebarEntry("Settings", "Presets", 1);
WidgetPath path = { "Settings", "Presets", SECTION_COLUMN_1 }; WidgetPath path = { "Settings", "Presets", SECTION_COLUMN_1 };
SohGui::mSohMenu->AddWidget(path, "PresetsWidget", WIDGET_CUSTOM).CustomFunction(PresetsCustomWidget) SohGui::mSohMenu->AddWidget(path, "PresetsWidget", WIDGET_CUSTOM)
.CustomFunction(PresetsCustomWidget)
.HideInSearch(true); .HideInSearch(true);
presetFolder = Ship::Context::GetInstance()->GetPathRelativeToAppDirectory("presets"); presetFolder = Ship::Context::GetInstance()->GetPathRelativeToAppDirectory("presets");
std::fill_n(saveSection, PRESET_SECTION_MAX, true); std::fill_n(saveSection, PRESET_SECTION_MAX, true);

View file

@ -550,7 +550,7 @@ void AudioEditor::DrawElement() {
.DefaultValue(5) .DefaultValue(5)
.Size(ImVec2(300.0f, 0.0f)) .Size(ImVec2(300.0f, 0.0f))
.Color(THEME_COLOR)); .Color(THEME_COLOR));
UIWidgets::CVarSliderFloat("Link's voice pitch multiplier", CVAR_AUDIO("LinkVoiceFreqMultiplier"), UIWidgets::CVarSliderFloat("Link's Voice Pitch Multiplier", CVAR_AUDIO("LinkVoiceFreqMultiplier"),
UIWidgets::FloatSliderOptions() UIWidgets::FloatSliderOptions()
.IsPercentage() .IsPercentage()
.Min(0.4f) .Min(0.4f)

View file

@ -2089,7 +2089,7 @@ void CheckTrackerSettingsWindow::DrawElement() {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x);
UIWidgets::CVarColorPicker("BG Color", CVAR_TRACKER_CHECK("BgColor"), Color_Bg_Default, true, UIWidgets::CVarColorPicker("Background Color", CVAR_TRACKER_CHECK("BgColor"), Color_Bg_Default, true,
UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRandomButton, THEME_COLOR); UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRandomButton, THEME_COLOR);
ImGui::PopItemWidth(); ImGui::PopItemWidth();
@ -2103,7 +2103,7 @@ void CheckTrackerSettingsWindow::DrawElement() {
if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) { if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) {
UIWidgets::CVarCheckbox("Enable Dragging", CVAR_TRACKER_CHECK("Draggable"), UIWidgets::CVarCheckbox("Enable Dragging", CVAR_TRACKER_CHECK("Draggable"),
UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CheckboxOptions().Color(THEME_COLOR));
UIWidgets::CVarCheckbox("Only enable while paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"), UIWidgets::CVarCheckbox("Only Enable While Paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"),
UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CheckboxOptions().Color(THEME_COLOR));
UIWidgets::CVarCombobox("Display Mode", CVAR_TRACKER_CHECK("DisplayType"), displayType, UIWidgets::CVarCombobox("Display Mode", CVAR_TRACKER_CHECK("DisplayType"), displayType,
UIWidgets::ComboboxOptions() UIWidgets::ComboboxOptions()
@ -2135,7 +2135,7 @@ void CheckTrackerSettingsWindow::DrawElement() {
.Color(THEME_COLOR)); .Color(THEME_COLOR));
ImGui::EndDisabled(); ImGui::EndDisabled();
if (UIWidgets::CVarCheckbox( if (UIWidgets::CVarCheckbox(
"Hide unshuffled shop item checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), "Hide Unshuffled Shop Item Checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"),
UIWidgets::CheckboxOptions() UIWidgets::CheckboxOptions()
.Tooltip("If enabled, will prevent the tracker from displaying slots with non-shop-item shuffles.") .Tooltip("If enabled, will prevent the tracker from displaying slots with non-shop-item shuffles.")
.Color(THEME_COLOR))) { .Color(THEME_COLOR))) {
@ -2143,7 +2143,7 @@ void CheckTrackerSettingsWindow::DrawElement() {
UpdateFilters(); UpdateFilters();
} }
if (UIWidgets::CVarCheckbox( if (UIWidgets::CVarCheckbox(
"Always show gold skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), "Always Show Gold Skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"),
UIWidgets::CheckboxOptions() UIWidgets::CheckboxOptions()
.Tooltip("If enabled, will show GS locations in the tracker regardless of tokensanity settings.") .Tooltip("If enabled, will show GS locations in the tracker regardless of tokensanity settings.")
.Color(THEME_COLOR))) { .Color(THEME_COLOR))) {

View file

@ -1759,7 +1759,7 @@ void ItemTrackerSettingsWindow::DrawElement() {
if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) { if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) {
shouldUpdateVectors = true; shouldUpdateVectors = true;
} }
if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"), if (CVarCheckbox("Only Enable While Paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"),
CheckboxOptions().Color(THEME_COLOR))) { CheckboxOptions().Color(THEME_COLOR))) {
shouldUpdateVectors = true; shouldUpdateVectors = true;
} }

View file

@ -24,11 +24,19 @@ namespace SohGui {
extern std::shared_ptr<SohModalWindow> mModalWindow; extern std::shared_ptr<SohModalWindow> mModalWindow;
} }
std::vector<SearchEntry> extraSearches = {};
namespace Ship { namespace Ship {
std::string disabledTempTooltip; std::string disabledTempTooltip;
const char* disabledTooltip; const char* disabledTooltip;
bool disabledValue = false; bool disabledValue = false;
bool navigateToWidget = false;
const char* navigateMainEntry = "";
const char* navigateSidebar = "";
std::string navigateWidgetName = "";
bool highlightWidget = false;
bool operator==(Color_RGB8 const& l, Color_RGB8 const& r) noexcept { bool operator==(Color_RGB8 const& l, Color_RGB8 const& r) noexcept {
return l.r == r.r && l.g == r.g && l.b == r.b; return l.r == r.r && l.g == r.g && l.b == r.b;
} }
@ -186,9 +194,12 @@ bool ModernMenuHeaderEntry(std::string label) {
uint32_t Menu::DrawSearchResults(std::string& menuSearchText) { uint32_t Menu::DrawSearchResults(std::string& menuSearchText) {
int searchCount = 0; int searchCount = 0;
ImGui::SetNextWindowSizeConstraints({ ImGui::GetContentRegionAvail().x / 2, 0}, {ImGui::GetContentRegionAvail().x / 2, ImGui::GetContentRegionAvail().y}); std::transform(menuSearchText.begin(), menuSearchText.end(), menuSearchText.begin(), ::tolower);
if (ImGui::BeginChild("Search Results Col 1", { ImGui::GetContentRegionAvail().x / 2, windowHeight * 4 }, ImGuiChildFlags_AutoResizeY, menuSearchText.erase(std::remove(menuSearchText.begin(), menuSearchText.end(), ' '), menuSearchText.end());
ImGuiWindowFlags_NoTitleBar)) { ImGui::SetNextWindowSizeConstraints({ ImGui::GetContentRegionAvail().x / 2, 0 },
{ ImGui::GetContentRegionAvail().x / 2, ImGui::GetContentRegionAvail().y });
if (ImGui::BeginChild("Search Results Col 1", { ImGui::GetContentRegionAvail().x / 2, 0 },
ImGuiChildFlags_AutoResizeY, ImGuiWindowFlags_NoTitleBar)) {
for (auto& menuLabel : menuOrder) { for (auto& menuLabel : menuOrder) {
auto& menuEntry = menuEntries.at(menuLabel); auto& menuEntry = menuEntries.at(menuLabel);
for (auto& sidebarLabel : menuEntry.sidebarOrder) { for (auto& sidebarLabel : menuEntry.sidebarOrder) {
@ -197,19 +208,15 @@ uint32_t Menu::DrawSearchResults(std::string& menuSearchText) {
auto& column = sidebar.columnWidgets.at(i); auto& column = sidebar.columnWidgets.at(i);
for (auto& info : column) { for (auto& info : column) {
if (info.type == WIDGET_SEARCH || info.type == WIDGET_SEPARATOR || if (info.type == WIDGET_SEARCH || info.type == WIDGET_SEPARATOR ||
info.type == WIDGET_SEPARATOR_TEXT || info.isHidden || info.type == WIDGET_SEPARATOR_TEXT || info.isHidden || info.hideInSearch) {
info.hideInSearch) {
continue; continue;
} }
const char* tooltip = info.options->tooltip; const char* tooltip = info.options->tooltip;
std::string widgetStr = std::string(info.name) + std::string(tooltip != NULL ? tooltip : ""); std::string widgetStr = std::string(info.name) + std::string(tooltip != NULL ? tooltip : "");
std::transform(menuSearchText.begin(), menuSearchText.end(), menuSearchText.begin(), ::tolower);
menuSearchText.erase(std::remove(menuSearchText.begin(), menuSearchText.end(), ' '),
menuSearchText.end());
std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower); std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower);
widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end()); widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end());
if (widgetStr.find(menuSearchText) != std::string::npos) { if (widgetStr.find(menuSearchText) != std::string::npos) {
MenuDrawItem(info, 90 / sidebar.columnCount, menuThemeIndex); MenuDrawItem(info, 400, menuThemeIndex);
ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray)); ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray));
std::string origin = std::string origin =
fmt::format(" ({} -> {}, Col {})", menuEntry.label, sidebarLabel, i + 1); fmt::format(" ({} -> {}, Col {})", menuEntry.label, sidebarLabel, i + 1);
@ -223,6 +230,41 @@ uint32_t Menu::DrawSearchResults(std::string& menuSearchText) {
} }
ImGui::EndChild(); ImGui::EndChild();
} }
ImGui::SameLine();
ImGui::SetNextWindowSizeConstraints({ ImGui::GetContentRegionAvail().x, 0 },
{ ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y });
if (ImGui::BeginChild("Search Results Col 2", { ImGui::GetContentRegionAvail().x, 0 }, ImGuiChildFlags_AutoResizeY,
ImGuiWindowFlags_NoTitleBar)) {
for (auto& entry : extraSearches) {
std::string widgetStr = entry.widgetName + entry.extraTerms + entry.sidebarName;
std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower);
widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end());
if (widgetStr.find(menuSearchText) != std::string::npos) {
std::string origin = fmt::format(" ({} -> {}, {})", entry.menuName, entry.sidebarName, entry.location);
ImVec2 textSize = ImGui::CalcTextSize(origin.c_str());
ImVec2 pos = ImGui::GetCurrentWindow()->DC.CursorPos;
ImRect bb = { pos, { pos.x + textSize.x, pos.y + (textSize.y * 2) + ImGui::GetStyle().ItemSpacing.y } };
const ImGuiID igid =
ImGui::GetCurrentWindow()->GetID(std::string(entry.widgetName + "##" + entry.sidebarName).c_str());
ImGui::ItemSize(bb, ImGui::GetStyle().FramePadding.y);
ImGui::ItemAdd(bb, igid);
if (ImGui::ButtonBehavior(bb, igid, NULL, NULL)) {
navigateToWidget = true;
navigateMainEntry = entry.menuName.c_str();
navigateSidebar = entry.sidebarName.c_str();
navigateWidgetName = entry.widgetName;
break;
}
ImGui::GetCurrentWindow()->DC.CursorPos = pos;
ImGui::Text("%s", entry.widgetName.c_str());
ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray));
ImGui::Text("%s", origin.c_str());
ImGui::PopStyleColor();
searchCount++;
}
}
ImGui::EndChild();
}
return searchCount; return searchCount;
} }
@ -231,6 +273,10 @@ void Menu::AddMenuEntry(std::string entryName, const char* entryCvar) {
menuOrder.push_back(entryName); menuOrder.push_back(entryName);
} }
void Menu::AddSearchEntry(SearchEntry entry) {
extraSearches.push_back(entry);
}
std::unordered_map<uint32_t, disabledInfo>& Menu::GetDisabledMap() { std::unordered_map<uint32_t, disabledInfo>& Menu::GetDisabledMap() {
return disabledMap; return disabledMap;
} }
@ -503,6 +549,19 @@ void Menu::DrawElement() {
for (auto& [reason, info] : disabledMap) { for (auto& [reason, info] : disabledMap) {
info.active = info.evaluation(info); info.active = info.evaluation(info);
} }
const char* headerCvar = CVAR_SETTING("Menu.ActiveHeader");
if (navigateToWidget) {
if (menuEntries.contains(navigateMainEntry) &&
menuEntries.at(navigateMainEntry).sidebars.contains(navigateSidebar)) {
menuSearch.Clear();
CVarSetString(headerCvar, navigateMainEntry);
const char* sidebarCvar = menuEntries.at(navigateMainEntry).sidebarCvar;
CVarSetString(sidebarCvar, navigateSidebar);
highlightWidget = true;
}
navigateToWidget = false;
}
raceDisableActive = CVarGetInteger(CVAR_SETTING("DisableChanges"), 0); raceDisableActive = CVarGetInteger(CVAR_SETTING("DisableChanges"), 0);
@ -570,7 +629,6 @@ void Menu::DrawElement() {
ImGui::PushFont(OTRGlobals::Instance->fontStandardLargest); ImGui::PushFont(OTRGlobals::Instance->fontStandardLargest);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 8.0f)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 8.0f));
const char* headerCvar = CVAR_SETTING("Menu.ActiveHeader");
std::string headerIndex = CVarGetString(headerCvar, "Settings"); std::string headerIndex = CVarGetString(headerCvar, "Settings");
ImVec2 pos = window->DC.CursorPos; ImVec2 pos = window->DC.CursorPos;
float centerX = pos.x + windowWidth / 2 - (style.ItemSpacing.x * (menuEntries.size() + 1)); float centerX = pos.x + windowWidth / 2 - (style.ItemSpacing.x * (menuEntries.size() + 1));

View file

@ -26,6 +26,7 @@ class Menu : public GuiWindow {
void MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors menuThemeIndex); void MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors menuThemeIndex);
void AddMenuEntry(std::string entryName, const char* entryCvar); void AddMenuEntry(std::string entryName, const char* entryCvar);
void AddSearchEntry(SearchEntry entry);
std::unordered_map<uint32_t, disabledInfo>& GetDisabledMap(); std::unordered_map<uint32_t, disabledInfo>& GetDisabledMap();
protected: protected:

View file

@ -286,6 +286,15 @@ struct MenuInit {
} }
}; };
struct SearchEntry {
// First four required
std::string widgetName;
std::string menuName;
std::string sidebarName;
std::string location;
std::string extraTerms = "";
};
struct RegisterMenuInitFunc { struct RegisterMenuInitFunc {
RegisterMenuInitFunc(std::function<void()> initFunc) { RegisterMenuInitFunc(std::function<void()> initFunc) {
auto& menuInitFuncs = MenuInit::GetInitFuncs(); auto& menuInitFuncs = MenuInit::GetInitFuncs();

View file

@ -1882,6 +1882,16 @@ void SohMenu::AddMenuEnhancements() {
.CVar(timer.timeEnable) .CVar(timer.timeEnable)
.Callback([](WidgetInfo& info) { TimeDisplayUpdateDisplayOptions(); }); .Callback([](WidgetInfo& info) { TimeDisplayUpdateDisplayOptions(); });
} }
AddSearchEntry({ "Mute Low HP Alarm", "Enhancements", "Audio Editor", "Audio Options" });
AddSearchEntry({ "Disable Navi Audio Call", "Enhancements", "Audio Editor", "Audio Options", "mute" });
AddSearchEntry({ "Disable Enemy Proximity Music", "Enhancements", "Audio Editor", "Audio Options", "mute" });
AddSearchEntry({ "Disable Leading Music in Lost Woods", "Enhancements", "Audio Editor", "Audio Options", "mute" });
AddSearchEntry({ "Overlay Duration", "Enhancements", "Audio Editor", "Audio Options", "sequencetracktitle" });
AddSearchEntry({ "Link's Voice Pitch Multiplier", "Enhancements", "Audio Editor", "Audio Options" });
AddSearchEntry(
{ "Randomize All Music and Sound Effects on New Scene", "Enhancements", "Audio Editor", "Audio Options" });
AddSearchEntry({ "Lower Octaves of Unplayable High Notes", "Enhancements", "Audio Editor", "Audio Options" });
} }
} // namespace SohGui } // namespace SohGui

View file

@ -167,6 +167,45 @@ void SohMenu::AddMenuRandomizer() {
.WindowName("Check Tracker Settings") .WindowName("Check Tracker Settings")
.HideInSearch(true) .HideInSearch(true)
.Options(WindowButtonOptions().Tooltip("Enables the separate Check Tracker Settings Window.")); .Options(WindowButtonOptions().Tooltip("Enables the separate Check Tracker Settings Window."));
AddSearchEntry({ "Background Color", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Window Type", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Enable Dragging", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Only Enable While Paused", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Ammo/Capacity Tracking", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Key Count Tracking", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Triforce Piece Count Tracking", "Randomizer", "Item Tracker", "General Settings" });
AddSearchEntry({ "Dungeon Items", "Randomizer", "Item Tracker", "General Settings", "keys maps compasses icon" });
AddSearchEntry({ "Greg", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Triforce Pieces", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Boss Souls", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Ocarina Buttons", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Overworld Keys", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Fishing Pole", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Personal Notes", "Randomizer", "Item Tracker", "General Settings", "icon" });
AddSearchEntry({ "Show Hookshot Identifiers", "Randomizer", "Item Tracker", "General Settings", "longshot icon" });
AddSearchEntry({ "Sort By", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Auto Scroll", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Highlight Previous", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Highlight Available", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Hide Undiscovered", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Hide Reverse", "Randomizer", "Entrance Tracker", "(Col 1)" });
AddSearchEntry({ "Group By", "Randomizer", "Entrance Tracker", "(Col 2)" });
AddSearchEntry({ "Show Source", "Randomizer", "Entrance Tracker", "(Col 2)", "spoil" });
AddSearchEntry({ "Show Destination", "Randomizer", "Entrance Tracker", "(Col 2)", "spoil" });
AddSearchEntry({ "Background Color", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Window Type", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Vanilla/MQ Dungeon Spoilers", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Hide Unshuffled Shop Item Checks", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Always Show Gold Skulltulas", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Show Logic", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Display Check Availability", "Randomizer", "Check Tracker", "General Settings" });
AddSearchEntry({ "Area Complete", "Randomizer", "Check Tracker", "Section Settings", "hide" });
AddSearchEntry({ "Skipped", "Randomizer", "Check Tracker", "Section Settings", "hide" });
AddSearchEntry({ "Scummed", "Randomizer", "Check Tracker", "Section Settings", "hide" });
AddSearchEntry({ "Saved", "Randomizer", "Check Tracker", "Section Settings", "hide" });
} }
} // namespace SohGui } // namespace SohGui

View file

@ -487,6 +487,13 @@ void SohMenu::AddMenuSettings() {
}); });
}) })
.Options(ButtonOptions().Tooltip("Displays a test notification.")); .Options(ButtonOptions().Tooltip("Displays a test notification."));
AddSearchEntry({ "Free Look", "Settings", "Controls", "Camera Controls" });
AddSearchEntry({ "Enable Mouse Controls", "Settings", "Controls", "Camera Controls" });
AddSearchEntry({ "Right Stick Ocarina Playback", "Settings", "Controls", "Ocarina Controls" });
AddSearchEntry({ "Dpad Ocarina Playback", "Settings", "Controls", "Ocarina Controls" });
AddSearchEntry({ "Dpad Support on Pause Menu", "Settings", "Controls", "Dpad Controls" });
AddSearchEntry({ "Dpad Support in Text Boxes", "Settings", "Controls", "Dpad Controls" });
} }
} // namespace SohGui } // namespace SohGui