package com.indyforge.twod.engine.graphics.rendering.scenegraph.gui; import java.awt.Font; 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.Scene; import com.indyforge.twod.engine.resources.Resource; /** * * @author Christopher Probst * */ public class TextField extends Label { /** * */ private static final long serialVersionUID = 1L; public enum TextFieldEvent { Changed } /* * (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) { text().borderWidth(10); } } /* * (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) { text().borderWidth(0); } } /* * (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 == TextFieldEvent.Changed && source == this) { onTextFieldChanged(); } } /* * (non-Javadoc) * * @see * com.indyforge.twod.engine.graphics.rendering.scenegraph.gui.GuiEntity * #onUpdate(float) */ @Override protected void onUpdate(float tpf) { super.onUpdate(tpf); if (isSelected()) { // Find the scene Scene scene = findScene(); if (scene != null) { for (int i = 0x30; i <= 0x39; i++) { if (scene.isSinglePressed(i)) { text().append((char) i); } } for (int i = 0x41; i <= 0x5A; i++) { if (scene.isSinglePressed(i)) { text().append((char) i); } } if (scene.isSinglePressed(KeyEvent.VK_PERIOD)) { text().append("."); } if (scene.isSinglePressed(KeyEvent.VK_MINUS)) { text().append("-"); } if (scene.isSinglePressed(KeyEvent.VK_BACK_SPACE)) { text().backspace(); } if (scene.isSinglePressed(KeyEvent.VK_SPACE)) { text().append(" "); } if (text().isChanged()) { fireEvent(TextFieldEvent.Changed); } } } } /** * Gets called when the text changed. */ protected void onTextFieldChanged() { } public TextField(ImageDesc imageDesc, Resource<? extends Font> fontResource) { super(imageDesc, fontResource); // Text fields ARE selectable! selectable(true); // Register the text field changed event events().put(TextFieldEvent.Changed, iterableChildren(true, true)); } }