aboutsummaryrefslogtreecommitdiff
path: root/common/src/main/java/dev/isxander/yacl3/gui
diff options
context:
space:
mode:
authorisXander <xandersmith2008@gmail.com>2023-08-14 23:27:45 +0100
committerisXander <xandersmith2008@gmail.com>2023-08-14 23:27:45 +0100
commitb3355266572deef1a5c3e494ad162c592383e455 (patch)
tree876510a21e27d0052cb7a1501c0295a427c9dc3c /common/src/main/java/dev/isxander/yacl3/gui
parentd37e147dbb4db44a921533b572aed3e54b5c6a42 (diff)
downloadYetAnotherConfigLib-b3355266572deef1a5c3e494ad162c592383e455.tar.gz
YetAnotherConfigLib-b3355266572deef1a5c3e494ad162c592383e455.tar.bz2
YetAnotherConfigLib-b3355266572deef1a5c3e494ad162c592383e455.zip
More-or-less complete API for YACL auto-gen
Diffstat (limited to 'common/src/main/java/dev/isxander/yacl3/gui')
-rw-r--r--common/src/main/java/dev/isxander/yacl3/gui/controllers/string/StringControllerElement.java44
-rw-r--r--common/src/main/java/dev/isxander/yacl3/gui/utils/UndoRedoHelper.java42
2 files changed, 81 insertions, 5 deletions
diff --git a/common/src/main/java/dev/isxander/yacl3/gui/controllers/string/StringControllerElement.java b/common/src/main/java/dev/isxander/yacl3/gui/controllers/string/StringControllerElement.java
index 86cc7bd..383e188 100644
--- a/common/src/main/java/dev/isxander/yacl3/gui/controllers/string/StringControllerElement.java
+++ b/common/src/main/java/dev/isxander/yacl3/gui/controllers/string/StringControllerElement.java
@@ -5,6 +5,7 @@ import dev.isxander.yacl3.api.utils.Dimension;
import dev.isxander.yacl3.gui.YACLScreen;
import dev.isxander.yacl3.gui.controllers.ControllerWidget;
import dev.isxander.yacl3.gui.utils.GuiUtils;
+import dev.isxander.yacl3.gui.utils.UndoRedoHelper;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen;
@@ -21,9 +22,10 @@ public class StringControllerElement extends ControllerWidget<IStringController<
protected int caretPos;
protected int selectionLength;
-
protected int renderOffset;
+ protected UndoRedoHelper undoRedoHelper;
+
protected float ticks;
private final Component emptyText;
@@ -35,7 +37,9 @@ public class StringControllerElement extends ControllerWidget<IStringController<
inputFieldFocused = false;
selectionLength = 0;
emptyText = Component.literal("Click to type...").withStyle(ChatFormatting.GRAY);
- control.option().addListener((opt, val) -> inputField = control.getString());
+ control.option().addListener((opt, val) -> {
+ inputField = control.getString();
+ });
setDimension(dim);
}
@@ -109,6 +113,10 @@ public class StringControllerElement extends ControllerWidget<IStringController<
selectionLength = 0;
}
+// if (undoRedoHelper == null) {
+// undoRedoHelper = new UndoRedoHelper(inputField, caretPos, selectionLength);
+// }
+
return true;
} else {
inputFieldFocused = false;
@@ -187,12 +195,26 @@ public class StringControllerElement extends ControllerWidget<IStringController<
doDelete();
return true;
}
+// case InputConstants.KEY_Z -> {
+// if (Screen.hasControlDown()) {
+// UndoRedoHelper.FieldState updated = Screen.hasShiftDown() ? undoRedoHelper.redo() : undoRedoHelper.undo();
+// if (updated != null) {
+// System.out.println("Updated: " + updated);
+// if (modifyInput(builder -> builder.replace(0, inputField.length(), updated.text()))) {
+// caretPos = updated.cursorPos();
+// selectionLength = updated.selectionLength();
+// checkRenderOffset();
+// }
+// }
+// return true;
+// }
+// }
}
if (Screen.isPaste(keyCode)) {
return doPaste();
} else if (Screen.isCopy(keyCode)) {
- return doCopy();
+ return doCopy();
} else if (Screen.isCut(keyCode)) {
return doCut();
} else if (Screen.isSelectAll(keyCode)) {
@@ -204,6 +226,7 @@ public class StringControllerElement extends ControllerWidget<IStringController<
protected boolean doPaste() {
this.write(client.keyboardHandler.getClipboard());
+ updateUndoHistory();
return true;
}
@@ -219,6 +242,7 @@ public class StringControllerElement extends ControllerWidget<IStringController<
if (selectionLength != 0) {
client.keyboardHandler.setClipboard(getSelection());
this.write("");
+ updateUndoHistory();
return true;
}
return false;
@@ -255,9 +279,13 @@ public class StringControllerElement extends ControllerWidget<IStringController<
if (!inputFieldFocused)
return false;
- write(Character.toString(chr));
+ if (!Screen.hasControlDown()) {
+ write(Character.toString(chr));
+ updateUndoHistory();
+ return true;
+ }
- return true;
+ return false;
}
protected void doBackspace() {
@@ -269,6 +297,7 @@ public class StringControllerElement extends ControllerWidget<IStringController<
checkRenderOffset();
}
}
+ updateUndoHistory();
}
protected void doDelete() {
@@ -277,6 +306,7 @@ public class StringControllerElement extends ControllerWidget<IStringController<
} else if (caretPos < inputField.length()) {
modifyInput(builder -> builder.deleteCharAt(caretPos));
}
+ updateUndoHistory();
}
public void write(String string) {
@@ -308,6 +338,10 @@ public class StringControllerElement extends ControllerWidget<IStringController<
return true;
}
+ protected void updateUndoHistory() {
+// undoRedoHelper.save(inputField, caretPos, selectionLength);
+ }
+
public int getUnshiftedLength() {
if (optionNameString.isEmpty())
return getDimension().width() - getXPadding() * 2;
diff --git a/common/src/main/java/dev/isxander/yacl3/gui/utils/UndoRedoHelper.java b/common/src/main/java/dev/isxander/yacl3/gui/utils/UndoRedoHelper.java
new file mode 100644
index 0000000..3328c16
--- /dev/null
+++ b/common/src/main/java/dev/isxander/yacl3/gui/utils/UndoRedoHelper.java
@@ -0,0 +1,42 @@
+package dev.isxander.yacl3.gui.utils;
+
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UndoRedoHelper {
+ private final List<FieldState> history = new ArrayList<>();
+ private int index = 0;
+
+ public UndoRedoHelper(String text, int cursorPos, int selectionLength) {
+ history.add(new FieldState(text, cursorPos, selectionLength));
+ }
+
+ public void save(String text, int cursorPos, int selectionLength) {
+ int max = history.size();
+ history.subList(index, max).clear();
+ history.add(new FieldState(text, cursorPos, selectionLength));
+ index++;
+ }
+
+ public @Nullable FieldState undo() {
+ index--;
+ index = Math.max(index, 0);
+
+ if (history.isEmpty())
+ return null;
+ return history.get(index);
+ }
+
+ public @Nullable FieldState redo() {
+ if (index < history.size() - 1) {
+ index++;
+ return history.get(index);
+ } else {
+ return null;
+ }
+ }
+
+ public record FieldState(String text, int cursorPos, int selectionLength) {}
+}