package com.indyforge.twod.engine.graphics.rendering.scenegraph.gui; import java.awt.Font; import java.awt.Image; import java.awt.event.KeyEvent; import com.indyforge.twod.engine.graphics.ImageDesc; import com.indyforge.twod.engine.graphics.rendering.scenegraph.Entity; import com.indyforge.twod.engine.graphics.rendering.scenegraph.EntityRoutines; import com.indyforge.twod.engine.graphics.rendering.scenegraph.Scene; import com.indyforge.twod.engine.graphics.rendering.scenegraph.Text.Alignment; import com.indyforge.twod.engine.resources.Resource; /** * * * @author Christopher Probst */ public class Button extends GuiEntity { /** * */ private static final long serialVersionUID = 1L; public enum ButtonEvent { Pressed } /* * The selected/deselected images. */ private final Label selected, deselected; /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity * #onUpdate(float) */ @Override protected void onUpdate(float tpf) { super.onUpdate(tpf); // Find the scene Scene scene = findScene(); if (scene != null) { if (isSelected() && scene.isSinglePressed(KeyEvent.VK_ENTER)) { fireEvent(ButtonEvent.Pressed); } } } /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiListener * #onEvent(com.indyforge.twod.engine.graphics.rendering.scenegraph.Entity, * java.lang.Object, java.lang.Object[]) */ @Override protected void onEvent(Entity source, Object event, Object... params) { super.onEvent(source, event, params); // Verify the event if (event == ButtonEvent.Pressed && source == this) { onButtonPressed(); } } /** * Gets called when the button is pressed. */ protected void onButtonPressed() { } /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity * #onSelected * (com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity) */ @Override protected void onSelected(GuiEntity guiEntity) { super.onSelected(guiEntity); if (guiEntity == this) { EntityRoutines.visible(selected.childIterator(true, true), true); EntityRoutines.visible(deselected.childIterator(true, true), false); } } /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity * #onDeselected * (com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity) */ @Override protected void onDeselected(GuiEntity guiEntity) { super.onDeselected(guiEntity); if (guiEntity == this) { EntityRoutines.visible(selected.childIterator(true, true), false); EntityRoutines.visible(deselected.childIterator(true, true), true); } } /** * Creates a button using the default values and the given parameters. * * @param selectedImageResource * The selected image. * @param deselectedImageResource * The deselected image. * @param imageDesc * The image description. * @param fontResource * The font of the text. */ public Button(Resource<? extends Image> selectedImageResource, Resource<? extends Image> deselectedImageResource, ImageDesc imageDesc, Resource<? extends Font> fontResource, String buttonText) { // Register the pressed event events().put(ButtonEvent.Pressed, iterableChildren(true, true)); // Create both labels selected = new Label(imageDesc, fontResource); deselected = new Label(imageDesc, fontResource); // Set textures selected.background().imageResource(selectedImageResource); deselected.background().imageResource(deselectedImageResource); // Set text and default center alignment selected.text().text(buttonText).alignment(Alignment.Center); deselected.text().text(buttonText).alignment(Alignment.Center); // Attach all components attach(selected, deselected); // Start deselected deselect(); } /** * @return selected label. */ public Label selectedLabel() { return selected; } /** * @return the deselected label. */ public Label deselectedLabel() { return deselected; } }