#include "Beenden.h"
#include <TextFeld.h>
#include <Schrift.h>
#include <Punkt.h>

// Inhalt der Beenden Klasse aus Beenden.h
// Konstruktor
Beenden::Beenden( Schrift *s, Bildschirm *b )
: Abschnitt( b )
{
	f = new Fenster();
	f->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Titel | Fenster::Style::Rahmen | Fenster::Style::TitelBuffered );
	f->setRFarbe( 0xFFFFFFFF );
	f->setRBreite( 1 );
	f->setTitel( "Beenden" );
	f->setTAfFarbe( 0x1000FF00 );
	f->setTAfStrength( -15 );
	f->setTRBreite( 1 );
	f->setTRFarbe( 0xFFFFFFFF );
	f->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
	f->zTTextFeld()->setSize( 0, 20 );
	f->setTSchriftZ( s->getThis() );
	f->setTSFarbe( 0xFFFFFFFF );
	f->setSize( 300, 150 );

	text = new TextFeld();
	text->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig );
	text->setText( "Möchtest du das SMP wirklich beenden?" );
	text->setPosition( 10, 10 );
	text->setSize( 280, 70 );
	text->setSchriftZ( s->getThis() );
	text->setSchriftSize( 12 );
	text->setSchriftFarbe( 0xFFFFFFFF );
	f->addMember( text );

	beenden = new Knopf( );
	beenden->setStyle( Knopf::Style::Normal );
	beenden->setText( "Beenden" );
	beenden->setSchriftZ( s->getThis() );
	beenden->setSize( 100, 20 );
	beenden->setPosition( 190, 100 );
	beenden->setMausEreignisParameter( this );
	beenden->setMausEreignis( beendenBeendenMausEreignis );
	f->addMember( beenden );

	fenster = 0;
	ref = 1;
	s->release();
}

// Destruktor
Beenden::~Beenden()
{
	f->release();
	text->release();
	beenden->release();
	if( fenster )
		fenster->release();
}

// nicht constant
void Beenden::setFenster( Fenster *f )
{
	if( fenster )
		fenster->release();
	this->f->setPosition( f->getBreite() / 2 - 150, f->getHeight() / 2 - 75 );
	fenster = f;
}

void Beenden::setSichtbar( bool s )
{
	sichtbar = s;
	if( !fenster )
		return;
	if( s )
		fenster->addMember( f );
	else
		fenster->removeMember( f );
}

bool Beenden::beendenMausEreignis( void *obj, MausEreignis me )
{
	if( me.id == ME_RLinks )
		PostQuitMessage( 0 );
	return 1;
}

// constant

// Reference Counting
Abschnitt *Beenden::getThis()
{
	ref++;
	return this;
}

Abschnitt *Beenden::release()
{
	ref--;
	if( !ref )
		delete this;
	return 0;
}

// Ereignisse
bool beendenBeendenMausEreignis( void *p, void *obj, MausEreignis me )
{
	if( !p )
		return 0;
	return ( (Beenden*)p )->beendenMausEreignis( obj, me );
}