package com.github.czyzby.lml.parser.impl.tag.actor;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Tree;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.impl.tag.AbstractActorLmlTag;
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 Tree} actor. Allows the use of "node" attribute in children tags. Adds plain text between tags as new
* label nodes. Mapped to "tree".
*
* @author MJ
* @see com.github.czyzby.lml.parser.impl.attribute.TreeNodeLmlAttribute */
public class TreeLmlTag extends AbstractActorLmlTag {
public TreeLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
super(parser, parentTag, rawTagData);
}
@Override
protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
return new Tree(getSkin(builder), builder.getStyleName());
}
@Override
protected void handleValidChild(final LmlTag childTag) {
addChild(childTag.getActor());
}
private void addChild(final Actor child) {
final Tree.Node node = LmlUtilities.getTreeNode(child);
if (node != null) {
getTree().add(node);
} else {
getTree().add(new Tree.Node(child));
}
}
/** @return casted actor. */
protected Tree getTree() {
return (Tree) getActor();
}
@Override
protected void handlePlainTextLine(final String plainTextLine) {
addChild(toLabel(plainTextLine));
}
}