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; } }