00001 #ifndef _TEXTBOX_H_ 00002 #define _TEXTBOX_H_ 00003 00004 #include <nds.h> 00005 #include "label.h" 00006 #include "woopsistring.h" 00007 #include "gadgetstyle.h" 00008 #include "keyboardeventhandler.h" 00009 #include "gadgeteventargs.h" 00010 #include "textboxbase.h" 00011 00012 namespace WoopsiUI { 00013 00014 class WoopsiTimer; 00015 class WoopsiKey; 00016 00025 class TextBox : public TextBoxBase, public Label, public KeyboardEventHandler { 00026 public: 00027 00040 TextBox(s16 x, s16 y, u16 width, u16 height, const WoopsiString& text, GadgetStyle* style = NULL); 00041 00045 virtual void showCursor(); 00046 00050 virtual void hideCursor(); 00051 00056 virtual void setText(const WoopsiString& text); 00057 00063 virtual void appendText(const WoopsiString& text); 00064 00069 virtual void removeText(const u32 startIndex); 00070 00077 virtual void removeText(const u32 startIndex, const u32 count); 00078 00084 virtual void insertText(const WoopsiString& text, const u32 index); 00085 00090 virtual void insertTextAtCursor(const WoopsiString& text); 00091 00098 virtual void moveCursorToPosition(const s32 position); 00099 00105 virtual inline const s32 getCursorPosition() const { return _cursorPos; }; 00106 00111 virtual void handleKeyboardPressEvent(const KeyboardEventArgs& e); 00112 00117 virtual void handleKeyboardRepeatEvent(const KeyboardEventArgs& e); 00118 00123 virtual void handleKeyPressEvent(const GadgetEventArgs& e); 00124 00129 virtual void handleKeyRepeatEvent(const GadgetEventArgs& e); 00130 00135 inline bool opensKeyboard() const { return _opensKeyboard; }; 00136 00140 inline void disableKeyboardPopup() { _opensKeyboard = false; }; 00141 00145 inline void enableKeyboardPopup() { _opensKeyboard = true; }; 00146 00147 protected: 00148 s32 _cursorPos; 00149 bool _showCursor; 00150 bool _opensKeyboard; 00155 inline void onBlur(); 00156 00163 virtual void drawContents(GraphicsPort* port); 00164 00169 virtual void repositionCursor(const s32 position); 00170 00176 void moveCursorToClickLocation(s16 x, s16 y); 00177 00184 virtual void drawBorder(GraphicsPort* port); 00185 00191 virtual void onClick(s16 x, s16 y); 00192 00198 virtual void onDoubleClick(s16 x, s16 y); 00199 00204 virtual void onKeyPress(KeyCode keyCode); 00205 00210 virtual void onKeyRepeat(KeyCode keyCode); 00211 00216 virtual void processKey(const WoopsiKey* key); 00217 00223 virtual const u16 getCursorXPos() const; 00224 00229 virtual const u16 getCursorWidth() const; 00230 00236 virtual void calculateTextPositionHorizontal(); 00237 00241 inline TextBox(const TextBox& textbox) : Label(textbox) { }; 00242 }; 00243 } 00244 00245 #endif