package com.github.czyzby.lml.vis.parser.impl.tag; import com.badlogic.gdx.scenes.scene2d.Actor; import com.github.czyzby.kiwi.util.common.Strings; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.impl.tag.AbstractNonParentalActorLmlTag; import com.github.czyzby.lml.parser.impl.tag.builder.TextLmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.github.czyzby.lml.util.LmlUtilities; import com.kotcrab.vis.ui.widget.VisTextField; /** Handles {@link VisTextField} actor. Appends plain text between tags to itself. Mapped to "textField", * "visTextField". * * @author MJ */ public class VisTextFieldLmlTag extends AbstractNonParentalActorLmlTag { public VisTextFieldLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected TextLmlActorBuilder getNewInstanceOfBuilder() { return new TextLmlActorBuilder(); } @Override protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) { final TextLmlActorBuilder textBuilder = (TextLmlActorBuilder) builder; return getNewInstanceOfTextField(textBuilder); } /** @param textBuilder contains initial text data and style. * @return a new instance of {@link VisTextField}. */ protected VisTextField getNewInstanceOfTextField(final TextLmlActorBuilder textBuilder) { return new VisTextField(textBuilder.getText(), textBuilder.getStyleName()); } /** @return casted actor. */ protected VisTextField getTextField() { return (VisTextField) getActor(); } @Override protected void handlePlainTextLine(final String plainTextLine) { final VisTextField textField = getTextField(); final String textToAppend = getParser().parseString(plainTextLine, getActor()); if (Strings.isEmpty(textField.getText())) { textField.setText(textToAppend); } else { if (LmlUtilities.isMultiline(textField)) { textField.appendText('\n' + textToAppend); } else { textField.appendText(textToAppend); } } } }