#ifndef TextFeld_H #define TextFeld_H #include "Zeichnung.h" #include "Array.h" namespace Framework { class Schrift; // Schrift.h class Text; // Text.h class AlphaFeld; // AlphaFeld.h class Rahmen; // Rahmen.h class TextFeld; // aus dieser Datei class VScrollBar; // Scroll.h class HScrollBar; // Scroll.h class TextRenderer; // Verwaltet ein Textfeld class TextFeld : public ZeichnungHintergrund { public: struct TextStyle { int beginIndex; unsigned char fontSize; int fontColor; int selectedColor; int selectedBackcroundColor; bool underlined; bool selected; MausAktion onClick; char rendererIndex; __declspec( dllexport ) bool operator==( const TextStyle& rhs ); }; class TextStyleManager { protected: RCArray< TextRenderer > *renderer; Array< TextStyle > textStyle; int index; int styleIndex; TextStyle current; Text *text; int ref; public: __declspec( dllexport ) TextStyleManager(); __declspec( dllexport ) virtual ~TextStyleManager(); // Setzt den Style eines Textabschnittes // begin: die startposition des Abschnittes // end: die endposition des Abschnittes (nicht enthalten) __declspec( dllexport ) void setTextStyle( int begin, int end, TextStyle style ); // Entfernt einen Textabschnitt // begin: der index des ersten betroffenen zeichens // end: der index des ersten zeichens nach dem abschnitt __declspec( dllexport ) void removeText( int begin, int end ); // Fügt ein Text an einer bestimmten Position ein // pos: die position des neuen Textausschnitts // text: der neue Text __declspec( dllexport ) void insertText( int pos, const char *text ); // Entfernt nicht benötiegte gleiche styles __declspec( dllexport ) void cleanupStyles(); // gibt eine referenz auf das style objekt zurück __declspec( dllexport ) TextStyle ¤tStyle(); // gibt den aktuellen text renderer zurück __declspec( dllexport ) TextRenderer *zCurrentRenderer(); // ändert den inhalt des style objektes auf den style des nächsten zeichens // gibt 0 zurück falls es kein weiteres zeichen gibt __declspec( dllexport ) bool nextStyle(); // ändert den inhalt des style objektes auf den style des ersten zeichens __declspec( dllexport ) void resetIteration(); // Gibt den Style eines bestimmten zeichens zurück // index: Der index des Zeichensf __declspec( dllexport ) TextStyle getTextStyle( int index ) const; // Erhöht den Reference Counting Zähler. // return: this. __declspec( dllexport ) TextStyleManager *getThis(); // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. // return: 0. __declspec( dllexport ) virtual TextStyleManager *release(); friend TextFeld; }; class Style : public ZeichnungHintergrund::Style { public: const static __int64 Mehrzeilig = 0x001000; // Wenn dieser Flag nicht gesetzt wird, werden alle Zeilenumbrüche automatisch aus dem Text entfernt const static __int64 HCenter = 0x002000; // Wenn dieser Flag gesetzt wird, wird der Text genau in der horizontaen Mitte des Feldes plaziert const static __int64 VCenter = 0x004000; // Wenn dieser Flag gesetzt wird, wird der Text genau in der vertikalen Mitte des Feldes plaziert //const static __int64 Styled = 0x008000; // Wenn dieser Flag gesetzt wird, kann der Text verschiedene Styles haben const static __int64 Center = HCenter | VCenter; // Vereint die Flags HCenter und VCenter const static __int64 TextFeld = Sichtbar | Erlaubt | Rahmen | Buffered | VCenter; // Vereint die Flags Sichtbar, Erlaubt, Rahmen, Buffered, VCenter const static __int64 Text = Sichtbar | /*Styled |*/ Mehrzeilig; // Vereint die Flags Sichtbar, Mehrfarbig, Mehrzeilig const static __int64 TextGebiet = Sichtbar | Erlaubt | Rahmen | Hintergrund | /*Styled |*/ Mehrzeilig | VScroll; // Vereint die Flags Sichtbar, Erlaubt, Rahmen, Hintergrund, Mehrzeilig, Mehrfarbig, VScroll const static __int64 Scroll = VScroll | HScroll; // Vereint die Flags VScroll und HScroll }; private: TextStyleManager *tm; unsigned char showChar; int cpos; double tickVal; bool mausKlick; int getTextHeight() const; int getTextWidth() const; public: // Konstruktor __declspec( dllexport ) TextFeld(); // Destruktor __declspec( dllexport ) virtual ~TextFeld(); // setzt einen Zeiger auf den Text im Textfeld // txt: Der Zeiger auf den Text __declspec( dllexport ) void setTextZ( Text *txt ); // setzt den Text des Textfeldes // txt: der Text __declspec( dllexport ) void setText( Text *txt ); // setzt den Text des Textfeldes // txt: der Text __declspec( dllexport ) void setText( const char *txt ); // Setzt den Style eines Textabschnittes // begin: die startposition des Abschnittes // end: die endposition des Abschnittes (nicht enthalten) __declspec( dllexport ) void setTextStyle( int begin, int end, TextStyle style ); // Fügt eine Zeile an den Text an // zeile: Die neue Zeile __declspec( dllexport ) void addZeile( const char *zeile ); // Deselectiert alle textabschnitte __declspec( dllexport ) void deselectAuswahl(); // Setzt den ausgewählten textabschnitt fest // pos1: Die Cursorposition im Text // pos2: Die Position im Text, bis zu der der Text eingefärbt werden soll __declspec( dllexport ) void setAuswahl( int pos1, int pos2 ); // Setzt den ausgewählten textabschnitt fest // auswahl: Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll __declspec( dllexport ) void setAuswahl( Punkt &auswahl ); // Setzt den ausgewählten textabschnitt fest // pos1: Die Cursorposition im Text // pos2: Die Position im Text, bis zu der der Text eingefärbt werden soll __declspec( dllexport ) void addAuswahl( int pos1, int pos2 ); // Setzt den ausgewählten textabschnitt fest // auswahl: Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll __declspec( dllexport ) void addAuswahl( Punkt &auswahl ); // Setzt den ausgewählten textabschnitt fest // begin: Die Cursorposition im Text // end: Die Position im Text, bis zu der der Text eingefärbt werden soll __declspec( dllexport ) void invertAuswahl( int begin, int end ); // ersetzt alle ausgewählten Textabschnitte mit einem text // text: der neue Text __declspec( dllexport ) void replaceAuswahl( const char *text ); // Setzt den verwendeten TextRenderer // textRd: Der Textrenderer __declspec( dllexport ) void setTextRendererZ( TextRenderer *textRd ); // Fügt einen TextRenderer hinzu // textRd: Der Textrenderer __declspec( dllexport ) void addTextRendererZ( TextRenderer *textRd ); // Setzt die verwendeten TextRenderer // textRd: Die Textrenderer __declspec( dllexport ) void setTextRendererZ( RCArray< TextRenderer > *textRd ); // Setzt einen Zeiger zur Schrift // schrift: Die Schrift, die zum Textzeichnen verwendet werden soll. __declspec( dllexport ) void setSchriftZ( Schrift *schrift ); // Setzt einen Zeiger zur Schrift // rendererIndex: Der Index des Renderers dessen Schrift gesetzt werden soll // schrift: Die Schrift, die zum Textzeichnen verwendet werden soll. __declspec( dllexport ) void setSchriftZ( int rendererIndex, Schrift *schrift ); // Setzt die Schriftgröße (Standart: 12) // gr: Die Schriftgröße, die zum Textzeichnen verwendet werden soll __declspec( dllexport ) void setSchriftSize( unsigned char gr ); // Setzt die Schriftgröße (Standart: 12) // begin: Der Index des ersten betroffenen Zeichens // end: Der Index des ersten nicht betroffenen Zeichens // gr: Die Schriftgröße, die zum Textzeichnen verwendet werden soll __declspec( dllexport ) void setSchriftSize( int begin, int end, unsigned char gr ); // Setzt die Schrift Farbe // fc: Die Farbe, die zum Textzeichnen verwendet werden soll __declspec( dllexport ) void setSchriftFarbe( int fc ); // Setzt die Schrift Farbe // begin: Der Index des ersten betroffenen Zeichens // end: Der Index des ersten nicht betroffenen Zeichens // fc: Die Farbe, die zum Textzeichnen verwendet werden soll __declspec( dllexport ) void setSchriftFarbe( int begin, int end, int fc ); // Legt einen Buchstaben fest, der zum zeichnen verwendet werden soll, unabhängig vom Text des Textfeldes (benötigt Flag zum Zeichnen: Rahmen) // c: Der Buchstabe, der gezeichnet werden soll // Beispiel: setShowChar( '*' ); Bei Passwort Textfeldern __declspec( dllexport ) void setSchowChar( unsigned char c ); // Scrollt zu einer bestimmten Zeile (benötigt Flag zum Zeichnen: VScroll) // zeile: Der Index der Zeile, die als oberste Zeile zu sehen sein soll __declspec( dllexport ) void setVScrollZuZeile( int zeile ); // Scrollt zu einer bestimmten Position im Text. Ohne den Flag Erlaubt wrd immer ganz nach unten gescrollt. (benötigt Flag zum Zeichnen: VScroll) // pos: Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt __declspec( dllexport ) void updateVScroll( int pos = -1 ); // Scrollt zu einer bestimmten Position im Text. Benötigt den Flag Erlaubt. (benötigt Flag zum Zeichnen: HScroll) // pos: Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt __declspec( dllexport ) void updateHScroll( int pos = -1 ); // Aktualisiert das Objekt. Wird vom Framework aufgerufen // tickVal: Die Zeit in sekunden, die seit dem lezten Aufruf dieser Funktion vergangen ist // return: 1, wenn sich etwas verändert hat und das Bild neu gezeichnet werden muss. 0 sonst __declspec( dllexport ) virtual bool tick( double tickval ) override; // Verarbeitet Maus Nachrichten // me: Das Ereignis, was durch die Mauseingabe ausgelößt wurde __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me ) override; // Verarbeitet Tastatur Nachrichten // me: Das Ereignis, was durch die Tastatureingabe ausgelößt wurde __declspec( dllexport ) void doTastaturEreignis( TastaturEreignis &te ) override; // Zeichnet das Objekt nach zRObj, falls es sichtbar ist // zRObj: Das Bild, in welches gezeichnet werden soll __declspec( dllexport ) virtual void render( Bild &zRObj ) override; // Gibt den Text aus dem Textfeld zurück __declspec( dllexport ) Text *getText() const; // Gibt den Text aus dem Textfeld ohne erhöhten Reference Counter zurück __declspec( dllexport ) Text *zText() const; // Gibt die Schrift zurück. // return: 0, falls die Schrift nicht gesetzt wurde __declspec( dllexport ) Schrift *getSchrift() const; // Gibt die Schrift ohne erhöhten Reference Counter zurük // return: 0, falls die Schrift nicht gesetzt wurde __declspec( dllexport ) Schrift *zSchrift() const; // Gibt die Schrift zurück. // rendererIndex: Der Index des Renderers dessen Schrift zurückgegeben werden soll // return: 0, falls die Schrift nicht gesetzt wurde __declspec( dllexport ) Schrift *getSchrift( int rendererIndex ) const; // Gibt die Schrift ohne erhöhten Reference Counter zurük // rendererIndex: Der Index des Renderers dessen Schrift zurückgegeben werden soll // return: 0, falls die Schrift nicht gesetzt wurde __declspec( dllexport ) Schrift *zSchrift( int rendererIndex ) const; // Gibt den TextRenderer zurück. // return: 0, falls der TextRenderer nicht gesetzt wurde __declspec( dllexport ) TextRenderer *getTextRenderer() const; // Gibt dien TextRenderer ohne erhöhten Reference Counter zurük // return: 0, falls der TextRenderer nicht gesetzt wurde __declspec( dllexport ) TextRenderer *zTextRenderer() const; // Gibt den TextRenderer zurück. // index: Der Index des Renderers der zurückgegeben werden soll // return: 0, falls der TextRenderer nicht gesetzt wurde __declspec( dllexport ) TextRenderer *getTextRenderer( int index ) const; // Gibt dien TextRenderer ohne erhöhten Reference Counter zurük // index: Der Index des Renderers der zurückgegeben werden soll // return: 0, falls der TextRenderer nicht gesetzt wurde __declspec( dllexport ) TextRenderer *zTextRenderer( int index ) const; // Gibt die Schriftgröße zurück __declspec( dllexport ) unsigned char getSchriftSize() const; // Gibt die Schriftgröße zurück // index: Der Index des Zeichens __declspec( dllexport ) unsigned char getSchriftSize( int index ) const; // Gibt die Schriftfarbe im A8R8G8B8 Format zurück __declspec( dllexport ) int getSchriftFarbe() const; // Gibt die Schriftfarbe im A8R8G8B8 Format zurück // index: Der Index des Zeichens __declspec( dllexport ) int getSchriftFarbe( int index ) const; // Gibt den Anzeigebuchstabe zurück __declspec( dllexport ) unsigned char getShowChar() const; // Gibt die Cursorposition zurück __declspec( dllexport ) int getCursorPos() const; // Gibt 1 zurück wenn das Zeichen ausgewählt ist // index: Der Index des Zeichens __declspec( dllexport ) bool isCharSelected( int index ) const; // Gibt den Index des Zeichens zurück, das sich unter der Maus befindet // mx: die x position der maus relativ zur position des textfeldes // my: die y position der maus relativ zut position des textfeldes // return: -1, falls sich an der Position kein zeichen befindet __declspec( dllexport ) int getTextIndexAt( int mx, int my ) const; // Gibt den Index des Zeichens zurück, vor dem der curser gesetzt wird, wenn mit der maus geklickt wird // mx: die x position der maus relativ zur position des textfeldes // my: die y position der maus relativ zut position des textfeldes __declspec( dllexport ) int getCurserPosAt( int mx, int my ) const; // Gibt den Style eines bestimmten zeichens zurück // index: Der index des Zeichensf __declspec( dllexport ) TextStyle getTextStyle( int index ) const; // Erzeugt eine Komplette Kopie des Textfeldes, welches ohne auswirkungen verändert werden kann __declspec( dllexport ) Zeichnung *dublizieren() const override; }; } #endif