package com.github.czyzby.lml.vis.parser.impl.tag; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.Table; 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.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.kotcrab.vis.ui.widget.HorizontalCollapsibleWidget; import com.kotcrab.vis.ui.widget.VisTable; /** Handles {@link HorizontalCollapsibleWidget} actor. Can be used to manage one child. Converts text to a {@link Table} * with a label child. If the child is not a table, will create an empty table and put the child actor in it. Mapped to * "horizontalCollapsible", "horizontalCollapsibleWidget". * * @author MJ */ public class HorizontalCollapsibleWidgetLmlTag extends AbstractActorLmlTag { public HorizontalCollapsibleWidgetLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) { return new HorizontalCollapsibleWidget(); } @Override protected void handlePlainTextLine(final String plainTextLine) { addChild(wrapWithTable(toLabel(plainTextLine))); } /** @param actor will be put a table. * @return a new table with 1 child. */ protected Table wrapWithTable(final Actor actor) { final Table table = new VisTable(); table.add(actor); return table; } @Override protected void handleValidChild(final LmlTag childTag) { if (childTag.getActor() instanceof Table) { addChild((Table) childTag.getActor()); } else { addChild(wrapWithTable(childTag.getActor())); } } /** @param child will be set as collapsible's child. */ protected void addChild(final Table child) { final HorizontalCollapsibleWidget container = getHorizontalCollapsibleWidget(); if (GdxArrays.isNotEmpty(container.getChildren())) { getParser().throwErrorIfStrict("Horizontal collapsible widget can manage only one child."); } container.setTable(child); } /** @return casted actor. */ protected HorizontalCollapsibleWidget getHorizontalCollapsibleWidget() { return (HorizontalCollapsibleWidget) getActor(); } }