package com.github.czyzby.lml.vis.parser.impl.tag.spinner; import java.math.BigDecimal; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.tag.LmlActorBuilder; import com.github.czyzby.lml.parser.tag.LmlTag; import com.github.czyzby.lml.vis.parser.impl.tag.builder.StringRangeLmlActorBuilder; import com.kotcrab.vis.ui.widget.spinner.FloatSpinnerModel; import com.kotcrab.vis.ui.widget.spinner.Spinner; import com.kotcrab.vis.ui.widget.spinner.SpinnerModel; /** Constructs {@link Spinner} with {@link FloatSpinnerModel}. Data is stored in a {@link BigDecimal} internally. Mapped * to "floatSpinner", "spinner". * * @author MJ */ public class FloatSpinnerLmlTag extends AbstractSpinnerLmlTag { private FloatSpinnerModel model; public FloatSpinnerLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected LmlActorBuilder getNewInstanceOfBuilder() { return new StringRangeLmlActorBuilder(); } @Override protected SpinnerModel createModel(final LmlActorBuilder builder) { final StringRangeLmlActorBuilder rangeBuilder = (StringRangeLmlActorBuilder) builder; return new FloatSpinnerModel(rangeBuilder.getValue(), rangeBuilder.getMin(), rangeBuilder.getMax(), rangeBuilder.getStep(), 2); } @Override protected void handlePlainTextLine(final String plainTextLine) { try { model.setValue(new BigDecimal(getParser().parseString(plainTextLine, getActor())), false); } catch (final NumberFormatException exception) { getParser().throwErrorIfStrict("Invalid spinner data, big decimal expected: " + plainTextLine, exception); } } }