00001 #ifndef _MULTILINE_TEXTBOX_H_ 00002 #define _MULTILINE_TEXTBOX_H_ 00003 00004 #include <nds.h> 00005 #include "scrollingpanel.h" 00006 00007 namespace WoopsiUI { 00008 00009 class Text; 00010 00018 class MultiLineTextBox : public ScrollingPanel { 00019 public: 00020 00024 enum TextAlignmentHoriz { 00025 TEXT_ALIGNMENT_HORIZ_CENTRE = 0, 00026 TEXT_ALIGNMENT_HORIZ_LEFT = 1, 00027 TEXT_ALIGNMENT_HORIZ_RIGHT = 2 00028 }; 00029 00033 enum TextAlignmentVert { 00034 TEXT_ALIGNMENT_VERT_CENTRE = 0, 00035 TEXT_ALIGNMENT_VERT_TOP = 1, 00036 TEXT_ALIGNMENT_VERT_BOTTOM = 2 00037 }; 00038 00054 MultiLineTextBox(s16 x, s16 y, u16 width, u16 height, const char* text, u32 flags, s16 maxRows = 0, FontBase* font = NULL); 00055 00061 virtual void draw(Rect clipRect); 00062 00067 virtual void setTextAlignmentHoriz(TextAlignmentHoriz alignment); 00068 00073 virtual void setTextAlignmentVert(TextAlignmentVert alignment); 00074 00081 virtual const u16 getPageCount() const; 00082 00088 virtual const u16 getCurrentPage() const; 00089 00097 virtual const Text* getText() const; 00098 00103 virtual void setText(const char* text); 00104 00109 virtual void setText(const char text); 00110 00116 virtual void appendText(const char* text); 00117 00122 virtual void appendText(const char text); 00123 00128 virtual void removeText(const u32 startIndex); 00129 00136 virtual void removeText(const u32 startIndex, const u32 count); 00137 00142 virtual void setFont(FontBase* font); 00143 00150 virtual bool resize(u16 width, u16 height); 00151 00156 virtual const u32 getTextLength() const; 00157 00161 virtual void showCursor(); 00162 00166 virtual void hideCursor(); 00167 00174 virtual void moveCursorToPosition(const s32 position); 00175 00181 virtual inline const s32 getCursorPosition() const { return _cursorPos; }; 00182 00188 virtual void insertText(const char* text, const u32 index); 00189 00195 virtual void insertText(const char text, const u32 index); 00196 00201 virtual void insertTextAtCursor(const char* text); 00202 00207 virtual void insertTextAtCursor(const char text); 00208 00215 virtual bool click(s16 x, s16 y); 00216 00222 virtual bool keyPress(KeyCode keyCode); 00223 00224 protected: 00225 Text* _text; 00226 u8 _visibleRows; 00227 s16 _maxRows; 00228 u32 _topRow; 00229 u8 _padding; 00230 TextAlignmentHoriz _hAlignment; 00231 TextAlignmentVert _vAlignment; 00232 s32 _cursorPos; 00233 bool _showCursor; 00241 u8 getRowX(s32 row); 00242 00249 s16 getRowY(s32 row); 00250 00254 void calculateVisibleRows(); 00255 00260 void drawTextTop(Rect clipRect); 00261 00268 void drawText(Rect clipRect, s32 topRow, s32 bottomRow); 00269 00274 void drawCursor(Rect clipRect); 00275 00279 virtual ~MultiLineTextBox(); 00280 00284 inline MultiLineTextBox(const MultiLineTextBox& multiLineTextBox) : ScrollingPanel(multiLineTextBox) { }; 00285 }; 00286 } 00287 00288 #endif