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

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

KontrollKnopf *initKontrollKnopf( int x, int y, int br, int h�, Schrift *zSchrift, int style, char *txt )
{
	KontrollKnopf *ret = new KontrollKnopf();
	ret->setStyle( style );
	if( zSchrift )
		ret->setSchriftZ( zSchrift->getThis() );
	if( txt )
	{
		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, int style, char *titel )
{
	Fenster *ret = new Fenster();
	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 ) )
	{
		if( titel )
			ret->setTitel( titel );
		if( zSchrift )
			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 );
		}
	}
	return ret;
}

TextFeld *initTextFeld( int x, int y, int br, int h�, Schrift *zSchrift, int style, char *txt )
{
	TextFeld *ret = new TextFeld();
	ret->setStyle( style );
	if( zSchrift )
		ret->setSchriftZ( zSchrift->getThis() );
	if( txt )
		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�, int 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, int 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, i->name ) );
		}
	}
	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 );
}