package com.uwsoft.editor.view.ui.widget; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.kotcrab.vis.ui.VisUI; import com.kotcrab.vis.ui.widget.PopupMenu; import com.kotcrab.vis.ui.widget.VisTextButton; /** * Created by hayk on 5/22/2015. */ public class CustomMenu extends PopupMenu { private CustomMenuBar menuBar; public VisTextButton openButton; private String title; public CustomMenu (String title) { this.title = title; openButton = new VisTextButton(title, new VisTextButton.VisTextButtonStyle(VisUI.getSkin().get("menu-bar", VisTextButton.VisTextButtonStyle.class))); openButton.addListener(new InputListener() { @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { if (menuBar.getCurrentMenu() == CustomMenu.this) { menuBar.closeMenu(); return true; } switchMenu(); event.stop(); return true; } @Override public void enter (InputEvent event, float x, float y, int pointer, Actor fromActor) { if (menuBar.getCurrentMenu() != null) switchMenu(); } }); } public String getTitle () { return title; } private void switchMenu () { menuBar.closeMenu(); showMenu(); } private void showMenu () { Vector2 pos = openButton.localToStageCoordinates(new Vector2(0, 0)); setPosition(pos.x, pos.y - getHeight()); openButton.getStage().addActor(this); menuBar.setCurrentMenu(this); } @Override public boolean remove () { boolean result = super.remove(); menuBar.setCurrentMenu(null); return result; } /** Called by MenuBar when this menu is added to it */ void setMenuBar (CustomMenuBar menuBar) { if (this.menuBar != null) throw new IllegalStateException("Menu was already added to MenuBar"); this.menuBar = menuBar; this.menuBar.defaultStyle = openButton.getStyle().up; } TextButton getOpenButton () { return openButton; } }