aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/gui/elements/config
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/gui/elements/config')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java
new file mode 100644
index 0000000..809143f
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/config/ConfigKeyBind.java
@@ -0,0 +1,81 @@
+package cc.polyfrost.oneconfig.gui.elements.config;
+
+import cc.polyfrost.oneconfig.config.OneConfigConfig;
+import cc.polyfrost.oneconfig.config.core.OneKeyBind;
+import cc.polyfrost.oneconfig.config.interfaces.BasicOption;
+import cc.polyfrost.oneconfig.gui.OneConfigGui;
+import cc.polyfrost.oneconfig.gui.elements.BasicButton;
+import cc.polyfrost.oneconfig.lwjgl.RenderManager;
+import cc.polyfrost.oneconfig.lwjgl.font.Fonts;
+import cc.polyfrost.oneconfig.lwjgl.image.Images;
+import org.lwjgl.input.Keyboard;
+
+import java.lang.reflect.Field;
+
+public class ConfigKeyBind extends BasicOption {
+ private final BasicButton button;
+ private boolean clicked = false;
+
+ public ConfigKeyBind(Field field, String name, int size) {
+ super(field, name, size);
+ button = new BasicButton(256, 32, "", Images.KEYSTROKE, null, 0, BasicButton.ALIGNMENT_CENTER, true);
+ button.alignIconLeft(true);
+ }
+
+ @Override
+ public void draw(long vg, int x, int y) {
+ RenderManager.drawString(vg, name, x, y + 17, OneConfigConfig.WHITE, 14f, Fonts.MEDIUM);
+ OneKeyBind keyBind = getKeyBind();
+ String text = keyBind.getDisplay();
+ if (button.isToggled()) {
+ if (text.equals("")) text = "Recording... (ESC to clear)";
+ if (!clicked) {
+ keyBind.clearKeys();
+ setKeyBind(keyBind);
+ clicked = true;
+ } else if (keyBind.getSize() == 0 || keyBind.isActive()) {
+ OneConfigGui.INSTANCE.allowClose = false;
+ } else {
+ button.setToggled(false);
+ clicked = false;
+ OneConfigGui.INSTANCE.allowClose = true;
+ }
+ } else if (text.equals("")) text = "None";
+ button.setText(text);
+ button.draw(vg, x + (size == 1 ? 224 : 736), y);
+ }
+
+ @Override
+ public void keyTyped(char key, int keyCode) {
+ if (!button.isToggled()) return;
+ OneKeyBind keyBind = getKeyBind();
+ if (keyCode == Keyboard.KEY_ESCAPE) {
+ keyBind.clearKeys();
+ button.setToggled(false);
+ OneConfigGui.INSTANCE.allowClose = true;
+ clicked = false;
+ } else keyBind.addKey(keyCode);
+ setKeyBind(keyBind);
+ }
+
+ private OneKeyBind getKeyBind() {
+ OneKeyBind keyBind = new OneKeyBind();
+ try {
+ keyBind = (OneKeyBind) get();
+ } catch (IllegalAccessException ignored) {
+ }
+ return keyBind;
+ }
+
+ private void setKeyBind(OneKeyBind keyBind) {
+ try {
+ set(keyBind);
+ } catch (IllegalAccessException ignored) {
+ }
+ }
+
+ @Override
+ public int getHeight() {
+ return 32;
+ }
+}