package com.github.czyzby.lml.parser.impl.tag.actor; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.ProgressBar; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.impl.tag.AbstractNonParentalActorLmlTag; import com.github.czyzby.lml.parser.impl.tag.builder.FloatRangeLmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.github.czyzby.lml.util.LmlParsingException; /** Handles {@link ProgressBar} actor. Expects that the text between its tags is a valid float - it will be set as bar's * value. Be careful though, as changing the value in such way might trigger registered change listeners. Mapped to * "progressBar". * * @author MJ */ public class ProgressBarLmlTag extends AbstractNonParentalActorLmlTag { public ProgressBarLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected FloatRangeLmlActorBuilder getNewInstanceOfBuilder() { return new FloatRangeLmlActorBuilder(); } @Override protected void handlePlainTextLine(final String plainTextLine) { try { final float value = getParser().parseFloat(plainTextLine); getProgessBar().setValue(value); } catch (final LmlParsingException exception) { // Expected if input is not a float. if (getParser().isStrict()) { throw exception; } } } /** @return actor instance, casted for convenience. */ protected ProgressBar getProgessBar() { return (ProgressBar) getActor(); } @Override protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) { final FloatRangeLmlActorBuilder rangeBuilder = (FloatRangeLmlActorBuilder) builder; rangeBuilder.validateRange(getParser()); final ProgressBar actor = getNewInstanceOfProgressBar(rangeBuilder); actor.setValue(rangeBuilder.getValue()); return actor; } /** @param rangeBuilder contains data necessary to construct a float-range-based widget. * @return a new instance of progress bar. */ protected ProgressBar getNewInstanceOfProgressBar(final FloatRangeLmlActorBuilder rangeBuilder) { return new ProgressBar(rangeBuilder.getMin(), rangeBuilder.getMax(), rangeBuilder.getStepSize(), rangeBuilder.isVertical(), getSkin(rangeBuilder), rangeBuilder.getStyleName()); } }