aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/dev/isxander/yacl/gui
diff options
context:
space:
mode:
authorxander <xander@isxander.dev>2022-09-20 21:50:48 +0100
committerxander <xander@isxander.dev>2022-09-20 21:50:48 +0100
commit36891bb4f9e6aedacf8f79bc1b18b0402845f3a8 (patch)
tree2d1c71aa9cbadb693213531f3388877cc9a0f1fd /src/main/java/dev/isxander/yacl/gui
parent2ffdf3ecb7890adb796c81808655dbbd624b25bb (diff)
downloadYetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.tar.gz
YetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.tar.bz2
YetAnotherConfigLib-36891bb4f9e6aedacf8f79bc1b18b0402845f3a8.zip
1.4.2
Diffstat (limited to 'src/main/java/dev/isxander/yacl/gui')
-rw-r--r--src/main/java/dev/isxander/yacl/gui/OptionListWidget.java14
-rw-r--r--src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java44
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java7
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java1
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java5
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java1
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java1
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java1
-rw-r--r--src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java2
9 files changed, 39 insertions, 37 deletions
diff --git a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
index 729e063..7789520 100644
--- a/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
+++ b/src/main/java/dev/isxander/yacl/gui/OptionListWidget.java
@@ -233,11 +233,16 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
public final AbstractWidget widget;
private final Supplier<Boolean> viewableSupplier;
+ private final String categoryName;
+ private final String groupName;
+
private OptionEntry(ConfigCategory category, OptionGroup group, AbstractWidget widget, Supplier<Boolean> viewableSupplier) {
this.category = category;
this.group = group;
this.widget = widget;
this.viewableSupplier = viewableSupplier;
+ this.categoryName = category.name().getString().toLowerCase();
+ this.groupName = group.name().getString().toLowerCase();
}
@Override
@@ -269,7 +274,12 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
@Override
public boolean isViewable() {
- return viewableSupplier.get() && yaclScreen.searchFieldWidget.matches(this, singleCategory);
+ String query = yaclScreen.searchFieldWidget.getText();
+ return viewableSupplier.get()
+ && (yaclScreen.searchFieldWidget.isEmpty()
+ || (!singleCategory && categoryName.contains(query))
+ || groupName.contains(query)
+ || widget.matchesSearch(query));
}
@Override
@@ -353,7 +363,7 @@ public class OptionListWidget extends ElementListWidget<OptionListWidget.Entry>
@Override
public boolean isViewable() {
- return yaclScreen.searchFieldWidget.getText().isEmpty() || optionEntries.stream().anyMatch(OptionEntry::isViewable);
+ return yaclScreen.searchFieldWidget.isEmpty() || optionEntries.stream().anyMatch(OptionEntry::isViewable);
}
@Override
diff --git a/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java b/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java
index 2405dbd..1f0f49b 100644
--- a/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java
+++ b/src/main/java/dev/isxander/yacl/gui/SearchFieldWidget.java
@@ -1,7 +1,5 @@
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;
@@ -12,8 +10,11 @@ public class SearchFieldWidget extends TextFieldWidget {
private final YACLScreen yaclScreen;
private final TextRenderer textRenderer;
+ private boolean isEmpty = true;
+
public SearchFieldWidget(YACLScreen yaclScreen, TextRenderer textRenderer, int x, int y, int width, int height, Text text, Text emptyText) {
super(textRenderer, x, y, width, height, text);
+ setTextPredicate(string -> !string.endsWith(" ") && !string.startsWith(" "));
this.yaclScreen = yaclScreen;
this.textRenderer = textRenderer;
this.emptyText = emptyText;
@@ -22,48 +23,41 @@ public class SearchFieldWidget extends TextFieldWidget {
@Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
super.renderButton(matrices, mouseX, mouseY, delta);
- if (isVisible() && getText().isEmpty()) {
+ if (isVisible() && isEmpty()) {
textRenderer.drawWithShadow(matrices, emptyText, x + 4, this.y + (this.height - 8) / 2f, 0x707070);
}
}
@Override
public void write(String text) {
- yaclScreen.optionList.setScrollAmount(0);
- yaclScreen.categoryList.setScrollAmount(0);
- for (OptionListWidget.Entry entry : yaclScreen.optionList.children()) {
- if (entry instanceof OptionListWidget.GroupSeparatorEntry groupSeparatorEntry) {
- groupSeparatorEntry.setExpanded(true);
- }
- }
+ update();
super.write(text);
+
+ isEmpty = getText().isEmpty();
}
@Override
public void eraseCharacters(int characterOffset) {
- yaclScreen.optionList.setScrollAmount(0);
+ update();
super.eraseCharacters(characterOffset);
- }
- public boolean matches(OptionListWidget.OptionEntry optionEntry, boolean ignoreCategory) {
- return (matchesCategory(optionEntry.category) && !ignoreCategory) || matchesGroup(optionEntry.group) || matchesWidget(optionEntry.widget);
+ isEmpty = getText().isEmpty();
}
- 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());
+ private void update() {
+ yaclScreen.optionList.setScrollAmount(0);
+ yaclScreen.categoryList.setScrollAmount(0);
+ for (OptionListWidget.Entry entry : yaclScreen.optionList.children()) {
+ if (entry instanceof OptionListWidget.GroupSeparatorEntry groupSeparatorEntry) {
+ groupSeparatorEntry.setExpanded(true);
+ }
+ }
}
- public boolean matchesWidget(AbstractWidget widget) {
- return widget.matchesSearch(getText().trim());
+ public boolean isEmpty() {
+ return isEmpty;
}
public Text getEmptyText() {
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java b/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
index ee3f988..6207f03 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/ActionController.java
@@ -6,7 +6,6 @@ import dev.isxander.yacl.api.utils.Dimension;
import dev.isxander.yacl.gui.AbstractWidget;
import dev.isxander.yacl.gui.YACLScreen;
import net.minecraft.text.Text;
-import org.jetbrains.annotations.ApiStatus;
import org.lwjgl.glfw.GLFW;
import java.util.function.BiConsumer;
@@ -67,10 +66,12 @@ public class ActionController implements Controller<BiConsumer<YACLScreen, Butto
return new ActionControllerElement(this, screen, widgetDimension);
}
- @ApiStatus.Internal
public static class ActionControllerElement extends ControllerWidget<ActionController> {
+ private final String buttonString;
+
public ActionControllerElement(ActionController control, YACLScreen screen, Dimension<Integer> dim) {
super(control, screen, dim);
+ buttonString = control.formatValue().getString().toLowerCase();
}
public void executeAction() {
@@ -108,7 +109,7 @@ public class ActionController implements Controller<BiConsumer<YACLScreen, Butto
@Override
public boolean matchesSearch(String query) {
- return super.matchesSearch(query) || getValueText().getString().toLowerCase().contains(query);
+ return super.matchesSearch(query) || buttonString.contains(query);
}
}
}
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java b/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
index bb5304b..cea6028 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/BooleanController.java
@@ -102,7 +102,6 @@ public class BooleanController implements Controller<Boolean> {
return new BooleanControllerElement(this, screen, widgetDimension);
}
- @ApiStatus.Internal
public static class BooleanControllerElement extends ControllerWidget<BooleanController> {
private BooleanControllerElement(BooleanController control, YACLScreen screen, Dimension<Integer> dim) {
super(control, screen, dim);
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java b/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
index 8385dfb..6ef7e56 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/ControllerWidget.java
@@ -18,12 +18,15 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
protected boolean focused = false;
protected boolean hovered = false;
+ protected final String optionName;
+
public ControllerWidget(T control, YACLScreen screen, Dimension<Integer> dim) {
super(dim);
this.control = control;
this.screen = screen;
control.option().addListener((opt, pending) -> updateTooltip());
updateTooltip();
+ this.optionName = control.option().name().getString().toLowerCase();
}
@Override
@@ -145,7 +148,7 @@ public abstract class ControllerWidget<T extends Controller<?>> extends Abstract
@Override
public boolean matchesSearch(String query) {
- return control.option().name().getString().toLowerCase().contains(query.toLowerCase());
+ return optionName.contains(query.toLowerCase());
}
@Override
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java b/src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java
index 261c067..5cf680d 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/EnumController.java
@@ -77,7 +77,6 @@ public class EnumController<T extends Enum<T>> implements Controller<T> {
return new EnumControllerElement<>(this, screen, widgetDimension, option().typeClass().getEnumConstants());
}
- @ApiStatus.Internal
public static class EnumControllerElement<T extends Enum<T>> extends ControllerWidget<EnumController<T>> {
private final T[] values;
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
index 57927f5..4e72d97 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/LabelController.java
@@ -44,7 +44,6 @@ public class LabelController implements Controller<Text> {
return new LabelControllerElement(widgetDimension);
}
- @ApiStatus.Internal
public class LabelControllerElement extends AbstractWidget {
private MultilineText wrappedText;
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java b/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
index d7864e0..ece6bce 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/TickBoxController.java
@@ -50,7 +50,6 @@ public class TickBoxController implements Controller<Boolean> {
return new TickBoxControllerElement(this, screen, widgetDimension);
}
- @ApiStatus.Internal
public static class TickBoxControllerElement extends ControllerWidget<TickBoxController> {
private TickBoxControllerElement(TickBoxController control, YACLScreen screen, Dimension<Integer> dim) {
super(control, screen, dim);
diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java b/src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java
index 01ac336..dd977f7 100644
--- a/src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java
+++ b/src/main/java/dev/isxander/yacl/gui/controllers/slider/SliderControllerElement.java
@@ -7,10 +7,8 @@ import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.MathHelper;
-import org.jetbrains.annotations.ApiStatus;
import org.lwjgl.glfw.GLFW;
-@ApiStatus.Internal
public class SliderControllerElement extends ControllerWidget<ISliderController<?>> {
private final double min, max, interval;