#include "Initialisierung.h"
#include <Schrift.h>
#include <Textfeld.h>
#include <MausEreignis.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->setLinienRahmenBreite( 1 );
		ret->setLinienRahmenFarbe( 0xFF00FF00 );
	}
	ret->setPosition( x, y );
	ret->setSize( br, h� );
	ret->loadData( "data/bilder/system.ltdb" );
	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->setLinienRahmenBreite( 1 );
		ret->setLinienRahmenFarbe( 0xFF00FF00 );
	}
	ret->setPosition( x, y );
	ret->setSize( br, h� );
	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->setLinienRahmenBreite( 1 );
		ret->setLinienRahmenFarbe( 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->setLinienRahmenBreite( 1 );
		ret->setLinienRahmenFarbe( 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->setLinienRahmenBreite( 1 );
		ret->setLinienRahmenFarbe( 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;
}