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.actor.TableLmlTag; 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.MenuBar; /** Handles {@link MenuBar} widgets. Parses all {@link TableLmlTag} attributes, setting them in * {@link MenuBar#getTable()} widget. While technically it can handle children with cell attributes, they should NOT be * used for proper behavior; standard menu bars can handle only {@link MenuLmlTag} children. (When parser is not strict, * menu bars can handle any children, including labels created from plain text between tags.) Still, bar's look can be * fully customized with cell defaults attributes. Mapped to "menuBar", "bar". * * @author MJ */ public class MenuBarLmlTag extends TableLmlTag { private MenuBar menuBar; public MenuBarLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override protected Actor getNewInstanceOfActor(final LmlActorBuilder builder) { menuBar = new MenuBar(builder.getStyleName()); return menuBar.getTable(); } /** @return managed {@link MenuBar} object. */ @Override public Object getManagedObject() { return menuBar; } @Override protected void addChild(final Actor actor) { if (actor instanceof Menu) { menuBar.addMenu((Menu) actor); } else { getParser().throwErrorIfStrict("Menu bars can handle only menu children. Found child: " + actor); super.addChild(actor); } } }