package com.uwsoft.editor.view.ui.widget; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.Drawable; import com.badlogic.gdx.utils.Array; import com.kotcrab.vis.ui.VisUI; import com.kotcrab.vis.ui.widget.VisTable; /** * Created by hayk on 5/22/2015. */ public class CustomMenuBar { private static final Drawable BUTTTON_DEFAULT = VisUI.getSkin().getDrawable("menu-bg-up"); public Drawable defaultStyle = VisUI.getSkin().getDrawable("menu-bg-up"); private Table mainTable; private Table menuItems; private CustomMenu currentMenu; private Array<CustomMenu> menus = new Array<CustomMenu>(); public CustomMenuBar () { Skin skin = VisUI.getSkin(); menuItems = new VisTable(); mainTable = new VisTable() { @Override protected void sizeChanged () { super.sizeChanged(); closeMenu(); } }; mainTable.left(); mainTable.add(menuItems); mainTable.setBackground(skin.getDrawable("menu-bg")); } public void addMenu (CustomMenu menu) { menus.add(menu); menu.setMenuBar(this); menuItems.add(menu.getOpenButton()); } public boolean removeMenu (CustomMenu menu) { boolean removed = menus.removeValue(menu, true); if (removed) { menu.setMenuBar(null); menuItems.removeActor(menu.getOpenButton()); } return removed; } public void insertMenu (int index, CustomMenu menu) { menus.insert(index, menu); menu.setMenuBar(this); rebuild(); } private void rebuild () { menuItems.clear(); for (CustomMenu menu : menus) menuItems.add(menu.getOpenButton()); } /** Closes currently open menu (if any). Used by framework and typically there is no need to call this manually */ public void closeMenu () { if (currentMenu != null) { deselectButton(currentMenu.getOpenButton()); currentMenu.remove(); currentMenu = null; } } CustomMenu getCurrentMenu () { return currentMenu; } void setCurrentMenu (CustomMenu newMenu) { if (newMenu != null) selectButton(newMenu.getOpenButton()); if (currentMenu != null) deselectButton(currentMenu.getOpenButton()); currentMenu = newMenu; } /** Returns table containing all menus that should be added to Stage, typically with expandX and fillX properties. */ public Table getTable () { return mainTable; } public void selectButton (TextButton button) { button.getStyle().up = button.getStyle().over; } public void deselectButton (TextButton button) { button.getStyle().up = defaultStyle; } }