package com.github.czyzby.lml.vis.parser.impl.tag;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group;
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.util.LmlUtilities;
import com.github.czyzby.lml.vis.ui.VisFormTable;
import com.kotcrab.vis.ui.util.form.SimpleFormValidator;
/** Maintains a {@link SimpleFormValidator} through a specialized table widget: {@link VisFormTable}. As a parent, works
* similarly to a table, although it adds all {@link com.kotcrab.vis.ui.widget.VisValidatableTextField} children to the
* internally managed form. Mapped to "form", "formValidator", "formTable".
*
* @author MJ */
public class FormValidatorLmlTag extends VisTableLmlTag {
public FormValidatorLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
super(parser, parentTag, rawTagData);
}
@Override
protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
return new VisFormTable();
}
@Override
protected VisFormTable getTable() {
return (VisFormTable) super.getTable();
}
@Override
protected void handleValidChild(final LmlTag childTag) {
final Actor child = childTag.getActor();
if (LmlUtilities.getLmlUserObject(child).getCell() == null) {
// Adds child to the table. Handles searching.
addChild(child);
} else {
// Actor was previously added to the cell before his tag was closed and this method was called. This is
// expected if the actor had any cell attributes - to change cell settings, the actor _needs_ to be in a
// table. This means that VisFormTable had this actor before it parsed its children.
if (child instanceof Group) {
// Finding all VisValidatableTextFields recursively:
getTable().findValidatables((Group) child);
}
}
}
}