package com.github.czyzby.lml.parser.impl.tag.actor; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.github.czyzby.kiwi.util.common.Strings; import com.github.czyzby.lml.parser.LmlParser; 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; /** Handles {@link TextButton} actor. Allows its children tags to use cell attributes. As opposed to a table, it appends * plain text data to its label rather than create and add a new label for each line. Mapped to "textButton". * * @author MJ */ public class TextButtonLmlTag extends ButtonLmlTag { public TextButtonLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected TextLmlActorBuilder getNewInstanceOfBuilder() { return new TextLmlActorBuilder(); } @Override protected final Actor getNewInstanceOfActor(final LmlActorBuilder builder) { return getNewInstanceOfTextButton((TextLmlActorBuilder) builder); } /** @param builder contains data necessary to construct a text button. * @return a new instance of TextButton. */ protected TextButton getNewInstanceOfTextButton(final TextLmlActorBuilder builder) { return new TextButton(builder.getText(), getSkin(builder), builder.getStyleName()); } @Override protected void handlePlainTextLine(final String plainTextLine) { final TextButton button = getTextButton(); final String textToAppend = getParser().parseString(plainTextLine, getActor()); if (Strings.isEmpty(button.getText())) { button.setText(textToAppend); } else { if (LmlUtilities.isMultiline(button)) { button.setText(button.getText().toString() + '\n' + textToAppend); } else { button.setText(button.getText().toString() + textToAppend); } } } /** @return casted actor. */ protected TextButton getTextButton() { return (TextButton) getActor(); } @Override protected boolean hasComponentActors() { return true; } @Override protected Actor[] getComponentActors(final Actor actor) { return new Actor[] { ((TextButton) actor).getLabel() }; } }