package advancedsystemsmanager.flow.elements; import advancedsystemsmanager.api.network.IPacketProvider; import advancedsystemsmanager.client.gui.GuiManager; import advancedsystemsmanager.network.ASMPacket; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.ChatAllowedCharacters; public class TextBoxLogic extends UpdateElement { public String text; public int cursor; public int cursorPosition; public int charLimit; public int width; public boolean updatedCursor; public float mult; public TextBoxLogic(IPacketProvider packetProvider, int charLimit, int width) { super(packetProvider); this.charLimit = charLimit; this.width = width; mult = 1F; } @SideOnly(Side.CLIENT) public void addText(GuiManager gui, String str) { String newText = text.substring(0, cursor) + str + text.substring(cursor); if (newText.length() <= charLimit && gui.getStringWidth(newText) * mult <= width) { text = newText; moveCursor(gui, str.length()); onUpdate(); } } @SideOnly(Side.CLIENT) public void deleteText(GuiManager gui, int direction) { if (cursor + direction >= 0 && cursor + direction <= text.length()) { if (direction > 0) { text = text.substring(0, cursor) + text.substring(cursor + 1); } else { text = text.substring(0, cursor - 1) + text.substring(cursor); moveCursor(gui, direction); } onUpdate(); } } @SideOnly(Side.CLIENT) public void moveCursor(GuiManager gui, int steps) { cursor += steps; updateCursor(); } public String getText() { return text; } public void setText(String text) { this.text = text; } public int getCursorPosition(GuiManager gui) { if (updatedCursor) { cursorPosition = (int)(gui.getStringWidth(text.substring(0, cursor)) * mult); updatedCursor = false; } return cursorPosition; } @SideOnly(Side.CLIENT) public void onKeyStroke(GuiManager gui, char c, int k) { if (k == 203) { moveCursor(gui, -1); } else if (k == 205) { moveCursor(gui, 1); } else if (k == 14) { deleteText(gui, -1); } else if (k == 211) { deleteText(gui, 1); } else if (ChatAllowedCharacters.isAllowedCharacter(c)) { addText(gui, Character.toString(c)); } } public void updateCursor() { if (cursor < 0) { cursor = 0; } else if (cursor > text.length()) { cursor = text.length(); } updatedCursor = true; } public void setTextAndCursor(String s) { setText(s); resetCursor(); } public void resetCursor() { cursor = text.length(); updatedCursor = true; } public void setMult(float mult) { this.mult = mult; } @Override public boolean writeData(ASMPacket packet) { packet.writeStringToBuffer(text); return true; } @Override public boolean readData(ASMPacket packet) { text = packet.readStringFromBuffer(); return false; } }