package com.github.czyzby.lml.vis.parser.impl.attribute.spinner;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.tag.LmlAttribute;
import com.github.czyzby.lml.parser.tag.LmlTag;
import com.kotcrab.vis.ui.widget.spinner.FloatSpinnerModel;
import com.kotcrab.vis.ui.widget.spinner.SimpleFloatSpinnerModel;
import com.kotcrab.vis.ui.widget.spinner.Spinner;
import com.kotcrab.vis.ui.widget.spinner.SpinnerModel;
/** See {@link FloatSpinnerModel#setScale(int)} and {@link SimpleFloatSpinnerModel#setPrecision(int)}. Mapped to
* "scale", "precision".
*
* @author MJ */
public class SpinnerPrecisionLmlAttribute implements LmlAttribute<Spinner> {
@Override
public Class<Spinner> getHandledType() {
return Spinner.class;
}
@Override
public void process(final LmlParser parser, final LmlTag tag, final Spinner actor, final String rawAttributeData) {
final SpinnerModel model = actor.getModel();
final int precision = parser.parseInt(rawAttributeData, actor);
if (model instanceof FloatSpinnerModel) {
((FloatSpinnerModel) model).setScale(precision);
} else if (model instanceof SimpleFloatSpinnerModel) {
((SimpleFloatSpinnerModel) model).setPrecision(precision);
} else {
parser.throwErrorIfStrict(
"Precision (scale) attribute can be used only for spinners with models storing decimal values. Found attribute in tag: "
+ tag.getTagName());
}
}
}