00001 #ifndef _TEXT_H_ 00002 #define _TEXT_H_ 00003 00004 #include <nds.h> 00005 #include "fontbase.h" 00006 #include "woopsiarray.h" 00007 #include "woopsistring.h" 00008 00009 namespace WoopsiUI { 00010 00016 class Text : public WoopsiString { 00017 00018 public: 00019 00026 Text(FontBase* font, const char* text, u16 width); 00027 00032 virtual void setText(const char* text); 00033 00038 virtual void setText(const char text); 00039 00044 virtual void append(const char* text); 00045 00050 virtual void append(const char text); 00051 00057 virtual void insert(const char* text, const u32 index); 00058 00064 virtual void insert(const char text, const u32 index); 00065 00070 virtual void remove(const u32 startIndex); 00071 00077 virtual void remove(const u32 startIndex, const u32 count); 00078 00083 void setLineSpacing(u8 lineSpacing); 00084 00090 void setWidth(u16 width); 00091 00096 void setFont(FontBase* font); 00097 00103 const u8 getLineLength(const s32 lineNumber) const; 00104 00111 const u8 getLineTrimmedLength(const s32 lineNumber) const; 00112 00118 const u8 getLinePixelLength(const s32 lineNumber) const; 00119 00126 const u8 getLineTrimmedPixelLength(const s32 lineNumber) const; 00127 00133 inline const char* getLinePointer(const s32 lineNumber) const { return getCharArray() + _linePositions[lineNumber]; }; 00134 00139 inline const s32 getPixelHeight() const { return _textPixelHeight; }; 00140 00145 inline const u8 getPixelWidth() const { return _textPixelWidth; }; 00146 00151 inline const u8 getLineSpacing() const { return _lineSpacing; }; 00152 00158 inline const u8 getLineHeight() const { return _font->getHeight() + _lineSpacing; }; 00159 00164 inline const s32 getLineCount() const { return _linePositions.size() - 1; }; 00165 00170 FontBase* getFont() const; 00171 00176 void stripTopLines(const s32 lines); 00177 00181 void wrap(); 00182 00188 void wrap(u32 charIndex); 00189 00197 const u32 getLineContainingCharIndex(const u32 index) const; 00198 00205 const u32 getLineStartIndex(const u32 line) const { return _linePositions[line]; }; 00206 00207 private: 00212 typedef struct { 00213 u32 index; 00214 u8 width; 00215 } LongestLine; 00216 00217 FontBase* _font; 00218 WoopsiArray<u32> _linePositions; 00219 WoopsiArray<LongestLine> _longestLines; 00220 u8 _lineSpacing; 00221 s32 _textPixelHeight; 00222 u8 _textPixelWidth; 00223 u16 _width; 00224 }; 00225 } 00226 00227 #endif