// Copyright (c) 2015 Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.client.gui.base; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiTextField; import org.lwjgl.input.Keyboard; public class GuiAdvancedTextField extends GuiTextField { public static final char DEFAULT_PASSWORD_CHAR = '*'; private static final int COLOR_ENABLED = 14737632; private static final int COLOR_DISABLED = 7368816; private final FontRenderer fontRenderer; private String defaultText; private boolean defaultTextDisplayOnly; private char passwordChar = 0; private boolean textCentered; private int textOffsetX; private boolean enabled; private boolean emptyOnRightClick; private GuiAdvancedTextField nextTabField; public GuiAdvancedTextField(int id, FontRenderer par1FontRenderer, int par2, int par3, int par4, int par5) { super(id, par1FontRenderer, par2, par3, par4, par5); this.fontRenderer = par1FontRenderer; setMaxStringLength(Integer.MAX_VALUE); } @Override public boolean textboxKeyTyped(char unicode, int keyCode) { boolean result = super.textboxKeyTyped(unicode, keyCode); if(isFocused() && keyCode == Keyboard.KEY_TAB && nextTabField != null) { setFocused(false); nextTabField.setFocused(true); return true; } if(textCentered) { int textWidth = fontRenderer.getStringWidth(getText()); textOffsetX = getWidth() / 2 - textWidth / 2; } return result; } @Override public void mouseClicked(int mouseX, int mouseY, int button) { if(emptyOnRightClick && button == 1) { setText(""); } super.mouseClicked(mouseX, mouseY, button); } @Override public void setFocused(boolean focused) { super.setFocused(focused); if(focused && isDefaultText()) { setText(""); } } @Override public void setText(String text) { int cursorPosition = getCursorPosition(); super.setText(text); if(textCentered) { int textWidth = fontRenderer.getStringWidth(text); textOffsetX = getWidth() / 2 - textWidth / 2; } setCursorPosition(cursorPosition); } private boolean isDefaultText() { return defaultText != null && (getText().isEmpty() || getText().equals(defaultText)); } public String getTextOrDefault() { String text = super.getText(); if(!defaultTextDisplayOnly && isDefaultText()) { return defaultText; } return text; } @Override public void drawTextBox() { String oldText = getText(); if(passwordChar > 0) { StringBuilder sb = new StringBuilder(); for(int i = 0; i < oldText.length(); i++) { sb.append(passwordChar); } setText(sb.toString()); } else if(!isFocused() && isDefaultText()) { setText(defaultText); setTextColor(COLOR_DISABLED); } super.drawTextBox(); setText(oldText); if(!isFocused() && isDefaultText()) { setTextColor(COLOR_ENABLED); } } /** * Minecraft code makes this ridiculously annoying to do, so it doesn't work yet. * @param textCentered */ public void setTextCentered(boolean textCentered) { this.textCentered = textCentered; } public boolean isTextCentered() { return textCentered; } public void setDefaultText(String defaultText, boolean displayOnly) { this.defaultText = defaultText; this.defaultTextDisplayOnly = displayOnly; } public String getDefaultText() { return defaultText; } public void setPasswordChar(char passwordChar) { this.passwordChar = passwordChar; } public char getPasswordChar() { return passwordChar; } public void setEnabled(boolean enabled) { super.setEnabled(enabled); this.enabled = enabled; } public boolean isEnabled() { return enabled; } public void setDefaultPasswordChar() { setPasswordChar(DEFAULT_PASSWORD_CHAR); } public void setEmptyOnRightClick(boolean emptyOnRightClick) { this.emptyOnRightClick = emptyOnRightClick; } public boolean isEmptyOnRightClick() { return emptyOnRightClick; } public void setNextTabField(GuiAdvancedTextField nextTabField) { this.nextTabField = nextTabField; } }