#ifndef TEXTBOX_H_ #define TEXTBOX_H_ #include "Base.h" #include "Label.h" #include "Theme.h" #include "Keyboard.h" namespace gameplay { /** * An editable text label. Tap or click within the text box to bring up the * virtual keyboard. * * Listeners can listen for a TEXT_CHANGED event, and then query the text box * for the last keypress it received. * * The following properties are available for text boxes: * * label * { * style = * alignment = // Note: 'position' will be ignored. * position = * autoWidth = * autoHeight = * size = * width = // Can be used in place of 'size', e.g. with 'autoHeight = true' * height = // Can be used in place of 'size', e.g. with 'autoWidth = true' * text = * } */ class TextBox : public Label { friend class Container; public: /** * Add a listener to be notified of specific events affecting * this control. Event types can be OR'ed together. * E.g. To listen to touch-press and touch-release events, * pass Control::Listener::TOUCH | Control::Listener::RELEASE * as the second parameter. * * @param listener The listener to add. * @param eventFlags The events to listen for. */ virtual void addListener(Control::Listener* listener, int eventFlags); /** * Get the last key pressed within this text box. * * @return The last key pressed within this text box. */ int getLastKeypress(); protected: /** * Constructor. */ TextBox(); /** * Destructor. */ ~TextBox(); /** * Create a text box with a given style and properties. * * @param style The style to apply to this text box. * @param properties The properties to set on this text box. * * @return The new text box. */ static TextBox* create(Theme::Style* style, Properties* properties); /** * Touch callback on touch events. Controls return true if they consume the touch event. * * @param evt The touch event that occurred. * @param x The x position of the touch in pixels. Left edge is zero. * @param y The y position of the touch in pixels. Top edge is zero. * @param contactIndex The order of occurrence for multiple touch contacts starting at zero. * * @return Whether the touch event was consumed by the control. * * @see Touch::TouchEvent */ bool touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex); /** * Keyboard callback on key events. * * @param evt The key event that occured. * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key. * If evt is KEY_CHAR then key is the unicode value of the character. * * @see Keyboard::KeyEvent * @see Keyboard::Key */ void keyEvent(Keyboard::KeyEvent evt, int key); /** * Called when a control's properties change. Updates this control's internal rendering * properties, such as its text viewport. * * @param clip The clipping rectangle of this control's parent container. */ void update(const Rectangle& clip); /** * Draw the images associated with this control. * * @param spriteBatch The sprite batch containing this control's icons. * @param clip The clipping rectangle of this control's parent container. */ void drawImages(SpriteBatch* spriteBatch, const Rectangle& clip); Vector2 _caretLocation; unsigned int textIndex; int _lastKeypress; private: /** * Constructor. */ TextBox(const TextBox& copy); void setCaretLocation(int x, int y); }; } #endif