#include "VideoChat.h"
#include <Rahmen.h>
#include <MausEreignis.h>
#include <TastaturEreignis.h>
#include <Text.h>
#include <Schrift.h>
#include <Punkt.h>
#include <Bild.h>

// Inhalt der VideoChat Klasse aus VideoChat.h
// Konstruktor
VideoChat::VideoChat( Schrift *zSchrift )
{
	verlauf = new TextFeld();
	verlauf->setStyle( TextFeld::Style::TextGebiet & ~TextFeld::Style::Erlaubt );
	verlauf->setLinienRahmenFarbe( 0xFF909090 );
	verlauf->setLinienRahmenBreite( 1 );
	verlauf->setText( "" );
	verlauf->setSchriftFarbe( 0xFFFFFFFF );
	verlauf->setSchriftSize( 12 );
	verlauf->setPosition( 20, BildschirmGr��e().y - 210 );
	verlauf->setSize( 450, 200 );
	verlauf->setSchriftZ( zSchrift->getThis() );
	ref = 1;
}

// Destruktor
VideoChat::~VideoChat()
{
	verlauf->release();
}

// nicht constant
void VideoChat::addNachricht( char *nachricht )
{
	verlauf->addZeile( nachricht );
	verlauf->updateVScroll();
}

void VideoChat::addNachricht( char *nachricht, int farbe )
{
	verlauf->zText()->appendColor( farbe );
	verlauf->addZeile( nachricht );
	verlauf->zText()->appendColor( 0xFFFFFFFF );
	verlauf->updateVScroll();
}

void VideoChat::removeNachricht( char *nachricht )
{
	Text *txt = new Text( nachricht );
	txt->append( "\n" );
	Schrift *schrift = verlauf->zSchrift();
	if( schrift )
	{
		schrift->lock();
		schrift->textFormatieren( txt, verlauf->getBreite() - 15 - 2, 12 );
		schrift->unlock();
	}
	int n = txt->anzahlVon( '\n' );
	int n2 = verlauf->zText()->anzahlVon( '\n' );
	if( n2 > n )
		verlauf->zText()->remove( verlauf->zText()->positionVon( '\n', n2 - n - 1 ) + 1 );
	else
		verlauf->setText( "" );
	verlauf->updateVScroll();
}

void VideoChat::doMausEreignis( MausEreignis &me )
{
	bool vera = me.verarbeitet;
	verlauf->doMausEreignis( me );
	if( !vera && me.verarbeitet )
	{
		verlauf->setLinienRahmenFarbe( 0xFFFFFFFF );
		verlauf->setVertikalScrollFarbe( 0xFF808080, 0 );
	}
	else
	{
		verlauf->setLinienRahmenFarbe( 0xFF909090 );
		verlauf->setVertikalScrollFarbe( 0xFF404040, 0 );
	}
}

void VideoChat::tick( double z )
{
	verlauf->tick( z );
}

void VideoChat::render( Bild &zRObj )
{
	verlauf->render( zRObj );
}

// constant

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

VideoChat *VideoChat::relese()
{
	ref--;
	if( !ref )
		delete this;
	return 0;
}