From 833189bb4d8f524c572b6dcc86a7e146cdcf979f Mon Sep 17 00:00:00 2001 From: xander Date: Sun, 4 Sep 2022 22:02:21 +0100 Subject: ColorController, javadoc and further improvements to StringController --- .../controllers/string/BasicStringController.java | 42 ------------- .../gui/controllers/string/IStringController.java | 18 ++++++ .../gui/controllers/string/StringController.java | 45 ++++++++++++++ .../string/StringControllerElement.java | 71 ++++++++++++++-------- 4 files changed, 107 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/dev/isxander/yacl/gui/controllers/string/BasicStringController.java create mode 100644 src/main/java/dev/isxander/yacl/gui/controllers/string/StringController.java (limited to 'src/main/java/dev/isxander/yacl/gui/controllers/string') diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/string/BasicStringController.java b/src/main/java/dev/isxander/yacl/gui/controllers/string/BasicStringController.java deleted file mode 100644 index edda506..0000000 --- a/src/main/java/dev/isxander/yacl/gui/controllers/string/BasicStringController.java +++ /dev/null @@ -1,42 +0,0 @@ -package dev.isxander.yacl.gui.controllers.string; - -import dev.isxander.yacl.api.Option; -import dev.isxander.yacl.api.utils.Dimension; -import dev.isxander.yacl.gui.AbstractWidget; -import dev.isxander.yacl.gui.YACLScreen; - -public class BasicStringController implements IStringController { - private final Option option; - - /** - * Constructs a tickbox controller - * - * @param option bound option - */ - public BasicStringController(Option option) { - this.option = option; - } - - /** - * {@inheritDoc} - */ - @Override - public Option option() { - return option; - } - - @Override - public String getString() { - return option().pendingValue(); - } - - @Override - public void setFromString(String value) { - option().requestSet(value); - } - - @Override - public AbstractWidget provideWidget(YACLScreen screen, Dimension widgetDimension) { - return new StringControllerElement(this, screen, widgetDimension); - } -} diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/string/IStringController.java b/src/main/java/dev/isxander/yacl/gui/controllers/string/IStringController.java index ae66433..41843b8 100644 --- a/src/main/java/dev/isxander/yacl/gui/controllers/string/IStringController.java +++ b/src/main/java/dev/isxander/yacl/gui/controllers/string/IStringController.java @@ -1,12 +1,30 @@ package dev.isxander.yacl.gui.controllers.string; import dev.isxander.yacl.api.Controller; +import dev.isxander.yacl.api.Option; import net.minecraft.text.Text; +/** + * A controller that can be any type but can input and output a string. + */ public interface IStringController extends Controller { + /** + * Gets the option's pending value as a string. + * + * @see Option#pendingValue() + */ String getString(); + + /** + * Sets the option's pending value from a string. + * + * @see Option#requestSet(Object) + */ void setFromString(String value); + /** + * {@inheritDoc} + */ @Override default Text formatValue() { return Text.of(getString()); diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/string/StringController.java b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringController.java new file mode 100644 index 0000000..0caaa93 --- /dev/null +++ b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringController.java @@ -0,0 +1,45 @@ +package dev.isxander.yacl.gui.controllers.string; + +import dev.isxander.yacl.api.Option; +import dev.isxander.yacl.api.utils.Dimension; +import dev.isxander.yacl.gui.AbstractWidget; +import dev.isxander.yacl.gui.YACLScreen; + +/** + * A custom text field implementation for strings. + */ +public class StringController implements IStringController { + private final Option option; + + /** + * Constructs a string controller + * + * @param option bound option + */ + public StringController(Option option) { + this.option = option; + } + + /** + * {@inheritDoc} + */ + @Override + public Option option() { + return option; + } + + @Override + public String getString() { + return option().pendingValue(); + } + + @Override + public void setFromString(String value) { + option().requestSet(value); + } + + @Override + public AbstractWidget provideWidget(YACLScreen screen, Dimension widgetDimension) { + return new StringControllerElement(this, screen, widgetDimension); + } +} diff --git a/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java index ed066f2..f8cf802 100644 --- a/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java +++ b/src/main/java/dev/isxander/yacl/gui/controllers/string/StringControllerElement.java @@ -8,7 +8,6 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.Pair; import org.lwjgl.glfw.GLFW; public class StringControllerElement extends ControllerWidget> { @@ -27,7 +26,6 @@ public class StringControllerElement extends ControllerWidget { - if (selectionLength != 0) { - write(""); - } else if (caretPos > 0) { - inputField.deleteCharAt(caretPos - 1); - updateControl(); - caretPos--; - } + doBackspace(); return true; } case GLFW.GLFW_KEY_DELETE -> { - if (caretPos < inputField.length()) { - inputField.deleteCharAt(caretPos); - updateControl(); - } + doDelete(); return true; } } - if (Screen.isPaste(keyCode)) { - this.write(client.keyboard.getClipboard()); - } else if (Screen.isCopy(keyCode) && selectionLength != 0) { - client.keyboard.setClipboard(getSelection()); - } else if (Screen.isCut(keyCode) && selectionLength != 0) { - client.keyboard.setClipboard(getSelection()); - this.write(""); - } else if (Screen.isSelectAll(keyCode)) { - caretPos = inputField.length(); - selectionLength = -caretPos; + if (canUseShortcuts()) { + if (Screen.isPaste(keyCode)) { + this.write(client.keyboard.getClipboard()); + } else if (Screen.isCopy(keyCode) && selectionLength != 0) { + client.keyboard.setClipboard(getSelection()); + } else if (Screen.isCut(keyCode) && selectionLength != 0) { + client.keyboard.setClipboard(getSelection()); + this.write(""); + } else if (Screen.isSelectAll(keyCode)) { + caretPos = inputField.length(); + selectionLength = -caretPos; + } } return false; @@ -158,6 +155,26 @@ public class StringControllerElement extends ControllerWidget 0) { + inputField.deleteCharAt(caretPos - 1); + caretPos--; + } + } + + protected void doDelete() { + if (caretPos < inputField.length()) { + inputField.deleteCharAt(caretPos); + updateControl(); + } + } + public void write(String string) { if (selectionLength == 0) { string = textRenderer.trimToWidth(string, getMaxLength() - textRenderer.getWidth(inputField.toString())); -- cgit