package com.github.czyzby.lml.vis.parser.impl.tag; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Array; import com.github.czyzby.kiwi.util.gdx.collection.GdxArrays; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.impl.tag.AbstractActorLmlTag; import com.github.czyzby.lml.parser.impl.tag.builder.AlignedLmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.kotcrab.vis.ui.widget.MultiSplitPane; /** * Handles {@link MultiSplitPane} widget. Can handle any children, converts text between tags to labels. Mapped to * "multiSplitPane". * @author MJ */ public class MultiSplitPaneLmlTag extends AbstractActorLmlTag { /** * {@link MultiSplitPane#addActor(Actor)} is unsupported: actors have to be gathered and set manually. */ private final Array<Actor> children = GdxArrays.newArray(Actor.class); public MultiSplitPaneLmlTag(LmlParser parser, LmlTag parentTag, StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected LmlActorBuilder getNewInstanceOfBuilder() { return new AlignedLmlActorBuilder(); } /** * @return stored actor casted for convenience. */ public MultiSplitPane getMultiSplitPane() { return (MultiSplitPane) getActor(); } @Override protected Actor getNewInstanceOfActor(LmlActorBuilder builder) { AlignedLmlActorBuilder alignedBuilder = (AlignedLmlActorBuilder) builder; return new MultiSplitPane(alignedBuilder.isVertical(), builder.getStyleName()); } @Override protected void handleValidChild(LmlTag childTag) { children.add(childTag.getActor()); } @Override protected void handlePlainTextLine(String plainTextLine) { children.add(toLabel(plainTextLine)); } @Override protected void doOnTagClose() { getMultiSplitPane().setWidgets(children); } }