#ifndef KESSEditor_H
#define KESSEditor_H

#include <Knopf.h>
#include <Liste.h>
#include <Bild.h>
#include <DateiDialog.h>
#include <Fenster.h>
#include <AuswahlBox.h>

using namespace Framework;

class KEShopSeite;

class KESSTextSeite
{
private:
    TextFeld *text;
    Knopf *speichern;
    Knopf *dateiLöschen;
    Knopf *neueDatei;
    int aktion;
    bool sichtbar;
    unsigned char alpha;
    double tickVal;
    int ref;

public:
    // Konstruktor
    KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiLöschen );
    // Destruktor
    ~KESSTextSeite();
    // nicht constant
    int getAktion();
    void setDateiText( Text *txt );
    void setSichtbar( bool s );
    bool tick( double tv );
    void doMausEreignis( MausEreignis &me );
    void doTastaturEreignis( TastaturEreignis &te );
    void render( Bild &zRObj );
    // constant
    Text *zDateiText() const;
    // Reference Counting 
    KESSTextSeite *getThis();
    KESSTextSeite *release();
};

class KESSBildSeite
{
private:
    AuswahlListe *bilder;
    BildO *bildObj;
    Knopf *bildLöschen;
    Knopf *importieren;
    Knopf *dateiLöschen;
    Knopf *neueDatei;
    DateiDialogTh *importDialog;
    Text *importPfad;
    int aktion;
    bool sichtbar;
    unsigned char alpha;
    unsigned char alpha2;
    double tickVal;
    int ref;

public:
    // Konstruktor
    KESSBildSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDateiLöschen );
    // Destruktor
    ~KESSBildSeite();
    // nicht constant
    int getAktion();
    void setBildListe( RCArray< Text > *list );
    void setBild( Bild *b );
    void setSichtbar( bool s );
    bool tick( double tv );
    void doMausEreignis( MausEreignis &me );
    void render( Bild &zRObj );
    // constant
    Text *zBildImportPfad() const;
    Text *zBildAuswahl() const;
    // Reference Counting
    KESSBildSeite *getThis();
    KESSBildSeite *release();
};

class KESSEditor : public Zeichnung
{
private:
    AuswahlListe *dateien;
    KESSTextSeite *textSeite;
    KESSBildSeite *bildSeite;
    Knopf *vorschau;
    Knopf *veröffentlichen;
    Fenster *neuDateiF;
    AuswahlBox *neuDateiTyp;
    TextFeld *neuDateiName;
    Knopf *neuDateiOk;
    Knopf *neueDatei;
    Knopf *dateiLöschen;
    int aktion;
    bool sichtbar;
    unsigned char alpha;
    unsigned char alpha2;
    double tickVal;
    int ref;

public:
    // Konstruktor
    KESSEditor( Schrift *zSchrift );
    // Destruktor
    ~KESSEditor();
    // nicht constant
    int getAktion();
    bool neuDateiOkME( MausEreignis &me );
    void setDateiListe( RCArray< Text > *list );
    void setBildListe( RCArray< Text > *list );
    void setDateiText( Text *txt );
    void setBild( Bild *b );
    void setSichtbar( bool s );
    bool tick( double tv ) override;
    void doMausEreignis( MausEreignis &me ) override;
    void doTastaturEreignis( TastaturEreignis &te ) override;
    void render( Bild &zRObj ) override;
    // constant
    Text *zDateiText() const;
    Text *zBildImportPfad() const;
    Text *zDateiAuswahl() const;
    Text *zBildAuswahl() const;
    int getNeuDateiTyp() const;
    Text *zNeuDateiName() const;
    bool istSichtbar() const;
    // Reference Counting
    KESSEditor *getThis();
    KESSEditor *release();
};

#endif