TextFeld.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #ifndef TextFeld_H
  2. #define TextFeld_H
  3. #include "Zeichnung.h"
  4. #include "Array.h"
  5. namespace Framework
  6. {
  7. class Schrift; // Schrift.h
  8. class Text; // Text.h
  9. class AlphaFeld; // AlphaFeld.h
  10. class Rahmen; // Rahmen.h
  11. class TextFeld; // aus dieser Datei
  12. class VScrollBar; // Scroll.h
  13. class HScrollBar; // Scroll.h
  14. class TextRenderer;
  15. // Verwaltet ein Textfeld
  16. class TextFeld : public ZeichnungHintergrund
  17. {
  18. public:
  19. struct TextStyle
  20. {
  21. int beginIndex;
  22. unsigned char fontSize;
  23. int fontColor;
  24. int selectedColor;
  25. int selectedBackcroundColor;
  26. bool underlined;
  27. bool selected;
  28. MausAktion onClick;
  29. unsigned char rendererIndex;
  30. __declspec( dllexport ) bool operator==( const TextStyle& rhs );
  31. };
  32. class TextStyleManager
  33. {
  34. protected:
  35. RCArray< TextRenderer > *renderer;
  36. Array< TextStyle > textStyle;
  37. int index;
  38. int styleIndex;
  39. TextStyle current;
  40. Text *text;
  41. int ref;
  42. public:
  43. __declspec( dllexport ) TextStyleManager();
  44. __declspec( dllexport ) virtual ~TextStyleManager();
  45. // Setzt den Style eines Textabschnittes
  46. // begin: die startposition des Abschnittes
  47. // end: die endposition des Abschnittes (nicht enthalten)
  48. __declspec( dllexport ) void setTextStyle( int begin, int end, TextStyle style );
  49. // Entfernt einen Textabschnitt
  50. // begin: der index des ersten betroffenen zeichens
  51. // end: der index des ersten zeichens nach dem abschnitt
  52. __declspec( dllexport ) void removeText( int begin, int end );
  53. // Fügt ein Text an einer bestimmten Position ein
  54. // pos: die position des neuen Textausschnitts
  55. // text: der neue Text
  56. __declspec( dllexport ) void insertText( int pos, const char *text );
  57. // Entfernt nicht benötiegte gleiche styles
  58. __declspec( dllexport ) void cleanupStyles();
  59. // gibt eine referenz auf das style objekt zurück
  60. __declspec( dllexport ) TextStyle &currentStyle();
  61. // gibt den aktuellen text renderer zurück
  62. __declspec( dllexport ) TextRenderer *zCurrentRenderer();
  63. // ändert den inhalt des style objektes auf den style des nächsten zeichens
  64. // gibt 0 zurück falls es kein weiteres zeichen gibt
  65. __declspec( dllexport ) bool nextStyle();
  66. // ändert den inhalt des style objektes auf den style des ersten zeichens
  67. __declspec( dllexport ) void resetIteration();
  68. // Gibt den Style eines bestimmten zeichens zurück
  69. // index: Der index des Zeichensf
  70. __declspec( dllexport ) TextStyle getTextStyle( int index ) const;
  71. // Erhöht den Reference Counting Zähler.
  72. // return: this.
  73. __declspec( dllexport ) TextStyleManager *getThis();
  74. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  75. // return: 0.
  76. __declspec( dllexport ) virtual TextStyleManager *release();
  77. friend TextFeld;
  78. };
  79. class Style : public ZeichnungHintergrund::Style
  80. {
  81. public:
  82. const static __int64 Mehrzeilig = 0x001000; // Wenn dieser Flag nicht gesetzt wird, werden alle Zeilenumbrüche automatisch aus dem Text entfernt
  83. const static __int64 HCenter = 0x002000; // Wenn dieser Flag gesetzt wird, wird der Text genau in der horizontaen Mitte des Feldes plaziert
  84. const static __int64 VCenter = 0x004000; // Wenn dieser Flag gesetzt wird, wird der Text genau in der vertikalen Mitte des Feldes plaziert
  85. //const static __int64 Styled = 0x008000; // Wenn dieser Flag gesetzt wird, kann der Text verschiedene Styles haben
  86. const static __int64 Center = HCenter | VCenter; // Vereint die Flags HCenter und VCenter
  87. const static __int64 TextFeld = Sichtbar | Erlaubt | Rahmen | Buffered | VCenter; // Vereint die Flags Sichtbar, Erlaubt, Rahmen, Buffered, VCenter
  88. const static __int64 Text = Sichtbar | /*Styled |*/ Mehrzeilig; // Vereint die Flags Sichtbar, Mehrfarbig, Mehrzeilig
  89. const static __int64 TextGebiet = Sichtbar | Erlaubt | Rahmen | Hintergrund | /*Styled |*/ Mehrzeilig | VScroll; // Vereint die Flags Sichtbar, Erlaubt, Rahmen, Hintergrund, Mehrzeilig, Mehrfarbig, VScroll
  90. const static __int64 Scroll = VScroll | HScroll; // Vereint die Flags VScroll und HScroll
  91. };
  92. private:
  93. TextStyleManager *tm;
  94. unsigned char showChar;
  95. int cpos;
  96. double tickVal;
  97. bool mausKlick;
  98. int getTextHeight() const;
  99. int getTextWidth() const;
  100. public:
  101. // Konstruktor
  102. __declspec( dllexport ) TextFeld();
  103. // Destruktor
  104. __declspec( dllexport ) virtual ~TextFeld();
  105. // setzt einen Zeiger auf den Text im Textfeld
  106. // txt: Der Zeiger auf den Text
  107. __declspec( dllexport ) void setTextZ( Text *txt );
  108. // setzt den Text des Textfeldes
  109. // txt: der Text
  110. __declspec( dllexport ) void setText( Text *txt );
  111. // setzt den Text des Textfeldes
  112. // txt: der Text
  113. __declspec( dllexport ) void setText( const char *txt );
  114. // setzt den Text mit styles
  115. // txt: der Text
  116. // format: \x1: aktiviert unterschtrich
  117. // \x2\xY: setzt die schriftgröße auf y für den folgenden text
  118. // \x3\xA\xR\xG\xB: setzt die schriftfarbe auf ARGB
  119. // \x4\xA\xR\xG\xB: setzt die farbe des ausgewählten textes
  120. // \x5\xA\xR\xG\xB: setzt die hintergrundfarbe des ausgewählten textes
  121. // \x6\xY: setzt text renderer index auf y
  122. // \x7: deaktiviert unterschtrich
  123. __declspec( dllexport ) void setFormattedText( const char *txt );
  124. // Setzt den Style eines Textabschnittes
  125. // begin: die startposition des Abschnittes
  126. // end: die endposition des Abschnittes (nicht enthalten)
  127. __declspec( dllexport ) void setTextStyle( int begin, int end, TextStyle style );
  128. // Fügt eine Zeile an den Text an
  129. // zeile: Die neue Zeile
  130. __declspec( dllexport ) void addZeile( const char *zeile );
  131. // Fügt eine Zeile an den Text an
  132. // zeile: Die neue Zeile
  133. // color: Die Farbe der Zeile
  134. __declspec( dllexport ) void addZeile( const char *zeile, int color );
  135. // Deselectiert alle textabschnitte
  136. __declspec( dllexport ) void deselectAuswahl();
  137. // Setzt den ausgewählten textabschnitt fest
  138. // pos1: Die Cursorposition im Text
  139. // pos2: Die Position im Text, bis zu der der Text eingefärbt werden soll
  140. __declspec( dllexport ) void setAuswahl( int pos1, int pos2 );
  141. // Setzt den ausgewählten textabschnitt fest
  142. // auswahl: Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll
  143. __declspec( dllexport ) void setAuswahl( Punkt &auswahl );
  144. // Setzt den ausgewählten textabschnitt fest
  145. // pos1: Die Cursorposition im Text
  146. // pos2: Die Position im Text, bis zu der der Text eingefärbt werden soll
  147. __declspec( dllexport ) void addAuswahl( int pos1, int pos2 );
  148. // Setzt den ausgewählten textabschnitt fest
  149. // auswahl: Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll
  150. __declspec( dllexport ) void addAuswahl( Punkt &auswahl );
  151. // Setzt den ausgewählten textabschnitt fest
  152. // begin: Die Cursorposition im Text
  153. // end: Die Position im Text, bis zu der der Text eingefärbt werden soll
  154. __declspec( dllexport ) void invertAuswahl( int begin, int end );
  155. // ersetzt alle ausgewählten Textabschnitte mit einem text
  156. // text: der neue Text
  157. __declspec( dllexport ) void replaceAuswahl( const char *text );
  158. // Setzt den verwendeten TextRenderer
  159. // textRd: Der Textrenderer
  160. __declspec( dllexport ) void setTextRendererZ( TextRenderer *textRd );
  161. // Fügt einen TextRenderer hinzu
  162. // textRd: Der Textrenderer
  163. __declspec( dllexport ) void addTextRendererZ( TextRenderer *textRd );
  164. // Setzt die verwendeten TextRenderer
  165. // textRd: Die Textrenderer
  166. __declspec( dllexport ) void setTextRendererZ( RCArray< TextRenderer > *textRd );
  167. // Setzt einen Zeiger zur Schrift
  168. // schrift: Die Schrift, die zum Textzeichnen verwendet werden soll.
  169. __declspec( dllexport ) void setSchriftZ( Schrift *schrift );
  170. // Setzt einen Zeiger zur Schrift
  171. // rendererIndex: Der Index des Renderers dessen Schrift gesetzt werden soll
  172. // schrift: Die Schrift, die zum Textzeichnen verwendet werden soll.
  173. __declspec( dllexport ) void setSchriftZ( int rendererIndex, Schrift *schrift );
  174. // Setzt die Schriftgröße (Standart: 12)
  175. // gr: Die Schriftgröße, die zum Textzeichnen verwendet werden soll
  176. __declspec( dllexport ) void setSchriftSize( unsigned char gr );
  177. // Setzt die Schriftgröße (Standart: 12)
  178. // begin: Der Index des ersten betroffenen Zeichens
  179. // end: Der Index des ersten nicht betroffenen Zeichens
  180. // gr: Die Schriftgröße, die zum Textzeichnen verwendet werden soll
  181. __declspec( dllexport ) void setSchriftSize( int begin, int end, unsigned char gr );
  182. // Setzt die Schrift Farbe
  183. // fc: Die Farbe, die zum Textzeichnen verwendet werden soll
  184. __declspec( dllexport ) void setSchriftFarbe( int fc );
  185. // Setzt die Schrift Farbe
  186. // begin: Der Index des ersten betroffenen Zeichens
  187. // end: Der Index des ersten nicht betroffenen Zeichens
  188. // fc: Die Farbe, die zum Textzeichnen verwendet werden soll
  189. __declspec( dllexport ) void setSchriftFarbe( int begin, int end, int fc );
  190. // Legt einen Buchstaben fest, der zum zeichnen verwendet werden soll, unabhängig vom Text des Textfeldes (benötigt Flag zum Zeichnen: Rahmen)
  191. // c: Der Buchstabe, der gezeichnet werden soll
  192. // Beispiel: setShowChar( '*' ); Bei Passwort Textfeldern
  193. __declspec( dllexport ) void setSchowChar( unsigned char c );
  194. // Scrollt zu einer bestimmten Zeile (benötigt Flag zum Zeichnen: VScroll)
  195. // zeile: Der Index der Zeile, die als oberste Zeile zu sehen sein soll
  196. __declspec( dllexport ) void setVScrollZuZeile( int zeile );
  197. // Scrollt zu einer bestimmten Position im Text. Ohne den Flag Erlaubt wrd immer ganz nach unten gescrollt. (benötigt Flag zum Zeichnen: VScroll)
  198. // pos: Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt
  199. __declspec( dllexport ) void updateVScroll( int pos = -1 );
  200. // Scrollt zu einer bestimmten Position im Text. Benötigt den Flag Erlaubt. (benötigt Flag zum Zeichnen: HScroll)
  201. // pos: Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt
  202. __declspec( dllexport ) void updateHScroll( int pos = -1 );
  203. // Gibt die breite in pixeln zurück, die benötigt wird um den aktuellen text mit den aktuellen styles voll anzuzeigen
  204. __declspec( dllexport ) int getNeededWidth();
  205. // Gibt die höhe in pixeln zurück, die benötigt wird um den aktuellen text mit den aktuellen styles voll anzuzeigen
  206. __declspec( dllexport ) int getNeededHeight();
  207. // Aktualisiert das Objekt. Wird vom Framework aufgerufen
  208. // tickVal: Die Zeit in sekunden, die seit dem lezten Aufruf dieser Funktion vergangen ist
  209. // return: 1, wenn sich etwas verändert hat und das Bild neu gezeichnet werden muss. 0 sonst
  210. __declspec( dllexport ) virtual bool tick( double tickval ) override;
  211. // Verarbeitet Maus Nachrichten
  212. // me: Das Ereignis, was durch die Mauseingabe ausgelößt wurde
  213. __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me ) override;
  214. // Verarbeitet Tastatur Nachrichten
  215. // me: Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
  216. __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ) override;
  217. // Zeichnet das Objekt nach zRObj, falls es sichtbar ist
  218. // zRObj: Das Bild, in welches gezeichnet werden soll
  219. __declspec( dllexport ) virtual void render( Bild &zRObj ) override;
  220. // Gibt den Text aus dem Textfeld zurück
  221. __declspec( dllexport ) Text *getText() const;
  222. // Gibt den Text aus dem Textfeld ohne erhöhten Reference Counter zurück
  223. __declspec( dllexport ) Text *zText() const;
  224. // Gibt die Schrift zurück.
  225. // return: 0, falls die Schrift nicht gesetzt wurde
  226. __declspec( dllexport ) Schrift *getSchrift() const;
  227. // Gibt die Schrift ohne erhöhten Reference Counter zurük
  228. // return: 0, falls die Schrift nicht gesetzt wurde
  229. __declspec( dllexport ) Schrift *zSchrift() const;
  230. // Gibt die Schrift zurück.
  231. // rendererIndex: Der Index des Renderers dessen Schrift zurückgegeben werden soll
  232. // return: 0, falls die Schrift nicht gesetzt wurde
  233. __declspec( dllexport ) Schrift *getSchrift( int rendererIndex ) const;
  234. // Gibt die Schrift ohne erhöhten Reference Counter zurük
  235. // rendererIndex: Der Index des Renderers dessen Schrift zurückgegeben werden soll
  236. // return: 0, falls die Schrift nicht gesetzt wurde
  237. __declspec( dllexport ) Schrift *zSchrift( int rendererIndex ) const;
  238. // Gibt den TextRenderer zurück.
  239. // return: 0, falls der TextRenderer nicht gesetzt wurde
  240. __declspec( dllexport ) TextRenderer *getTextRenderer() const;
  241. // Gibt dien TextRenderer ohne erhöhten Reference Counter zurük
  242. // return: 0, falls der TextRenderer nicht gesetzt wurde
  243. __declspec( dllexport ) TextRenderer *zTextRenderer() const;
  244. // Gibt den TextRenderer zurück.
  245. // index: Der Index des Renderers der zurückgegeben werden soll
  246. // return: 0, falls der TextRenderer nicht gesetzt wurde
  247. __declspec( dllexport ) TextRenderer *getTextRenderer( int index ) const;
  248. // Gibt dien TextRenderer ohne erhöhten Reference Counter zurük
  249. // index: Der Index des Renderers der zurückgegeben werden soll
  250. // return: 0, falls der TextRenderer nicht gesetzt wurde
  251. __declspec( dllexport ) TextRenderer *zTextRenderer( int index ) const;
  252. // Gibt die Schriftgröße zurück
  253. __declspec( dllexport ) unsigned char getSchriftSize() const;
  254. // Gibt die Schriftgröße zurück
  255. // index: Der Index des Zeichens
  256. __declspec( dllexport ) unsigned char getSchriftSize( int index ) const;
  257. // Gibt die Schriftfarbe im A8R8G8B8 Format zurück
  258. __declspec( dllexport ) int getSchriftFarbe() const;
  259. // Gibt die Schriftfarbe im A8R8G8B8 Format zurück
  260. // index: Der Index des Zeichens
  261. __declspec( dllexport ) int getSchriftFarbe( int index ) const;
  262. // Gibt den Anzeigebuchstabe zurück
  263. __declspec( dllexport ) unsigned char getShowChar() const;
  264. // Gibt die Cursorposition zurück
  265. __declspec( dllexport ) int getCursorPos() const;
  266. // Gibt 1 zurück wenn das Zeichen ausgewählt ist
  267. // index: Der Index des Zeichens
  268. __declspec( dllexport ) bool isCharSelected( int index ) const;
  269. // Gibt den Index des Zeichens zurück, das sich unter der Maus befindet
  270. // mx: die x position der maus relativ zur position des textfeldes
  271. // my: die y position der maus relativ zut position des textfeldes
  272. // return: -1, falls sich an der Position kein zeichen befindet
  273. __declspec( dllexport ) int getTextIndexAt( int mx, int my ) const;
  274. // Gibt den Index des Zeichens zurück, vor dem der curser gesetzt wird, wenn mit der maus geklickt wird
  275. // mx: die x position der maus relativ zur position des textfeldes
  276. // my: die y position der maus relativ zut position des textfeldes
  277. __declspec( dllexport ) int getCurserPosAt( int mx, int my ) const;
  278. // Gibt den Style eines bestimmten zeichens zurück
  279. // index: Der index des Zeichensf
  280. __declspec( dllexport ) TextStyle getTextStyle( int index ) const;
  281. // Erzeugt eine Komplette Kopie des Textfeldes, welches ohne auswirkungen verändert werden kann
  282. __declspec( dllexport ) Zeichnung *dublizieren() const override;
  283. };
  284. }
  285. #endif