123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- #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;
- int interactParam;
- unsigned char rendererIndex;
- DLLEXPORT bool operator==( const TextStyle& rhs );
- };
- class TextStyleManager : public virtual ReferenceCounter
- {
- protected:
- RCArray< TextRenderer > *renderer;
- Array< TextStyle > textStyle;
- int index;
- int styleIndex;
- TextStyle current;
- Text *text;
- public:
- DLLEXPORT TextStyleManager();
- DLLEXPORT virtual ~TextStyleManager();
- //! Setzt den Style eines Textabschnittes
- //! \param begin die startposition des Abschnittes
- //! \param end die endposition des Abschnittes (nicht enthalten)
- DLLEXPORT void setTextStyle( int begin, int end, TextStyle style );
- //! Entfernt einen Textabschnitt
- //! \param begin der index des ersten betroffenen zeichens
- //! \param end der index des ersten zeichens nach dem abschnitt
- DLLEXPORT void removeText( int begin, int end );
- //! Fügt ein Text an einer bestimmten Position ein
- //! \param pos die position des neuen Textausschnitts
- //! \param text der neue Text
- DLLEXPORT void insertText( int pos, const char *text );
- //! Entfernt nicht benötiegte gleiche styles
- DLLEXPORT void cleanupStyles();
- //! gibt eine referenz auf das style objekt zurück
- DLLEXPORT TextStyle ¤tStyle();
- //! gibt den aktuellen text renderer zurück
- 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
- DLLEXPORT bool nextStyle();
- //! ändert den inhalt des style objektes auf den style des angegebenen zeichens
- //! \param index der Index des Zeichens zu dem gesprungen werden soll
- //! gibt 0 zurück falls es das zeichen nicht gibt
- DLLEXPORT bool stepTo( int index );
- //! ändert den inhalt des style objektes auf den style des ersten zeichens
- DLLEXPORT void resetIteration();
- //! Gibt den Style eines bestimmten zeichens zurück
- //! \param index Der index des Zeichens
- DLLEXPORT TextStyle getTextStyle( int index ) const;
- 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 Editierbar = 0x2000000; //! Wenn dieser Flag gesetzt wird, kann der Text durch den Nutzer bearbeitet werden
-
- const static __int64 Center = HCenter | VCenter; //! Vereint die Flags HCenter und VCenter
- const static __int64 TextFeld = Sichtbar | Erlaubt | Rahmen | Buffered | VCenter | Editierbar; //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, Buffered, VCenter
- const static __int64 Text = Sichtbar | Mehrzeilig | Erlaubt; //! Vereint die Flags Sichtbar, Mehrfarbig, Mehrzeilig
- const static __int64 TextGebiet = Sichtbar | Erlaubt | Rahmen | Hintergrund | Editierbar | 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;
- std::function< void( int, int, MausEreignis me ) > charEvent;
- int getTextHeight() const;
- int getTextWidth() const;
- //! Verarbeitet Maus Nachrichten
- //! \param me Das Ereignis, was durch die Mauseingabe ausgelößt wurde
- DLLEXPORT virtual void doMausEreignis( MausEreignis &me, bool userRet ) override;
- public:
- //! Konstruktor
- DLLEXPORT TextFeld();
- //! Destruktor
- DLLEXPORT virtual ~TextFeld();
- //! charEvent: eine funktion die aufgerufen wird, wenn sich die maus auf einem bestimmten zeichen befindet und der interactParam im style != 0 ist
- //! \param aufruf charEvent( charIndex, interactParam, mausEreignis );
- DLLEXPORT void setCharEvent( std::function< void( int, int, MausEreignis me ) > charEvent );
- //! setzt einen Zeiger auf den Text im Textfeld
- //! \param txt Der Zeiger auf den Text
- DLLEXPORT void setTextZ( Text *txt );
- //! setzt den Text des Textfeldes
- //! \param txt der Text
- DLLEXPORT void setText( Text *txt );
- //! setzt den Text des Textfeldes
- //! \param txt der Text
- DLLEXPORT void setText( const char *txt );
- //! setzt den Text mit styles
- //! \param txt der Text
- //! \param format
- //! - \\x1: aktiviert unterschtrich
- //! - \\x2\\xY: setzt die schriftgröße auf y für den folgenden text
- //! - \\x3\\xA\\xR\\xG\\xB: setzt die schriftfarbe auf ARGB
- //! - \\x4\\xA\\xR\\xG\\xB: setzt die farbe des ausgewählten textes
- //! - \\x5\\xA\\xR\\xG\\xB: setzt die hintergrundfarbe des ausgewählten textes
- //! - \\x6\\xY: setzt text renderer index auf y
- //! - \\x7: deaktiviert unterschtrich
- //! - \\x8\\xA\\xB\\xC\\xD: set interact param to ABCD
- DLLEXPORT void setFormattedText( const char *txt );
- //! fügt zeilenumbrüche so ein, dass der text nicht die breite des textfeldes überschreitet
- //! \param spacing ein text, der direkt nach jedem eingefügten Zeilenumbruch eingefügt wird
- DLLEXPORT void addLineBreaks( const char *spacing = "" );
- //! Setzt den Style eines Textabschnittes
- //! \param begin die startposition des Abschnittes
- //! \param end die endposition des Abschnittes (nicht enthalten)
- DLLEXPORT void setTextStyle( int begin, int end, TextStyle style );
- //! Fügt eine Zeile an den Text an
- //! \param zeile Die neue Zeile
- DLLEXPORT void addZeile( const char *zeile );
- //! Fügt eine Zeile an den Text an
- //! \param zeile Die neue Zeile
- //! \param color Die Farbe der Zeile
- DLLEXPORT void addZeile( const char *zeile, int color );
- //! Deselectiert alle textabschnitte
- 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
- DLLEXPORT void setAuswahl( int pos1, int pos2 );
- //! Setzt den ausgewählten textabschnitt fest
- //! \param auswahl Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll
- 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
- DLLEXPORT void addAuswahl( int pos1, int pos2 );
- //! Setzt den ausgewählten textabschnitt fest
- //! \param auswahl Ein punkt mit x als Cursorposition und y als der Position, bis zu der der Text eingefärbt werden soll
- DLLEXPORT void addAuswahl( Punkt &auswahl );
- //! Setzt den ausgewählten textabschnitt fest
- //! \param begin Die Cursorposition im Text
- //! \param end Die Position im Text, bis zu der der Text eingefärbt werden soll
- DLLEXPORT void invertAuswahl( int begin, int end );
- //! ersetzt alle ausgewählten Textabschnitte mit einem text
- //! \param text der neue Text
- DLLEXPORT void replaceAuswahl( const char *text );
- //! Setzt den verwendeten TextRenderer
- //! \param textRd Der Textrenderer
- DLLEXPORT void setTextRendererZ( TextRenderer *textRd );
- //! Fügt einen TextRenderer hinzu
- //! \param textRd Der Textrenderer
- DLLEXPORT void addTextRendererZ( TextRenderer *textRd );
- //! Setzt die verwendeten TextRenderer
- //! \param textRd Die Textrenderer
- DLLEXPORT void setTextRendererZ( RCArray< TextRenderer > *textRd );
- //! Setzt einen Zeiger zur Schrift
- //! \param schrift Die Schrift, die zum Textzeichnen verwendet werden soll.
- DLLEXPORT void setSchriftZ( Schrift *schrift );
- //! Setzt einen Zeiger zur Schrift
- //! \param rendererIndex Der Index des Renderers dessen Schrift gesetzt werden soll
- //! \param schrift Die Schrift, die zum Textzeichnen verwendet werden soll.
- DLLEXPORT void setSchriftZ( int rendererIndex, Schrift *schrift );
- //! Setzt die Schriftgröße (Standart: 12)
- //! \param gr Die Schriftgröße, die zum Textzeichnen verwendet werden soll
- DLLEXPORT void setSchriftSize( unsigned char gr );
- //! Setzt die Schriftgröße (Standart: 12)
- //! \param begin Der Index des ersten betroffenen Zeichens
- //! \param end Der Index des ersten nicht betroffenen Zeichens
- //! \param gr Die Schriftgröße, die zum Textzeichnen verwendet werden soll
- DLLEXPORT void setSchriftSize( int begin, int end, unsigned char gr );
- //! Setzt die Schrift Farbe
- //! \param fc Die Farbe, die zum Textzeichnen verwendet werden soll
- DLLEXPORT void setSchriftFarbe( int fc );
- //! Setzt die Schrift Farbe
- //! \param begin Der Index des ersten betroffenen Zeichens
- //! \param end Der Index des ersten nicht betroffenen Zeichens
- //! \param fc Die Farbe, die zum Textzeichnen verwendet werden soll
- 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)
- //! \param c Der Buchstabe, der gezeichnet werden soll
- //! Beispiel: setShowChar( '*' ); Bei Passwort Textfeldern
- DLLEXPORT void setSchowChar( unsigned char c );
- //! Scrollt zu einer bestimmten Zeile (benötigt Flag zum Zeichnen: VScroll)
- //! \param zeile Der Index der Zeile, die als oberste Zeile zu sehen sein soll
- 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)
- //! \param pos Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt
- DLLEXPORT void updateVScroll( int pos = -1 );
- //! Scrollt zu einer bestimmten Position im Text. Benötigt den Flag Erlaubt. (benötigt Flag zum Zeichnen: HScroll)
- //! \param pos Der Index des Zeichens, zu dem gescrollt werden soll. Standartmäßig wird zur Cursorposition gescrollt
- DLLEXPORT void updateHScroll( int pos = -1 );
- //! Gibt die breite in pixeln zurück, die benötigt wird um den aktuellen text mit den aktuellen styles voll anzuzeigen
- DLLEXPORT int getNeededWidth();
- //! Gibt die höhe in pixeln zurück, die benötigt wird um den aktuellen text mit den aktuellen styles voll anzuzeigen
- DLLEXPORT int getNeededHeight();
- //! Aktualisiert das Objekt. Wird vom Framework aufgerufen
- //! \param 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
- DLLEXPORT virtual bool tick( double tickval ) override;
- //! Verarbeitet Tastatur Nachrichten
- //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt wurde
- DLLEXPORT void doTastaturEreignis( TastaturEreignis &te ) override;
- //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist
- //! \param zRObj Das Bild, in welches gezeichnet werden soll
- DLLEXPORT virtual void render( Bild &zRObj ) override;
- //! Gibt den Text aus dem Textfeld zurück
- DLLEXPORT Text *getText() const;
- //! Gibt den Text aus dem Textfeld ohne erhöhten Reference Counter zurück
- DLLEXPORT Text *zText() const;
- //! Gibt die Schrift zurück.
- //! \return 0, falls die Schrift nicht gesetzt wurde
- DLLEXPORT Schrift *getSchrift() const;
- //! Gibt die Schrift ohne erhöhten Reference Counter zurük
- //! \return 0, falls die Schrift nicht gesetzt wurde
- DLLEXPORT Schrift *zSchrift() const;
- //! Gibt die Schrift zurück.
- //! \param rendererIndex Der Index des Renderers dessen Schrift zurückgegeben werden soll
- //! \return 0, falls die Schrift nicht gesetzt wurde
- DLLEXPORT Schrift *getSchrift( int rendererIndex ) const;
- //! Gibt die Schrift ohne erhöhten Reference Counter zurük
- //! \param rendererIndex Der Index des Renderers dessen Schrift zurückgegeben werden soll
- //! \return 0, falls die Schrift nicht gesetzt wurde
- DLLEXPORT Schrift *zSchrift( int rendererIndex ) const;
- //! Gibt den TextRenderer zurück.
- //! \return 0, falls der TextRenderer nicht gesetzt wurde
- DLLEXPORT TextRenderer *getTextRenderer() const;
- //! Gibt dien TextRenderer ohne erhöhten Reference Counter zurük
- //! \return 0, falls der TextRenderer nicht gesetzt wurde
- DLLEXPORT TextRenderer *zTextRenderer() const;
- //! Gibt den TextRenderer zurück.
- //! \param index Der Index des Renderers der zurückgegeben werden soll
- //! \return 0, falls der TextRenderer nicht gesetzt wurde
- DLLEXPORT TextRenderer *getTextRenderer( int index ) const;
- //! Gibt dien TextRenderer ohne erhöhten Reference Counter zurük
- //! \param index Der Index des Renderers der zurückgegeben werden soll
- //! \return 0, falls der TextRenderer nicht gesetzt wurde
- DLLEXPORT TextRenderer *zTextRenderer( int index ) const;
- //! Gibt die Schriftgröße zurück
- DLLEXPORT unsigned char getSchriftSize() const;
- //! Gibt die Schriftgröße zurück
- //! \param index Der Index des Zeichens
- DLLEXPORT unsigned char getSchriftSize( int index ) const;
- //! Gibt die Schriftfarbe im A8R8G8B8 Format zurück
- DLLEXPORT int getSchriftFarbe() const;
- //! Gibt die Schriftfarbe im A8R8G8B8 Format zurück
- //! \param index Der Index des Zeichens
- DLLEXPORT int getSchriftFarbe( int index ) const;
- //! Gibt den Anzeigebuchstabe zurück
- DLLEXPORT unsigned char getShowChar() const;
- //! Gibt die Cursorposition zurück
- DLLEXPORT int getCursorPos() const;
- //! Gibt 1 zurück wenn das Zeichen ausgewählt ist
- //! \param index Der Index des Zeichens
- DLLEXPORT bool isCharSelected( int index ) const;
- //! Gibt den Index des Zeichens zurück, das sich unter der Maus befindet
- //! \param mx die x position der maus relativ zur position des textfeldes
- //! \param my die y position der maus relativ zut position des textfeldes
- //! \return -1, falls sich an der Position kein zeichen befindet
- 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
- //! \param mx die x position der maus relativ zur position des textfeldes
- //! \param my die y position der maus relativ zut position des textfeldes
- DLLEXPORT int getCurserPosAt( int mx, int my ) const;
- //! Gibt den Style eines bestimmten zeichens zurück
- //! \param index Der index des Zeichensf
- DLLEXPORT TextStyle getTextStyle( int index ) const;
- //! Erzeugt eine Komplette Kopie des Textfeldes, welches ohne auswirkungen verändert werden kann
- DLLEXPORT Zeichnung *dublizieren() const override;
- };
- }
- #endif
|