package com.github.czyzby.lml.vis.parser.impl.tag;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.github.czyzby.lml.parser.LmlParser;
import com.github.czyzby.lml.parser.impl.tag.builder.TextLmlActorBuilder;
import com.github.czyzby.lml.parser.tag.LmlActorBuilder;
import com.github.czyzby.lml.parser.tag.LmlTag;
import com.kotcrab.vis.ui.widget.Menu;
import com.kotcrab.vis.ui.widget.MenuItem;
/** Handles {@link Menu} widget. Typically used inside a {@link MenuBarLmlTag}. Although technically Menu extends Table
* class, cell attributes CANNOT be present in its children's tags, as Menus have custom children appending methods.
* Converts text lines to {@link MenuItem}s with default style. Can handle only {@link MenuItemLmlTag} children. Mapped
* to "menu".
*
* @author MJ */
public class MenuLmlTag extends MenuPopupLmlTag {
public MenuLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) {
super(parser, parentTag, rawTagData);
}
@Override
protected LmlActorBuilder getNewInstanceOfBuilder() {
return new TextLmlActorBuilder();
}
@Override
protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) {
return new Menu(((TextLmlActorBuilder) builder).getText(), builder.getStyleName());
}
@Override
public boolean isAttachable() {
return false;
}
@Override
public void attachTo(final LmlTag tag) {
// Only sub-menus are attachable. Throwing exception if anyone tries to attach a regular menu.
getParser().throwError("Regular menus are not attachable.");
}
}