package com.github.czyzby.lml.vis.parser.impl.attribute.spinner;
import com.github.czyzby.kiwi.util.common.Strings;
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.file.FileChooser;
import com.kotcrab.vis.ui.widget.spinner.Spinner;
/**
* See {@link Spinner#setTextFieldEventPolicy(Spinner.TextFieldEventPolicy)}. Expects a name of
* {@link Spinner.TextFieldEventPolicy} enum instance. Mapped to "textFieldEventPolicy".
* @author MJ
*/
public class SpinnerTextFieldEventPolicyLmlAttribute implements LmlAttribute<Spinner> {
@Override
public Class<Spinner> getHandledType() {
return Spinner.class;
}
@Override
public void process(LmlParser parser, LmlTag tag, Spinner spinner, String rawAttributeData) {
spinner.setTextFieldEventPolicy(determinePolicy(parser, spinner, rawAttributeData));
}
/**
* @param parser parses the tag.
* @param actor requires text field event policy..
* @param rawAttributeData unparsed attribute's value.
* @return chosen {@link FileChooser.FileSorting}. Throws exception if ID not valid and parser is strict; returns
* default value if parser not strict.
*/
protected Spinner.TextFieldEventPolicy determinePolicy(final LmlParser parser, final Spinner actor,
final String rawAttributeData) {
final String modeName = Strings.toUpperCase(parser.parseString(rawAttributeData, actor).trim());
try {
return Spinner.TextFieldEventPolicy.valueOf(modeName);
} catch (final Exception exception) {
// Unknown ID.
parser.throwErrorIfStrict("Unable to determine text field event policy with data: " + rawAttributeData,
exception);
}
return Spinner.TextFieldEventPolicy.ON_FOCUS_LOST;
}
}