#include "Initialisierung.h"
#include <ToolTip.h>
#include <Bildschirm.h>
#include <MausEreignis.h>
#include <DateiSystem.h>
#include "Variablen.h"

Knopf *initKnopf( int x, int y, int br, int h�, Schrift *zSchrift, __int64 style, char *titel )
{
    Knopf *ret = new Knopf();
    ret->addStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( zSchrift )
        ret->setSchriftZ( zSchrift->getThis() );
    ret->setText( titel );
    return ret;
}

KontrollKnopf *initKontrollKnopf( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, char *txt )
{
    KontrollKnopf *ret = new KontrollKnopf();
    ret->setMausEreignis( _ret1ME );
    ret->setStyle( style );
    ret->setSchriftZ( zSchrift->getThis() );
    ret->setText( txt );
    ret->setSText( txt );
    ret->setSFarbe( 0xFFFFFFFF );
    ret->setSSize( 12 );
    if( ret->hatStyle( TextFeld::Style::Buffered ) )
    {
        ret->setAlphaFeldFarbe( 0x5500FF00 );
        ret->setAlphaFeldStrength( -5 );
    }
    if( ret->hatStyle( TextFeld::Style::Rahmen ) )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFF00FF00 );
    }
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    ret->loadData( "data/bilder/system.ltdb" );
    return ret;
}

Fenster *initFenster( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, char *titel )
{
    Fenster *ret = new Fenster();
    ret->setMausEreignis( _ret1ME );
    ret->setTastaturEreignis( _ret1TE );
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( ret->hatStyle( Fenster::Style::Rahmen ) )
    {
        ret->setRBreite( 1 );
        ret->setRFarbe( 0xFFFFFFFF );
    }
    if( ret->hatStyle( Fenster::Style::Titel ) )
    {
        ret->setTitel( titel );
        ret->setTSchriftZ( zSchrift->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 );
        if( ret->hatStyle( Fenster::Style::TitelBuffered ) )
        {
            ret->setTAfFarbe( 0x1000FF00 );
            ret->setTAfStrength( -15 );
        }
    }
    if( ret->hatStyle( Fenster::Style::Closable ) )
    {
        if( ret->hatStyle( Fenster::Style::ClosingKlickBuffer ) )
        {
            ret->setSKAfFarbe( 0xFF00FF00 );
            ret->setSKAfStrength( 30 );
        }
    }
    return ret;
}

TextFeld *initTextFeld( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, char *txt )
{
    TextFeld *ret = new TextFeld();
    ret->setStyle( style );
    ret->setSchriftZ( zSchrift->getThis() );
    ret->setText( txt );
    ret->setSchriftFarbe( 0xFFFFFFFF );
    ret->setSchriftSize( 12 );
    if( ret->hatStyle( TextFeld::Style::Buffered ) )
    {
        ret->setAlphaFeldFarbe( 0x5500FF00 );
        ret->setAlphaFeldStrength( -5 );
    }
    if( ret->hatStyle( TextFeld::Style::Rahmen ) )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFF00FF00 );
    }
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    return ret;
}

BildZ *initBildZ( int x, int y, int br, int h�, __int64 style, Bild * b )
{
    BildZ *ret = new BildZ();
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( b )
        ret->setBildZ( b );
    if( ( style | BildZ::Style::Rahmen ) == style )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFFFFFFFF );
    }
    return ret;
}

AuswahlBox *initAuswahlBox( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, std::initializer_list< char * > values )
{
    AuswahlBox *ret = new AuswahlBox();
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( ( style | AuswahlBox::Style::Hintergrund ) == style )
        ret->setHintergrundFarbe( 0xFF000000 );
    if( ( style | AuswahlBox::Style::Erlaubt ) == style )
        ret->setMausEreignis( _ret1ME );
    if( zSchrift )
        ret->setSchriftZ( zSchrift->getThis() );
    if( ( style | AuswahlBox::Style::Rahmen ) == style )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFFFFFFFF );
    }
    if( ( style | AuswahlBox::Style::MaxHeight ) == style )
        ret->setMaxAuskappHeight( 100 );
    if( ( style | AuswahlBox::Style::MausRahmen ) == style )
    {
        ret->setMausRahmenBreite( 1 );
        ret->setMausRahmenFarbe( 0xFF005500 );
    }
    if( ( style | AuswahlBox::Style::MausBuffer ) == style )
    {
        ret->setMausAlphaFeldFarbe( 0x00008700 );
        ret->setMausAlphaFeldStrength( -8 );
    }
    if( ( style | AuswahlBox::Style::AuswahlRahmen ) == style )
    {
        ret->setAuswRahmenBreite( 1 );
        ret->setAuswRahmenFarbe( 0xFF00FF00 );
    }
    if( ( style | AuswahlBox::Style::AuswahlBuffer ) == style )
    {
        ret->setAuswAlphaFeldFarbe( 0x0000FF00 );
        ret->setAuswAlphaFeldStrength( -8 );
    }
    for( auto i = values.begin(); i != values.end(); i++ )
        ret->addEintrag( *i );
    return ret;
}

ObjTabelle *initObjTabelle( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, std::initializer_list< OBJTabelleSpalteIni > spalten, int �berschriftH�he )
{
    ObjTabelle *ret = new ObjTabelle();
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( ( style | ObjTabelle::Style::Erlaubt ) == style )
        ret->setMausEreignis( _ret1ME );
    if( ( style | ObjTabelle::Style::Rahmen ) == style )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFFFFFFFF );
    }
    if( ( style | ObjTabelle::Style::Raster ) == style )
    {
        ret->setRasterBreite( 1 );
        ret->setRasterFarbe( 0xFFFFFFFF );
    }
    if( ( style | ObjTabelle::Style::VScroll ) == style )
        ret->setVertikalKlickScroll( 5 );
    if( ( style | ObjTabelle::Style::HScroll ) == style )
        ret->setHorizontalKlickScroll( 5 );
    for( auto i = spalten.begin(); i != spalten.end(); i++ )
    {
        ret->addSpalte( i->name );
        ret->setSpaltenBreite( i->name, i->breite );
        if( ( style | ObjTabelle::Style::SpaltenBreiteMin ) == style )
            ret->setMinSpaltenBreite( i->name, i->minBreite );
        if( ( style | ObjTabelle::Style::SpaltenBreiteMax ) == style )
            ret->setMaxSpaltenBreite( i->name, i->maxBreite );
        if( �berschriftH�he )
        {
            if( ret->getZeilenNummer( "�berschrift" ) < 0 )
            {
                ret->addZeile( 0, "�berschrift" );
                ret->setZeilenHeight( 0, 20 );
            }
            ret->setZeichnungZ( i->name, "�berschrift", initTextFeld( 0, 0, i->breite, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::Center, i->name ) );
        }
    }
    return ret;
}

LDiag *initLinienDiagramm( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, DiagDaten * data )
{
    LDiag *ret = new LDiag();
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( zSchrift )
    {
        ret->setSchriftZ( zSchrift->getThis() );
        ret->setSchriftSize( 12 );
    }
    if( data )
        ret->setDiagDatenZ( data );
    if( ret->hatStyle( LDiag::Style::Rahmen ) )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFFFFFFFF );
    }
    if( ret->hatStyle( LDiag::Style::DatenRahmen ) )
    {
        ret->setDatenRahmenBreite( 1 );
        ret->setDatenRahmenFarbe( 0xFFFFFFFF );
    }
    if( ret->hatStyle( LDiag::Style::Hintergrund ) )
        ret->setHintergrundFarbe( 0xFF000000 );
    if( ret->hatStyle( LDiag::Style::DatenHintergrund ) )
        ret->setHintergrundFarbe( 0xFF000000 );
    return ret;
}

FBalken * initFBalken( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style )
{
    FBalken *ret = new FBalken();
    ret->setStyle( style );
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    if( zSchrift )
    {
        ret->setSchriftZ( zSchrift->getThis() );
        ret->setSFarbe( 0xFFFFFFFF );
        ret->setSSize( 12 );
    }
    if( ret->hatStyle( FBalken::Style::Rahmen ) )
    {
        ret->setRahmenFarbe( 0xFFFFFFFF );
        ret->setRahmenBreite( 1 );
    }
    if( ret->hatStyle( FBalken::Style::HBild ) )
    {
        Bild *fbhb = bilder->get( "data/bilder/system.ltdb/fortschrittleh" );
        ret->setHintergrundBildZ( fbhb );
    }
    if( ret->hatStyle( FBalken::Style::FBild ) )
    {
        Bild *fbfhb = bilder->get( "data/bilder/system.ltdb/fortschrittvol" );
        ret->setFBgBildZ( fbfhb );
    }
    else if( ret->hatStyle( FBalken::Style::FFarbe ) )
        ret->setFBgFarbe( 0xFF00FF00 );
    return ret;
}

AuswahlListe *initAuswahlListe( int x, int y, int br, int h�, Schrift * zSchrift, __int64 style, std::initializer_list< char * > values )
{
    AuswahlListe *ret = new AuswahlListe();
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    ret->setStyle( style );
    ret->setSchriftZ( zSchrift->getThis() );
    if( ret->hatStyle( AuswahlListe::Style::Buffered ) )
    {
        ret->setAlphaFeldFarbe( 0x5500FF00 );
        ret->setAlphaFeldStrength( -5 );
    }
    if( ret->hatStyle( AuswahlListe::Style::Rahmen ) )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFFFFFFFF );
    }
    if( ( style | AuswahlListe::Style::Hintergrund ) == style )
        ret->setHintergrundFarbe( 0xFF000000 );
    if( ( style | AuswahlListe::Style::Erlaubt ) == style )
        ret->setMausEreignis( _ret1ME );
    if( ( style | AuswahlListe::Style::AuswahlRahmen ) == style )
    {
        ret->setALRBreite( 1 );
        ret->setALRFarbe( 0xFF00FF00 );
    }
    if( ( style | AuswahlListe::Style::AuswahlBuffer ) == style )
    {
        ret->setAAFFarbe( 0x0000FF00 );
        ret->setAAFStrength( -8 );
    }
    for( auto i = values.begin(); i != values.end(); i++ )
        ret->addEintrag( *i );
    ret->update();
    return ret;
}

ZeichnungHintergrund *initZeichnungHintergrund( int x, int y, int br, int h�, __int64 style, int farbe )
{
    ZeichnungHintergrund *ret = new ZeichnungHintergrund();
    ret->setStyle( style );
    ret->setHintergrundFarbe( farbe );
    if( ret->hatStyle( ZeichnungHintergrund::Style::Rahmen ) )
    {
        ret->setRahmenBreite( 1 );
        ret->setRahmenFarbe( 0xFF00FF00 );
    }
    ret->setPosition( x, y );
    ret->setSize( br, h� );
    return ret;
}

void initToolTip( Zeichnung * obj, const char *txt, Schrift * zSchrift, Bildschirm * zBs )
{
    obj->setToolTipText( txt, zBs, zSchrift );
    obj->zToolTip()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha | TextFeld::Style::Mehrzeilig );
    obj->zToolTip()->setHintergrundFarbe( 0xA0000000 );
    obj->zToolTip()->setRahmenFarbe( 0xFFFFFFFF );
}