diff options
author | isXander <isxander@users.noreply.github.com> | 2022-09-17 17:01:40 +0100 |
---|---|---|
committer | isXander <isxander@users.noreply.github.com> | 2022-09-17 17:01:40 +0100 |
commit | 75738ac0b44d0baeee0cee7f9e59c6acb85bf1b3 (patch) | |
tree | c7b6eb8e80a471424a1f0811a82dd9a854600cb0 /src/main/java | |
parent | 6968a175607e885e1846db902a5589f48feb440e (diff) | |
download | YetAnotherConfigLib-75738ac0b44d0baeee0cee7f9e59c6acb85bf1b3.tar.gz YetAnotherConfigLib-75738ac0b44d0baeee0cee7f9e59c6acb85bf1b3.tar.bz2 YetAnotherConfigLib-75738ac0b44d0baeee0cee7f9e59c6acb85bf1b3.zip |
better search
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/dev/isxander/yacl/gui/OptionListWidget.java | 15 | ||||
-rw-r--r-- | src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java | 21 |
2 files changed, 32 insertions, 4 deletions
diff --git a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java index 0c9baf5..a947f61 100644 --- a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java +++ b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java @@ -29,6 +29,7 @@ import java.util.function.Supplier; public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry> { private final YACLScreen yaclScreen; + private boolean singleCategory = false; public OptionListWidget(YACLScreen screen, MinecraftClient client, int width, int height) { super(client, width / 3 * 2, height, 0, height, 22); @@ -48,6 +49,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry> } else { categories.add(yaclScreen.config.categories().get(yaclScreen.currentCategoryIdx)); } + singleCategory = categories.size() == 1; for (ConfigCategory category : categories) { for (OptionGroup group : category.groups()) { @@ -63,7 +65,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry> List<OptionEntry> optionEntries = new ArrayList<>(); for (Option<?> option : group.options()) { - OptionEntry entry = new OptionEntry(option.controller().provideWidget(yaclScreen, Dimension.ofInt(getRowLeft(), 0, getRowWidth(), 20)), viewableSupplier); + OptionEntry entry = new OptionEntry(category, group, option.controller().provideWidget(yaclScreen, Dimension.ofInt(getRowLeft(), 0, getRowWidth(), 20)), viewableSupplier); addEntry(entry); optionEntries.add(entry); } @@ -229,11 +231,16 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry> } } - private class OptionEntry extends Entry { + public class OptionEntry extends Entry { + public final ConfigCategory category; + public final OptionGroup group; + public final AbstractWidget widget; private final Supplier<Boolean> viewableSupplier; - public OptionEntry(AbstractWidget widget, Supplier<Boolean> viewableSupplier) { + private OptionEntry(ConfigCategory category, OptionGroup group, AbstractWidget widget, Supplier<Boolean> viewableSupplier) { + this.category = category; + this.group = group; this.widget = widget; this.viewableSupplier = viewableSupplier; } @@ -267,7 +274,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry> @Override public boolean isViewable() { - return viewableSupplier.get() && widget.matchesSearch(yaclScreen.searchFieldWidget.getText().trim()); + return viewableSupplier.get() && yaclScreen.searchFieldWidget.matches(this, singleCategory); } @Override diff --git a/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java b/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java index 2af677d..2405dbd 100644 --- a/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java +++ b/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java @@ -1,5 +1,7 @@ package dev.isxander.yacl.gui; +import dev.isxander.yacl.api.ConfigCategory; +import dev.isxander.yacl.api.OptionGroup; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.util.math.MatrixStack; @@ -45,6 +47,25 @@ public class SearchFieldWidget extends TextFieldWidget { super.eraseCharacters(characterOffset); } + public boolean matches(OptionListWidget.OptionEntry optionEntry, boolean ignoreCategory) { + return (matchesCategory(optionEntry.category) && !ignoreCategory) || matchesGroup(optionEntry.group) || matchesWidget(optionEntry.widget); + } + + public boolean matchesCategory(ConfigCategory category) { + return category.name().getString().toLowerCase().contains(getText().trim()); + } + + public boolean matchesGroup(OptionGroup group) { + if (group.isRoot()) + return false; + + return group.name().getString().toLowerCase().contains(getText().trim()); + } + + public boolean matchesWidget(AbstractWidget widget) { + return widget.matchesSearch(getText().trim()); + } + public Text getEmptyText() { return emptyText; } |