#include "KSGSAnimation2D.h"
#include "KSGSTyp.h"
#include "../Error/Error.h"
#include "../Main/KSGScriptObj.h"
#include "KSGSMausEreignis.h"
#include "KSGSInt.h"
#include "KSGSBool.h"
#include "KSGSAnimation2DData.h"
#include <ToolTip.h>
#include "KSGSText.h"

using namespace KSGScript;

// Inhalt der KSGSAnimation2DKlasse aus KSGSAnimaion2D
// Konstruktor
KSGSAnimation2DKlasse::KSGSAnimation2DKlasse( KSGScriptObj *zObj, Animation2D *std )
    : KSGSKlasseInstanz( KSGS_ANIMATION2D, 0, 0, zObj )
{
    val = std;
}

// Destruktor
KSGSAnimation2DKlasse::~KSGSAnimation2DKlasse()
{
    val->release();
}

// nicht constant
KSGSVariable *KSGSAnimation2DKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter )
{
    KSGSVariable *ret = 0;
    switch( id )
    {
    case 0: // void setRahmen( bool )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setRahmen( parameter->z( 0 ) ? parameter->z( 0 )->getBool() : 0 );
        break;
    case 1: // void setRahmenBreite( int )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setRahmenBreite( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
        break;
    case 2: // void setRahmenFarbe( int )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setRahmenFarbe( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
        break;
    case 3: // void setAnimationData( Animation2DData )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setAnimationDataZ( parameter->z( 0 ) ? parameter->z( 0 )->getAnimation2DData() : 0 );
        break;
    case 4: // void setAlphaMaske( int )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setAlphaMaske( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
        break;
    case 5: // void setAPS( int )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setAPS( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0 );
        break;
    case 6: // void setSichtbar( bool )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        val->setSichtbar( parameter->z( 0 ) ? parameter->z( 0 )->getBool() : 0 );
        break;
    case 7: // bool tick( double )
        if( parameter->getEintragAnzahl() < 1 )
            error( 20, {}, obj );
        ret = new KSGSBoolKlasse( obj, val->tick( parameter->z( 0 ) ? parameter->z( 0 )->getDouble() : 0 ) );
        break;
    case 8: // void render( int, int, Bild )
        if( 1 )
        {
            if( parameter->getEintragAnzahl() < 1 )
                error( 20, {}, obj );
            Bild *b = parameter->z( 0 ) ? parameter->z( 0 )->getBild() : 0;
            if( b )
            {
                val->render( *b );
                b->release();
            }
        }
        break;
    case 9: // Animation2DData getAnimationData()
        if( val->zAnimationData() )
            ret = new KSGSAnimation2DDataKlasse( obj, val->getAnimationData() );
        break;
    case 10: // bool istSichtbar()
        ret = new KSGSBoolKlasse( obj, val->istSichtbar() );
        break;
    case 11: // int getJetzt()
        ret = new KSGSIntKlasse( obj, val->getJetzt() );
        break;
    case 12: // int getAlphaMaske()
        ret = new KSGSIntKlasse( obj, val->getAlphaMaske() );
        break;
    case 13: // bool hatRahmen()
        ret = new KSGSBoolKlasse( obj, val->hatRahmen() );
        break;
    case 14: // int getRahmenBreite()
        ret = new KSGSIntKlasse( obj, val->getRahmenBreite() );
        break;
    case 15: // int getRahmenFarbe()
        ret = new KSGSIntKlasse( obj, val->getRahmenFarbe() );
        break;
    case 16: // void setToolTipText( Text )
        if( 1 )
        {
            if( parameter->getEintragAnzahl() < 1 )
                error( 20, {}, obj );
            Text *txt = parameter->z( 0 ) ? parameter->z( 0 )->getText() : 0;
            val->setToolTipText( txt ? *txt : 0, obj->zBildschirm() );
            if( txt )
                txt->release();
        }
        break;
    case 17: // void setPosition( int, int )
        if( parameter->getEintragAnzahl() < 2 )
            error( 20, {}, obj );
        val->setPosition( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
                          parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
        break;
    case 18: // void setGr��e( int, int )
        if( parameter->getEintragAnzahl() < 2 )
            error( 20, {}, obj );
        val->setSize( parameter->z( 0 ) ? parameter->z( 0 )->getInt() : 0,
                      parameter->z( 1 ) ? parameter->z( 1 )->getInt() : 0 );
        break;
    case 19: // int getBreite()
        ret = new KSGSIntKlasse( obj, val->getBreite() );
        break;
    case 20: // int getH�he()
        ret = new KSGSIntKlasse( obj, val->getHeight() );
        break;
    case 21: // int getX()
        ret = new KSGSIntKlasse( obj, val->getX() );
        break;
    case 22: // int getY()
        ret = new KSGSIntKlasse( obj, val->getY() );
        break;
    case 23: // Text getToolTipText()
        if( 1 )
        {
            Text *txt = val->zToolTip() ? val->zToolTip()->zText() : 0;
            ret = new KSGSTextKlasse( obj, txt ? *txt : "" );
        }
        break;
    default: // unbekannt
        error( 19, {}, obj );
        break;
    }
    parameter->release();
    return ret;
}

KSGSVariable *KSGSAnimation2DKlasse::doOperator( int id, KSGSVariable *rechts )
{
    if( !rechts )
    {
        error( 3, {}, obj );
        return 0;
    }
    KSGSVariable *ret = 0;
    switch( id )
    {
    case KSGS_O_SET:
        if( 1 )
        {
            val->release();
            val = rechts->getAnimation2D();
            ret = getThis();
        }
        break;
    }
    if( !ret )
        error( 21, {}, obj );
    if( rechts )
        rechts->release();
    return ret;
}

// constant
Animation2D *KSGSAnimation2DKlasse::getVal() const
{
    return (Animation2D*)val->getThis();
}

Animation2D *KSGSAnimation2DKlasse::zVal() const
{
    return val;
}