package com.github.czyzby.lml.parser.impl.tag.actor;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.ui.Container;
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;
/** Handles {@link Container} actor. Can manage a single child - works as a simplified Table. Converts plain text
* between tags to a label and adds it as its child. Mapped to "container".
*
* @author MJ */
public class ContainerLmlTag extends AbstractActorLmlTag {
public ContainerLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
super(parser, parentTag, rawTagData);
}
@Override
protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
return new Container<Actor>();
}
@Override
protected void handlePlainTextLine(final String plainTextLine) {
addChild(toLabel(plainTextLine));
}
@Override
protected void handleValidChild(final LmlTag childTag) {
addChild(childTag.getActor());
}
/** @param child will be set as container's child. */
protected void addChild(final Actor child) {
final Container<Actor> container = getContainer();
if (container.getActor() != null) {
getParser().throwErrorIfStrict("Container widget can manage only one child.");
}
container.setActor(child);
}
/** @return casted actor. */
@SuppressWarnings("unchecked")
protected Container<Actor> getContainer() {
return (Container<Actor>) getActor();
}
}