#ifndef Liste_H #define Liste_H #include "Array.h" #include "Zeichnung.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: // Legt fest, ob die Einträge der Liste einen Rahmen haben static const __int64 FeldRahmen = 0x0001000; // Legt fest, ob die Einträge einen Hintergrund haben static const __int64 FeldHintergrund = 0x0002000; // Legt fest, ob die Einträge ein Hintergrund Bild haben static const __int64 FeldHBild = 0x0004000; // Legt fest, ob beim zeichnen der Eintrag Hintergründe alpha // blending verwendet werden soll static const __int64 FeldHAlpha = 0x0008000; // Legt fest, ob die Einträge einen Farbübergang besitzen static const __int64 FeldBuffer = 0x0010000; // Legt fest, ob die ausgewählten Einträge einen Hintergrund haben static const __int64 AuswahlHintergrund = 0x0020000; // Legt fest, ob die ausgewählten einträge ein Bild als Hintergrund // haben static const __int64 AuswahlHBild = 0x0040000; // Legt fest, ob für das Zeichnen der Hintergründe der ausgewählten // Einträge alpha blending verwendet wird static const __int64 AuswahlHAlpha = 0x0080000; // Legt fest, ob die ausgewählten Einträge einen Farbübergang // besitzen static const __int64 AuswahlBuffer = 0x0100000; // Legt fest, ob die ausgewählten Einträge einen Rahmen besitzen static const __int64 AuswahlRahmen = 0x0200000; // Legt fest, ob jeder Eintrag seine eigenen Hintergrund, // Farbübergang und Rahmen hat, fals er ausgewählt ist static const __int64 MultiStyled = 0x0400000; // Legt fest, das mehrere Einträge gleichzeitig ausgewählt sein // können static const __int64 MultiSelect = 0x0800000; // Legt fest, ob ein bestimmter Eintrag ausgewählt ist, falls // MultiSelect gesetzt wurde. static const __int64 Selected = 0x1000000; // Vereint die Flags Sichtbar, Erlaubt, Rahmen, FeldHAlpha, // FeldHintergrund, FeldRahmen, AuswahlBuffer, AuswahlRahmen static const __int64 Normal = Sichtbar | Erlaubt | Rahmen | FeldHAlpha | FeldHintergrund | FeldRahmen | AuswahlBuffer | AuswahlRahmen; }; private: RCArray* tfListe; int auswahl; int ahFarbe; Bild* ahBild; AlphaFeld* aBuffer; Rahmen* aRahmen; Array<__int64>* styles; Array* ahFarbeListe; RCArray* ahBildListe; RCArray* aBufferListe; RCArray* 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; DLLEXPORT bool hatStyle(int styleSet, int styleCheck) const; 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, const 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; }; class ZListe : public ZeichnungHintergrund { public: class Style : public ZeichnungHintergrund::Style { public: // draws a seperation line between the entries static const __int64 EntrySeperator = 0x0001000; //! Vereint die Flags Sichtbar, Erlaubt, //! Rahmen, Hintergrund static const __int64 Normal = Sichtbar | Erlaubt | Rahmen | Hintergrund | EntrySeperator; }; private: int entrySeperatorSize; int entrySeperatorColor; RCArray list; protected: //! 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 ZListe(); //! Destruktor DLLEXPORT virtual ~ZListe(); //! Fügt einen Eintrag hinzu //! \param entry Die Zeichnung die hinzugefügt werden soll DLLEXPORT void addEintrag(Zeichnung* entry); //! Ändert einen Eintrag //! \param pos Der Index des Eintrags //! \param entry Die neue Zeichnung DLLEXPORT void setEintrag(int pos, Zeichnung* entry); //! 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); //! 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(); //! sets the size of the entry seperator DLLEXPORT void setEntrySeperatorSize(int size); //! sets the color of the entry seperator DLLEXPORT void setEntrySeperatorColor(int color); //! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch //! aufgerufen \param te Das Ereignis DLLEXPORT void doTastaturEreignis(TastaturEreignis& te) override; //! Aktualisiert die zeichnung //! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten //! Aufruf dieser Funktion verstrichen ist \return 1, wenn sich die //! Zeichnung seit dem letzten aufruf verändert hat DLLEXPORT bool tick(double tickVal) override; //! Zeichnet das Objekt nach zRObj, falls es sichtbar ist //! \param zRObj Das Bild, in welches gezeichnet werden soll DLLEXPORT void render(Bild& rObj) 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); //! Gibt die Anzahl an Einträgen zurück DLLEXPORT int getEintragAnzahl() const; //! Gibt den Index eines Eintrags zurück //! \param zEntry Die Zeichnung DLLEXPORT int getEintragPos(Zeichnung* zEntry); //! Gibt einen Eintrag zurück //! \param pos Der Index des Eintrags DLLEXPORT Zeichnung* getEintrag(int pos) const; //! Gibt einen Eintrag ohne erhöhten reference Counter zurück //! \param pos Der Index des Eintrags DLLEXPORT Zeichnung* zEintrag(int pos) const; //! Gibt die benötigte Höhe zurück DLLEXPORT int getNeededHeight() const; //! returns the size of the entry seperator DLLEXPORT int getEntrySeperatorSize() const; //! returns the color of the entry seperator DLLEXPORT int getEntrySeperatorColor() const; }; } // namespace Framework #endif