123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- #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 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;
- 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:
- const static __int64 EntrySeperator = 0x0001000; // draws a seperation line between the entries
- const static __int64 Normal = Sichtbar | Erlaubt | Rahmen | Hintergrund | EntrySeperator; //! Vereint die Flags Sichtbar, Erlaubt, Rahmen, Hintergrund
- };
- private:
- int entrySeperatorSize;
- int entrySeperatorColor;
- RCArray< Zeichnung > 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;
- };
- }
- #endif
|