#include "UIInitialization.h"
#include "AuswahlBox.h"
#include "Bild.h"
#include "Fortschritt.h"
#include "Kamera2D.h"
#include "Fenster.h"
#include "Knopf.h"
#include "Diagramm.h"
#include "Model2D.h"
#include "Animation.h"
#include "Tabelle.h"
#include "UIMLView.h"
#include "Schrift.h"
#include "Liste.h"
#include "M2DVorschau.h"
#include "DateiSystem.h"
\
using namespace Framework;

AuswahlBox *createAuswahlBox( UIInitParam &p )
{
    AuswahlBox *ret = new AuswahlBox();
    ret->setStyle( AuswahlBox::Style::Normal );
    ret->setHintergrundFarbe( 0xFF000000 );
    ret->setMausEreignis( _ret1ME );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    ret->setMaxAuskappHeight( 100 );
    ret->setMausRahmenBreite( 1 );
    ret->setMausRahmenFarbe( 0xFF005500 );
    ret->setMausAlphaFeldFarbe( 0x00008700 );
    ret->setMausAlphaFeldStrength( -8 );
    ret->setAuswRahmenBreite( 1 );
    ret->setAuswRahmenFarbe( 0xFF00FF00 );
    ret->setAuswAlphaFeldFarbe( 0x0000FF00 );
    ret->setAuswAlphaFeldStrength( -8 );
    return ret;
}

AuswahlListe *createAuswahlListe( UIInitParam &p )
{
    AuswahlListe *ret = new AuswahlListe();
    ret->setStyle( AuswahlListe::Style::Normal );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setAlphaFeldFarbe( 0x5500FF00 );
    ret->setAlphaFeldStrength( -5 );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    ret->setHintergrundFarbe( 0xFF000000 );
    ret->setMausEreignis( _ret1ME );
    ret->setALRBreite( 1 );
    ret->setALRFarbe( 0xFF00FF00 );
    ret->setAAFFarbe( 0x0000FF00 );
    ret->setAAFStrength( -8 );
    ret->update();
    return ret;
}

BildZ *createBildZ( UIInitParam &p )
{
    BildZ *ret = new BildZ();
    ret->setStyle( BildZ::Style::normal );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    return ret;
}

FBalken *createFBalken( UIInitParam &p )
{
    FBalken *ret = new FBalken();
    ret->setStyle( FBalken::Style::normal );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setSFarbe( 0xFFFFFFFF );
    ret->setSSize( 12 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    ret->setRahmenBreite( 1 );
#ifdef WIN32
    LTDBDatei *datei = new LTDBDatei();
    datei->setDatei( new Text( "data/bilder/system.ltdb" ) ); // TODO integrate this into the dll
    datei->leseDaten( 0 );
    Bild *fbhb = datei->laden( 0, new Text( "fortschrittleh" ) );
    ret->setHintergrundBildZ( fbhb );
    Bild *fbfhb = datei->laden( 0, new Text( "fortschrittvol" ) );
    datei->release();
    ret->setFBgBildZ( fbfhb );
#endif
    ret->setFBgFarbe( 0xFF00FF00 );
    return ret;
}

Kamera2D *createKamera2D( UIInitParam &p )
{
    Kamera2D *ret = new Kamera2D();
    // TODO
    return ret;
}

Fenster *createFenster( UIInitParam &p )
{
    Fenster *ret = new Fenster();
    ret->setMausEreignis( _ret1ME );
    ret->setTastaturEreignis( _ret1TE );
    ret->setStyle( Fenster::Style::normal );
    ret->setRBreite( 1 );
    ret->setRFarbe( 0xFFFFFFFF );
    ret->setTitel( "" );
    if( p.schrift )
        ret->setTSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setTSFarbe( 0xFFFFFFFF );
    ret->zTTextFeld()->setSize( 0, 20 );
    ret->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
    ret->setTRFarbe( 0xFF00FF00 );
    ret->setTRBreite( 1 );
    ret->setTAfFarbe( 0x1000FF00 );
    ret->setTAfStrength( -15 );
    ret->setSKAfFarbe( 0xFF00FF00 );
    ret->setSKAfStrength( 30 );
    return ret;
}

Knopf *createKnopf( UIInitParam &p )
{
    Knopf *ret = new Knopf();
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setStyle( Knopf::Style::Normal );
    return ret;
}

KontrollKnopf *createKontrollKnopf( UIInitParam &p )
{
    KontrollKnopf *ret = new KontrollKnopf();
    ret->setMausEreignis( _ret1ME );
    ret->setStyle( KontrollKnopf::Style::Normal );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setSFarbe( 0xFFFFFFFF );
    ret->setSSize( 12 );
    ret->setAlphaFeldFarbe( 0x5500FF00 );
    ret->setAlphaFeldStrength( -5 );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFF00FF00 );
#ifdef WIN32
    ret->loadData( "data/bilder/system.ltdb" ); // TODO integrate this into the dll
#endif
    return ret;
}

LDiag *createLDiag( UIInitParam &p )
{
    LDiag *ret = new LDiag();
    ret->setStyle( LDiag::Style::normal );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    ret->setDatenRahmenBreite( 1 );
    ret->setDatenRahmenFarbe( 0xFFFFFFFF );
    ret->setHintergrundFarbe( 0xFF000000 );
    ret->setDatenHintergrundFarbe( 0xFF000000 );
    return ret;
}

M2DVorschau *createM2DVorschau( UIInitParam &p )
{
    M2DVorschau *ret = new M2DVorschau();
    // TODO
    return ret;
}

Model2D *createModel2D( UIInitParam &p )
{
    Model2D *ret = new Model2D();
    // TODO
    return ret;
}

Animation2D *createAnimation2D( UIInitParam &p )
{
    Animation2D *ret = new Animation2D();
    // TODO
    return ret;
}

TextFeld *createTextFeld( UIInitParam &p )
{
    TextFeld *ret = new TextFeld();
    ret->setStyle( TextFeld::Style::Text );
    if( p.schrift )
        ret->setSchriftZ( dynamic_cast<Schrift *>( p.schrift->getThis() ) );
    ret->setSchriftFarbe( 0xFFFFFFFF );
    ret->setSchriftSize( 12 );
    ret->setAlphaFeldFarbe( 0x5500FF00 );
    ret->setAlphaFeldStrength( -5 );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFF00FF00 );
    return ret;
}

ObjTabelle *createObjTabelle( UIInitParam &p )
{
    ObjTabelle *ret = new ObjTabelle();
    ret->setStyle( ObjTabelle::Style::normal );
    ret->setMausEreignis( _ret1ME );
    ret->setRahmenBreite( 1 );
    ret->setRahmenFarbe( 0xFFFFFFFF );
    ret->setRasterBreite( 1 );
    ret->setRasterFarbe( 0xFFFFFFFF );
    ret->setVertikalKlickScroll( 5 );
    ret->setHorizontalKlickScroll( 5 );
    return ret;
}

SLDiag *createSLDiag( UIInitParam &p )
{
    SLDiag *ret = new SLDiag();
    // TODO
    return ret;
}

UIMLView *createUIMLView( UIInitParam &p )
{
    UIMLView *ret = new UIMLView();
    // TODO
    return ret;
}

UIInit Framework::defaultUI( Schrift *zSchrift, Bildschirm *zScreen )
{
    UIInit uii;
    uii.initParam.schrift = zSchrift;
    uii.initParam.bildschirm = zScreen;
    uii.initParam.data = 0;
    uii.createAuswahlBox = createAuswahlBox;
    uii.createAuswahlListe = createAuswahlListe;
    uii.createBildZ = createBildZ;
    uii.createFBalken = createFBalken;
    uii.createKamera2D = createKamera2D;
    uii.createFenster = createFenster;
    uii.createKnopf = createKnopf;
    uii.createKontrollKnopf = createKontrollKnopf;
    uii.createLDiag = createLDiag;
    uii.createM2DVorschau = createM2DVorschau;
    uii.createModel2D = createModel2D;
    uii.createAnimation2D = createAnimation2D;
    uii.createTextFeld = createTextFeld;
    uii.createObjTabelle = createObjTabelle;
    uii.createSLDiag = createSLDiag;
    uii.createUIMLView = createUIMLView;
    return uii;
}