#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 abwaehlen kann
    class AuswahlListe : public ZeichnungHintergrund
    {
    public:
        class Style : public ZeichnungHintergrund::Style
        {
        public:
            //! Legt fest, ob die Eintraege der Liste einen Rahmen haben
            static const __int64 FeldRahmen = 0x0001000;
            //! Legt fest, ob die Eintraege einen Hintergrund haben
            static const __int64 FeldHintergrund = 0x0002000;
            //! Legt fest, ob die Eintraege ein Hintergrund Bild haben
            static const __int64 FeldHBild = 0x0004000;
            //! Legt fest, ob beim zeichnen der Eintrag Hintergruende alpha
            //! blending verwendet werden soll
            static const __int64 FeldHAlpha = 0x0008000;
            //! Legt fest, ob die Eintraege einen Farbuebergang besitzen
            static const __int64 FeldBuffer = 0x0010000;
            //! Legt fest, ob die ausgewaehlten Eintraege einen Hintergrund haben
            static const __int64 AuswahlHintergrund = 0x0020000;
            //! Legt fest, ob die ausgewaehlten eintraege ein Bild als Hintergrund
            //! haben
            static const __int64 AuswahlHBild = 0x0040000;
            //! Legt fest, ob fuer das Zeichnen der Hintergruende der ausgewaehlten
            //! Eintraege alpha blending verwendet wird
            static const __int64 AuswahlHAlpha = 0x0080000;
            //! Legt fest, ob die ausgewaehlten Eintraege einen Farbuebergang
            //! besitzen
            static const __int64 AuswahlBuffer = 0x0100000;
            //! Legt fest, ob die ausgewaehlten Eintraege einen Rahmen besitzen
            static const __int64 AuswahlRahmen = 0x0200000;
            //! Legt fest, ob jeder Eintrag seine eigenen Hintergrund,
            //! Farbuebergang und Rahmen hat, fals er ausgewaehlt ist
            static const __int64 MultiStyled = 0x0400000;
            //! Legt fest, das mehrere Eintraege gleichzeitig ausgewaehlt sein
            //! koennen
            static const __int64 MultiSelect = 0x0800000;
            //! Legt fest, ob ein bestimmter Eintrag ausgewaehlt 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<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 ausgeloesst
        //! 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, groesse und Position der Eintraege
        DLLEXPORT void update();
        //! Fuegt einen Eintrag hinzu
        //! \param txt Der Text des Eintrags
        DLLEXPORT void addEintrag(Text* txt);
        //! Fuegt einen Eintrag hinzu
        //! \param txt Der Text des Eintrags
        DLLEXPORT void addEintrag(const char* txt);
        //! Fuegt einen zeiger auf einen Eintrag hinzu
        //! \param tf Das TextFeld, mit dem der Eintrag gezeichnet wird
        DLLEXPORT void addEintragZ(TextFeld* tf);
        //! Fuegt 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);
        //! Fuegt 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);
        //! Fuegt 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);
        //! AEndert einen Eintrag
        //! \param pos Der Index des Eintrags
        //! \param txt Der neue Text des Eintrags
        DLLEXPORT void setEintrag(int pos, Text* txt);
        //! AEndert einen Eintrag
        //! \param pos Der Index des Eintrags
        //! \param txt Der neue Text des Eintrags
        DLLEXPORT void setEintrag(int pos, const char* txt);
        //! AEndert 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 Eintraege
        //! \param vpos Der Index des ersten Eintrags
        //! \param npos Der Index des zweiten Eintrags
        DLLEXPORT void tauschEintragPos(int vpos, int npos);
        //! setzt die Position eines Eintags
        //! \param vpos Der Index des Eintrags
        //! \param npos Der Index den der Eintrag haben soll
        DLLEXPORT void setEintragPos(int vpos, int npos);
        //! Loescht 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 Hoehe indem die Hoehe aller Eintraege
        //! addiert wird
        DLLEXPORT void updateVScroll();
        //! Setzt den Zeiger auf den Rahmen, der bei ausgewaehlten Eintraegen
        //! verwendet wird, fals MulitStyled nicht gesetzt wurde \param rahmen
        //! Der Rahmen
        DLLEXPORT void setALRZ(Rahmen* rahmen);
        //! Setzt die Breite des Rahmens, der bei ausgewaehlten Eintraegen
        //! 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 ausgewaehlten Eintraegen
        //! verwendet wird, fals MulitStyled nicht gesetzt wurde \param fc Die
        //! Farbe im A8R8G8B8 Format
        DLLEXPORT void setALRFarbe(int fc);
        //! Setzt den Zeiger auf den Farbuebergnag, der bei ausgewaehlten
        //! Eintraegen verwendet wird, fals MulitStyled nicht gesetzt wurde
        //! \param buffer Der Farbuebergang
        DLLEXPORT void setAAFZ(AlphaFeld* buffer);
        //! Setzt die Staerke des Farbuebergnags, der bei ausgewaehlten Eintraegen
        //! verwendet wird, fals MulitStyled nicht gesetzt wurde \param st Die
        //! Staerke
        DLLEXPORT void setAAFStrength(int st);
        //! Setzt die Farbe des Farbuebergnags, der bei ausgewaehlten Eintraegen
        //! 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 ausgewaehlten
        //! Eintraegen 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 ausgewaehlten
        //! Eintraegen 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 ausgewaehlten Eintraegen
        //! 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 ausgewaehlten 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 ausgewaehlten 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 ausgewaehlten 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 Farbuebergnag, der bei einem ausgewaehlten
        //! Eintrag verwendet wird, fals MulitStyled gesetzt wurde \param pos
        //! Der Index des Eintrags \param buffer Der Farbuebergang
        DLLEXPORT void setAAFZ(int pos, AlphaFeld* buffer);
        //! Setzt die Staerke des Farbuebergnags, der bei einem ausgewaehlten
        //! Eintrag verwendet wird, fals MulitStyled gesetzt wurde \param pos
        //! Der Index des Eintrags \param st Die Staerke
        DLLEXPORT void setAAFStrength(int pos, int st);
        //! Setzt die Farbe des Farbuebergnags, der bei einem ausgewaehlten
        //! 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
        //! ausgewaehlten 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
        //! ausgewaehlten 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 ausgewaehlten 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 ausgewaehlt ist, falls MultiSelect gesetzt
        //! wurde \param pos Der Index des Eintrags \param style Der neue Style
        DLLEXPORT void setMsStyle(int pos, __int64 style);
        //! AEndert den Style eines Eintrags, falls MulitStyled gesetzt wurde und
        //! legt fest, ob ein Eintrag ausgewaehlt ist, falls MultiSelect gesetzt
        //! wurde \param pos Der Index des Eintrags \param style Der Style
        //!  add_remove: 1, falls der Style hinzugefuegt werden soll. 0, falls
        //!  der Style entfernt weden soll
        DLLEXPORT void setMsStyle(int pos, __int64 style, bool add_remove);
        //! Fuegt Styles zu einem Eintrag hinzu, falls MulitStyled gesetzt wurde
        //! und legt fest, ob ein Eintrag ausgewaehlt ist, falls MultiSelect
        //! gesetzt wurde \param pos Der Index des Eintrags \param style Der
        //! Style, der hinzugefuegt werden soll
        DLLEXPORT void addMsStyle(int pos, __int64 style);
        //! Entfernt Styles von einem Eintrag, falls MulitStyled gesetzt wurde
        //! und legt fest, ob ein Eintrag ausgewaehlt 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 zurueck, 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);
        //! Waehlt einen Eintrag aus
        //! \param ausw Der Index des Eintrags
        DLLEXPORT void setAuswahl(int ausw);
        //! Waehlt alle ausgewaehlten Eintraege ab
        DLLEXPORT void deSelect();
        //! Gibt die Anzahl an Eintraegen zurueck
        DLLEXPORT int getEintragAnzahl() const;
        //! Gibt den Index des ausgewaehlten Eintrags zurueck, fals MultiSelect
        //! nicht gesetzt ist. Wenn MultiSelect gesetzt wurde, kann die Auswahl
        //! eines Eintrags mit hatMsStyle( Eintrag Index,
        //! AuswahlListe::Style::Ausgewaehlt ) geprueft werden
        DLLEXPORT int getAuswahl() const;
        //! Gibt den Index eines Eintrags zurueck
        //! \param eintragText Der Text des Eintrags
        DLLEXPORT int getEintragPos(Text* eintragText);
        //! Gibt einen Eintrag zurueck
        //! \param pos Der Index des Eintrags
        DLLEXPORT TextFeld* getEintrag(int pos) const;
        //! Gibt einen Eintrag ohne erhoehten reference Counter zurueck
        //! \param pos Der Index des Eintrags
        DLLEXPORT TextFeld* zEintrag(int pos) const;
        //! Gibt den Rahmen zurueck, der fuer ausgewaehlte Eintraege verwendet wird,
        //! falls MultiStyled nicht gesetzt wurde
        DLLEXPORT Rahmen* getARahmen() const;
        //! Gibt den Rahmen ohne erhoehten Reference Counter zurueck, der fuer
        //! ausgewaehlte Eintraege verwendet wird, falls MultiStyled nicht gesetzt
        //! wurde
        DLLEXPORT Rahmen* zARahmen() const;
        //! Gibt die Hintergrund Farbe im A8R8G8B8 Format zurueck, die fuer
        //! ausgewaehlte Eintraege verwendet wird, falls MultiStyled nicht gesetzt
        //! wurde
        DLLEXPORT int getAHFarbe() const;
        //! Gibt das Hintergrund Bild zurueck, das fuer ausgewaehlte Eintraege
        //! verwendet wird, falls MultiStyled nicht gesetzt wurde
        DLLEXPORT Bild* getAHBild() const;
        //! Gibt das Hintergrund Bild ohne erhoehten Reference Counter zurueck,
        //! das fuer ausgewaehlte Eintraege verwendet wird, falls MultiStyled nicht
        //! gesetzt wurde
        DLLEXPORT Bild* zAHBild() const;
        //! Gibt den Farbverlauf zurueck, der fuer ausgewaehlte Eintraege verwendet
        //! wird, falls MultiStyled nicht gesetzt wurde
        DLLEXPORT AlphaFeld* getABuffer() const;
        //! Gibt den Farbverlauf ohne erhoehten Reference Counter zurueck, der fuer
        //! ausgewaehlte Eintraege verwendet wird, falls MultiStyled nicht gesetzt
        //! wurde
        DLLEXPORT AlphaFeld* zABuffer() const;
        //! Gibt den Rahmen zurueck, der fuer einen ausgewaehlten Eintrag verwendet
        //! wird, falls MultiStyled gesetzt wurde
        DLLEXPORT Rahmen* getARahmen(int pos) const;
        //! Gibt den Rahmen ohne erhoehten Reference Counter zurueck, der fuer
        //! einen ausgewaehlten Eintrag verwendet wird, falls MultiStyled gesetzt
        //! wurde
        DLLEXPORT Rahmen* zARahmen(int pos) const;
        //! Gibt die Hintegrrund Farbe im A8R8G8B8 Format zurueck, die fuer einen
        //! ausgewaehlten Eintrag verwendet wird, falls MultiStyled gesetzt wurde
        DLLEXPORT int getAHFarbe(int pos) const;
        //! Gibt das Hintergrund Bild zurueck, das fuer einen ausgewaehlten Eintrag
        //! verwendet wird, falls MultiStyled gesetzt wurde
        DLLEXPORT Bild* getAHBild(int pos) const;
        //! Gibt das Hintergrund Bild ohne erhoehten Reference Counter zurueck,
        //! das fuer einen ausgewaehlten Eintrag verwendet wird, falls MultiStyled
        //! gesetzt wurde
        DLLEXPORT Bild* zAHBild(int pos) const;
        //! Gibt den Farbuebergang zurueck, der fuer einen ausgewaehlten Eintrag
        //! verwendet wird, falls MultiStyled gesetzt wurde
        DLLEXPORT AlphaFeld* getABuffer(int pos) const;
        //! Gibt den Farbuebergang ohne erhoehten Reference Counter zurueck, der
        //! fuer einen ausgewaehlten Eintrag verwendet wird, falls MultiStyled
        //! gesetzt wurde
        DLLEXPORT AlphaFeld* zABuffer(int pos) const;
        //! UEberprueft, ob fuer einen Bestimmten Eintarg betimmte Styles gesetzt
        //! wurden, falls MultiStyled gesetzt wurde. UEberprueft auch, ob ein
        //! Eintrag ausgewaehlt wurde, falls MultiSelect gesetzt wurde \param pos
        //! Der Index des Eintrags \param style Die zu pruefenden Styles
        DLLEXPORT inline bool hatMsStyle(int pos, __int64 style) const;
        //! UEberprueft, ob fuer einen Bestimmten Eintarg betimmte Styles nicht
        //! gesetzt wurden, falls MultiStyled gesetzt wurde. UEberprueft auch, ob
        //! ein Eintrag nicht ausgewaehlt wurde, falls MultiSelect gesetzt wurde
        //! \param pos Der Index des Eintrags
        //! \param style Die zu pruefenden 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<Zeichnung> list;

    protected:
        //! Verarbeitet Tastatur Nachrichten
        //! \param me Das Ereignis, was durch die Tastatureingabe ausgeloesst
        //! wurde
        DLLEXPORT void doMausEreignis(MausEreignis& me, bool userRet) override;

    public:
        //! Konstruktor
        DLLEXPORT ZListe();
        //! Destruktor
        DLLEXPORT virtual ~ZListe();
        //! Fuegt einen Eintrag hinzu
        //! \param entry Die Zeichnung die hinzugefuegt werden soll
        DLLEXPORT void addEintrag(Zeichnung* entry);
        //! AEndert einen Eintrag
        //! \param pos Der Index des Eintrags
        //! \param entry Die neue Zeichnung
        DLLEXPORT void setEintrag(int pos, Zeichnung* entry);
        //! Vertauscht die Positionen zweier Eintraege
        //! \param vpos Der Index des ersten Eintrags
        //! \param npos Der Index des zweiten Eintrags
        DLLEXPORT void tauschEintragPos(int vpos, int npos);
        //! setzt die Position eines Eintags
        //! \param vpos Der Index des Eintrags
        //! \param npos Der Index den der Eintrag haben soll
        DLLEXPORT void setEintragPos(int vpos, int npos);
        //! Loescht 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 Hoehe indem die Hoehe aller Eintraege
        //! 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 veraendert 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 zurueck, 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 Eintraegen zurueck
        DLLEXPORT int getEintragAnzahl() const;
        //! Gibt den Index eines Eintrags zurueck
        //! \param zEntry Die Zeichnung
        DLLEXPORT int getEintragPos(Zeichnung* zEntry);
        //! Gibt einen Eintrag zurueck
        //! \param pos Der Index des Eintrags
        DLLEXPORT Zeichnung* getEintrag(int pos) const;
        //! Gibt einen Eintrag ohne erhoehten reference Counter zurueck
        //! \param pos Der Index des Eintrags
        DLLEXPORT Zeichnung* zEintrag(int pos) const;
        //! Gibt die benoetigte Hoehe zurueck
        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