package com.github.czyzby.lml.vis.parser.impl.attribute.input; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.action.ActorConsumer; import com.github.czyzby.lml.parser.tag.LmlAttribute; import com.github.czyzby.lml.parser.tag.LmlTag; import com.kotcrab.vis.ui.widget.VisTextField; import com.kotcrab.vis.ui.widget.VisTextField.TextFieldListener; /** See {@link VisTextField#setTextFieldListener(TextFieldListener)}. Expects an action ID that references a method that * consumes a {@link Character}. Invoked each time a character is typed into the text field. Mapped to "listener", * "textListener", "textFieldListener". * * @author MJ */ public class TextFieldListenerLmlAttribute implements LmlAttribute<VisTextField> { @Override public Class<VisTextField> getHandledType() { return VisTextField.class; } @Override public void process(final LmlParser parser, final LmlTag tag, final VisTextField actor, final String rawAttributeData) { final ActorConsumer<?, Character> listener = parser.parseAction(rawAttributeData, Character.valueOf(' ')); if (listener == null) { parser.throwErrorIfStrict( "Text field listener attribute requires ID of an action that consumes a Character. Valid action not found for name: " + rawAttributeData); return; } actor.setTextFieldListener(new TextFieldListener() { @Override public void keyTyped(final VisTextField textField, final char character) { listener.consume(character); } }); } }