Java tutorial
/* * ****************************************************************************** * * Copyright 2015 See AUTHORS file. * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************** */ package com.uwsoft.editor.gdx.ui; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.uwsoft.editor.data.manager.DataManager; import com.uwsoft.editor.data.manager.TextureManager; import com.uwsoft.editor.gdx.actors.basic.PixelRect; import java.util.HashMap; import java.util.Map; /** * DropDown element with list of clickable items * It requires listener being given from outside */ public class DropDown extends Group { private Group container; public DropDown(Group container) { this.container = container; container.addActor(this); } private HashMap<Integer, String> listEntries = new HashMap<Integer, String>(); private SelectionEvent eventListener; public SelectionEvent getEventListener() { return eventListener; } public void setEventListener(SelectionEvent eventListener) { this.eventListener = eventListener; } public void clearItems() { listEntries.clear(); } public void initView(float x, float y) { super.clear(); setVisible(true); int iterator = 0; for (Map.Entry<Integer, String> entry : listEntries.entrySet()) { final Integer action = entry.getKey(); String name = entry.getValue(); final PixelRect rct = new PixelRect(130, 20); rct.setFillColor(new Color(0.32f, 0.32f, 0.32f, 1)); rct.setBorderColor(new Color(0.22f, 0.22f, 0.22f, 1)); rct.setY(-(iterator + 1) * rct.getHeight()); addActor(rct); Label lbl = new Label(name, DataManager.getInstance().textureManager.editorSkin); lbl.setX(3); lbl.setY(rct.getY() + 3); lbl.setColor(new Color(1, 1, 1, 0.65f)); lbl.setTouchable(Touchable.disabled); addActor(lbl); rct.addListener(new ClickListener() { @Override public boolean mouseMoved(InputEvent event, float x, float y) { rct.setFillColor(new Color(0.26f, 0.26f, 0.26f, 1)); return true; } public void exit(InputEvent event, float x, float y, int pointer, Actor toActor) { rct.setFillColor(new Color(0.32f, 0.32f, 0.32f, 1)); } public void touchUp(InputEvent event, float x, float y, int pointer, int button) { if (eventListener != null) { eventListener.doAction(action); } hide(); } }); iterator++; } Vector2 vector2 = container.stageToLocalCoordinates(new Vector2(x, y)); setX(vector2.x); setY(container.getStage().getHeight() - vector2.y); } public void addItem(int action, String name) { listEntries.put(action, name); } public interface SelectionEvent { public void doAction(int action); } public void hide() { setVisible(false); } }