#ifndef Liste_H #define Liste_H #include "Zeichnung.h" #include "Array.h" namespace Framework { class Rahmen; //! Rahmen.h class AlphaFeld; //! AlphaFeld.h class Bild; //! Bild.h class Text; //! Text.h class TextFeld; //! TextFeld.h class VScrollBar; //! Scroll.h struct TastaturEreignis; //! TastaturEreignis.h struct MausEreignis; //! MausEreignis.h class Schrift; //! Schrift.h class AuswahlListe; //! aus dieser datei //! Eine Zeichnung des 2D GUI Frameworks, die eine Liste darstellt, aus der der Benutzer Elemente aus und abwählen kann class AuswahlListe : public ZeichnungHintergrund { public: class Style : public ZeichnungHintergrund::Style { public: const static __int64 FeldRahmen = 0x0001000; //! Legt fest, ob die Einträge der Liste einen Rahmen haben const static __int64 FeldHintergrund = 0x0002000; //! Legt fest, ob die Einträge einen Hintergrund haben const static __int64 FeldHBild = 0x0004000; //! Legt fest, ob die Einträge ein Hintergrund Bild haben const static __int64 FeldHAlpha = 0x0008000; //! Legt fest, ob beim zeichnen der Eintrag Hintergründe alpha blending verwendet werden soll const static __int64 FeldBuffer = 0x0010000; //! Legt fest, ob die Einträge einen Farbübergang besitzen const static __int64 AuswahlHintergrund = 0x0020000; //! Legt fest, ob die ausgewählten Einträge einen Hintergrund haben const static __int64 AuswahlHBild = 0x0040000; //! Legt fest, ob die ausgewählten einträge ein Bild als Hintergrund haben const static __int64 AuswahlHAlpha = 0x0080000; //! Legt fest, ob für das Zeichnen der Hintergründe der ausgewählten Einträge alpha blending verwendet wird const static __int64 AuswahlBuffer = 0x0100000; //! Legt fest, ob die ausgewählten Einträge einen Farbübergang besitzen const static __int64 AuswahlRahmen = 0x0200000; //! Legt fest, ob die ausgewählten Einträge einen Rahmen besitzen const static __int64 MultiStyled = 0x0400000; //! Legt fest, ob jeder Eintrag seine eigenen Hintergrund, Farbübergang und Rahmen hat, fals er ausgewählt ist const static __int64 MultiSelect = 0x0800000; //! Legt fest, das mehrere Einträge gleichzeitig ausgewählt sein können const static __int64 Selected = 0x1000000; //! Legt fest, ob ein bestimmter Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde. const static __int64 Normal = Sichtbar | Erlaubt | Rahmen | FeldHAlpha | FeldHintergrund | FeldRahmen | AuswahlBuffer | AuswahlRahmen; //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, FeldHAlpha, FeldHintergrund, FeldRahmen, AuswahlBuffer, AuswahlRahmen }; private: RCArray< TextFeld > *tfListe; int entries, auswahl; int ahFarbe; Bild *ahBild; AlphaFeld *aBuffer; Rahmen *aRahmen; Array< __int64 > *styles; Array< int > *ahFarbeListe; RCArray< Bild > *ahBildListe; RCArray< AlphaFeld > *aBufferListe; RCArray< Rahmen > *aRahmenListe; Schrift *schrift; //! Verarbeitet Tastatur Nachrichten //! \param me Das Ereignis, was durch die Tastatureingabe ausgelößt wurde DLLEXPORT void doMausEreignis( MausEreignis &me, bool userRet ) override; public: //! Konstruktor DLLEXPORT AuswahlListe(); //! Destruktor DLLEXPORT virtual ~AuswahlListe(); //! Aktualisiert die Styles, größe und Position der Einträge DLLEXPORT void update(); //! Fügt einen Eintrag hinzu //! \param txt Der Text des Eintrags DLLEXPORT void addEintrag( Text *txt ); //! Fügt einen Eintrag hinzu //! \param txt Der Text des Eintrags DLLEXPORT void addEintrag( const char *txt ); //! Fügt einen zeiger auf einen Eintrag hinzu //! \param tf Das TextFeld, mit dem der Eintrag gezeichnet wird DLLEXPORT void addEintragZ( TextFeld *tf ); //! Fügt einen Eintrag an einer bestimmten Position hinzu //! \param pos Der Index des neuen Eintrags //! \param txt Der Text des Eintrags DLLEXPORT void addEintrag( int pos, Text *txt ); //! Fügt einen Eintrag an einer bestimmten Position hinzu //! \param pos Der Index des neuen Eintrags //! \param txt Der Text des Eintrags DLLEXPORT void addEintrag( int pos, const char *txt ); //! Fügt einen zeiger auf einen Eintrag an einer bestimmten Position hinzu //! \param pos Der Index des neuen Eintrags //! \param tf Das TextFeld, mit dem der Eintrag gezeichnet wird DLLEXPORT void addEintragZ( int pos, TextFeld *tf ); //! Ändert einen Eintrag //! \param pos Der Index des Eintrags //! \param txt Der neue Text des Eintrags DLLEXPORT void setEintrag( int pos, Text *txt ); //! Ändert einen Eintrag //! \param pos Der Index des Eintrags //! \param txt Der neue Text des Eintrags DLLEXPORT void setEintrag( int pos, unsigned char *txt ); //! Ändert den Zeiger eines Eintrags //! \param pos Der Index des Eintrags //! \param tf Der neue Eintrag DLLEXPORT void setEintragZ( int pos, TextFeld *tf ); //! Vertauscht die Positionen zweier Einträge //! \param vpos Der Index des ersten Eintrags //! \param npos Der Index des zweiten Eintrags DLLEXPORT void tauschEintragPos( int vpos, int npos ); //! Löscht einen Eintrag //! pos: Der Index des Eintrags DLLEXPORT void removeEintrag( int pos ); //! Setzt die verwendete Schrift //! \param schrift Die Schrift DLLEXPORT void setSchriftZ( Schrift *schrift ); //! Scrollt zu einem bestimmen Eintrag //! \param eintrag Der Index des Eintrags DLLEXPORT void setVScrollZuEintrag( int eintrag ); //! Aktualisiert die maximale Scroll Höhe indem die Höhe aller Einträge addiert wird DLLEXPORT void updateVScroll(); //! Setzt den Zeiger auf den Rahmen, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param rahmen Der Rahmen DLLEXPORT void setALRZ( Rahmen *rahmen ); //! Setzt die Breite des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param br Die Breite in Pixeln DLLEXPORT void setALRBreite( int br ); //! Setzt die Farbe des Rahmens, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setALRFarbe( int fc ); //! Setzt den Zeiger auf den Farbübergnag, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param buffer Der Farbübergang DLLEXPORT void setAAFZ( AlphaFeld *buffer ); //! Setzt die Stärke des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param st Die Stärke DLLEXPORT void setAAFStrength( int st ); //! Setzt die Farbe des Farbübergnags, der bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setAAFFarbe( int fc ); //! Setzt das Hintergrund Bild durch kopieren, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param bild Das Bild, das kopiert werden soll DLLEXPORT void setAHBild( Bild *bild ); //! Setzt einen Zeiger auf das Hintergrund Bild, das bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param bild Das Bild, das kopiert werden soll DLLEXPORT void setAHBildZ( Bild *bild ); //! Setzt die Hintergrund Farbe, die bei ausgewählten Einträgen verwendet wird, fals MulitStyled nicht gesetzt wurde //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setAHFarbe( int fc ); //! Setzt den Zeiger auf den Rahmen, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param rahmen Der Rahmen DLLEXPORT void setALRZ( int pos, Rahmen *rahmen ); //! Setzt die Breite des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param br Die Breite in Pixeln DLLEXPORT void setALRBreite( int pos, int br ); //! Setzt die Farbe des Rahmens, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setALRFarbe( int pos, int fc ); //! Setzt den Zeiger auf den Farbübergnag, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param buffer Der Farbübergang DLLEXPORT void setAAFZ( int pos, AlphaFeld *buffer ); //! Setzt die Stärke des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param st Die Stärke DLLEXPORT void setAAFStrength( int pos, int st ); //! Setzt die Farbe des Farbübergnags, der bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setAAFFarbe( int pos, int fc ); //! Setzt das Hintergrund Bild durch kopieren, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param bild Das Bild, das kopiert werden soll DLLEXPORT void setAHBild( int pos, Bild *bild ); //! Setzt einen Zeiger auf das Hintergrund Bild, das bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param bild Das Bild, das kopiert werden soll DLLEXPORT void setAHBildZ( int pos, Bild *bild ); //! Setzt die Hintergrund Farbe, die bei einem ausgewählten Eintrag verwendet wird, fals MulitStyled gesetzt wurde //! \param pos Der Index des Eintrags //! \param fc Die Farbe im A8R8G8B8 Format DLLEXPORT void setAHFarbe( int pos, int fc ); //! Setzt den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Der neue Style DLLEXPORT void setMsStyle( int pos, __int64 style ); //! Ändert den Style eines Eintrags, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Der Style //! add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll DLLEXPORT void setMsStyle( int pos, __int64 style, bool add_remove ); //! Fügt Styles zu einem Eintrag hinzu, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Der Style, der hinzugefügt werden soll DLLEXPORT void addMsStyle( int pos, __int64 style ); //! Entfernt Styles von einem Eintrag, falls MulitStyled gesetzt wurde und legt fest, ob ein Eintrag ausgewählt ist, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Der Style, der entfernt werden soll DLLEXPORT void removeMsStyle( int pos, __int64 style ); //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen //! \param te Das Ereignis 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 void render( Bild &zRObj ) override; //! Gibt den Index eines Eintrags zurück, auf den die Maus zeigt //! \param my Die Position der Maus auf der Y Achse basierend auf dem oberend Rand der Liste DLLEXPORT int getKlickEintrag( int my ); //! Wählt einen Eintrag aus //! \param ausw Der Index des Eintrags DLLEXPORT void setAuswahl( int ausw ); //! Wählt alle ausgewählten Einträge ab DLLEXPORT void deSelect(); //! Gibt die Anzahl an Einträgen zurück DLLEXPORT int getEintragAnzahl() const; //! Gibt den Index des ausgewählten Eintrags zurück, fals MultiSelect nicht gesetzt ist. Wenn MultiSelect gesetzt wurde, kann die Auswahl eines Eintrags mit hatMsStyle( Eintrag Index, AuswahlListe::Style::Ausgewählt ) geprüft werden DLLEXPORT int getAuswahl() const; //! Gibt den Index eines Eintrags zurück //! \param eintragText Der Text des Eintrags DLLEXPORT int getEintragPos( Text *eintragText ); //! Gibt einen Eintrag zurück //! \param pos Der Index des Eintrags DLLEXPORT TextFeld *getEintrag( int pos ) const; //! Gibt einen Eintrag ohne erhöhten reference Counter zurück //! \param pos Der Index des Eintrags DLLEXPORT TextFeld *zEintrag( int pos ) const; //! Gibt den Rahmen zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT Rahmen *getARahmen() const; //! Gibt den Rahmen ohne erhöhten Reference Counter zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT Rahmen *zARahmen() const; //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurück, die für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT int getAHFarbe() const; //! Gibt das Hintergrund Bild zurück, das für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT Bild *getAHBild() const; //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück, das für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT Bild *zAHBild() const; //! Gibt den Farbverlauf zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT AlphaFeld *getABuffer() const; //! Gibt den Farbverlauf ohne erhöhten Reference Counter zurück, der für ausgewählte Einträge verwendet wird, falls MultiStyled nicht gesetzt wurde DLLEXPORT AlphaFeld *zABuffer() const; //! Gibt den Rahmen zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT Rahmen *getARahmen( int pos ) const; //! Gibt den Rahmen ohne erhöhten Reference Counter zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT Rahmen *zARahmen( int pos ) const; //! Gibt die Hintegrrund Farbe im A8R8G8B8 Format zurück, die für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT int getAHFarbe( int pos ) const; //! Gibt das Hintergrund Bild zurück, das für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT Bild *getAHBild( int pos ) const; //! Gibt das Hintergrund Bild ohne erhöhten Reference Counter zurück, das für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT Bild *zAHBild( int pos ) const; //! Gibt den Farbübergang zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT AlphaFeld *getABuffer( int pos ) const; //! Gibt den Farbübergang ohne erhöhten Reference Counter zurück, der für einen ausgewählten Eintrag verwendet wird, falls MultiStyled gesetzt wurde DLLEXPORT AlphaFeld *zABuffer( int pos ) const; //! Überprüft, ob für einen Bestimmten Eintarg betimmte Styles gesetzt wurden, falls MultiStyled gesetzt wurde. Überprüft auch, ob ein Eintrag ausgewählt wurde, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Die zu prüfenden Styles DLLEXPORT inline bool hatMsStyle( int pos, __int64 style ) const; //! Überprüft, ob für einen Bestimmten Eintarg betimmte Styles nicht gesetzt wurden, falls MultiStyled gesetzt wurde. Überprüft auch, ob ein Eintrag nicht ausgewählt wurde, falls MultiSelect gesetzt wurde //! \param pos Der Index des Eintrags //! \param style Die zu prüfenden Styles DLLEXPORT inline bool hatMsStyleNicht( int pos, __int64 style ) const; }; } #endif