package joshie.progression.gui.fields; import joshie.progression.api.criteria.IRuleProvider; import joshie.progression.api.gui.IDrawHelper; import joshie.progression.api.gui.Position; import joshie.progression.api.special.IGetterCallback; import joshie.progression.gui.fields.FieldHelper.DoubleFieldHelper; import joshie.progression.gui.fields.FieldHelper.FloatFieldHelper; import joshie.progression.gui.fields.FieldHelper.IntegerFieldHelper; import static joshie.progression.api.special.DisplayMode.EDIT; public class TextField extends AbstractField { protected FieldHelper data; private Position type; public TextField(String displayName, String fieldName, Object object, Position type) { super(displayName); this.data = getField(name, object, type); this.object = object; this.type = type; } public TextField(String name, Object object, Position type) { this(name, name, object, type); } @Override public String getFieldName() { return data.getFieldName(); } @Override public boolean click() { data.select(); return true; } @Override public String getField() { return data.getText(); } @Override public void draw(IRuleProvider provider, IDrawHelper helper, int renderX, int renderY, int color, int yPos, int mouseX, int mouseY) { String datatext = data.getText(); if (object instanceof IGetterCallback) { datatext = ((IGetterCallback) object).getField(data.getFieldName()); } String totalString = getFieldName() + ": " + datatext; int totalLength = totalString.length(); int number = totalLength > 48 ? totalLength - 48 : 48 - totalLength; int length = Math.max(0, number); String suffix = datatext.length() > length ? "..." : ""; datatext = datatext.substring(0, Math.min(datatext.length(), length)) + suffix; helper.drawSplitText(renderX, renderY, name + ": " + datatext, 4, yPos, provider.getWidth(EDIT) + 48, color, 0.75F); } public static FieldHelper getField(String name, Object object, Position type) { try { Class clazz = object.getClass().getField(name).getType(); String className = clazz.getSimpleName(); if (className.equalsIgnoreCase("double")) return new DoubleFieldHelper(name, object, type); if (className.equalsIgnoreCase("float")) return new FloatFieldHelper(name, object, type); if (className.equalsIgnoreCase("int")) return new IntegerFieldHelper(name, object, type); if (className.equalsIgnoreCase("string")) return new FieldHelper(name, object, type); } catch (Exception e) { e.printStackTrace(); } return null; } @Override public void setObject(Object object) { if (this.data == null) { this.data = getField(name, object, type); } } }