package com.github.czyzby.lml.vis.parser.impl.tag.spinner; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.github.czyzby.kiwi.util.common.Strings; 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; import com.kotcrab.vis.ui.widget.spinner.Spinner; import com.kotcrab.vis.ui.widget.spinner.SpinnerModel; /** Abstract base for {@link Spinner} widgets with different {@link SpinnerModel} implementation. * * @author MJ */ public abstract class AbstractSpinnerLmlTag extends AbstractActorLmlTag { public AbstractSpinnerLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected Spinner getNewInstanceOfActor(final LmlActorBuilder builder) { return new Spinner(builder.getStyleName(), Strings.EMPTY_STRING, createModel(builder)); } /** @param builder used to build the widget, returned by {@link #getNewInstanceOfBuilder()}. * @return a new instance of {@link SpinnerModel}, handling spinner's values. */ protected abstract SpinnerModel createModel(LmlActorBuilder builder); /** @return wrapped actor, casted for convenience. */ protected Spinner getSpinner() { return (Spinner) getActor(); } @Override protected void handleValidChild(final LmlTag childTag) { if (childTag.getActor() instanceof Label) { handlePlainTextLine(((Label) childTag.getActor()).getText().toString()); } else { getParser().throwErrorIfStrict("Spinners cannot have children. Found child: " + childTag.getActor() + " with tag: " + childTag.getTagName()); LmlUtilities.getCell(childTag.getActor(), getSpinner()); } } @Override protected boolean hasComponentActors() { return true; } @Override protected Actor[] getComponentActors(final Actor actor) { return new Actor[] { ((Spinner) actor).getTextField() }; } }