package codechicken.core.gui; import net.minecraft.client.gui.GuiScreen; import net.minecraft.util.ChatAllowedCharacters; import org.lwjgl.input.Keyboard; public class GuiCCTextField extends GuiWidget { private String text; private boolean isFocused; private boolean isEnabled; public int maxStringLength; public int cursorCounter; public String actionCommand; private String allowedCharacters; public GuiCCTextField(int x, int y, int width, int height, String text) { super(x, y, width, height); isFocused = false; isEnabled = true; this.text = text; } public GuiCCTextField setActionCommand(String s) { actionCommand = s; return this; } public void setText(String s) { if (s.equals(text)) { return; } String oldText = text; text = s; onTextChanged(oldText); } public void onTextChanged(String oldText) { } public final String getText() { return text; } public final boolean isEnabled() { return isEnabled; } public void setEnabled(boolean b) { isEnabled = b; if (!isEnabled && isFocused) { setFocused(false); } } public final boolean isFocused() { return isFocused; } @Override public void update() { cursorCounter++; } @Override public void keyTyped(char c, int keycode) { if (!isEnabled || !isFocused) { return; } /*if(c == '\t')//tab { parentGuiScreen.selectNextField(); }*/ if (c == '\026')//paste { String s = GuiScreen.getClipboardString(); if (s == null || s.equals("")) { return; } for (int i = 0; i < s.length(); i++) { if (text.length() == maxStringLength) { return; } char tc = s.charAt(i); if (canAddChar(tc)) { setText(text + tc); } } } if (keycode == Keyboard.KEY_RETURN) { setFocused(false); sendAction(actionCommand, getText()); } if (keycode == Keyboard.KEY_BACK && text.length() > 0) { setText(text.substring(0, text.length() - 1)); } if ((text.length() < maxStringLength || maxStringLength == 0) && canAddChar(c)) { setText(text + c); } } public boolean canAddChar(char c) { return allowedCharacters == null ? ChatAllowedCharacters.isAllowedCharacter(c) : allowedCharacters.indexOf(c) >= 0; } @Override public void mouseClicked(int x, int y, int button) { if (isEnabled && pointInside(x, y)) { setFocused(true); if (button == 1) { setText(""); } } else { setFocused(false); } } public void setFocused(boolean focus) { if (focus == isFocused) { return; } isFocused = focus; onFocusChanged(); } public void onFocusChanged() { if (isFocused) { cursorCounter = 0; } } @Override public void draw(int i, int j, float f) { drawBackground(); drawText(); } public void drawBackground() { drawRect(x - 1, y - 1, x + width + 1, y + height + 1, 0xffa0a0a0); drawRect(x, y, x + width, y + height, 0xff000000); } public String getDrawText() { String s = getText(); if (isEnabled && isFocused && (cursorCounter / 6) % 2 == 0) { s += "_"; } return s; } public void drawText() { drawString(fontRenderer, getDrawText(), x + 4, y + height / 2 - 4, getTextColour()); } public int getTextColour() { return isEnabled ? 0xe0e0e0 : 0x707070; } public GuiCCTextField setMaxStringLength(int i) { maxStringLength = i; return this; } public GuiCCTextField setAllowedCharacters(String s) { allowedCharacters = s; return this; } }