/*********************************************************************
*	ButtonBase
*	SOURCE FILE
*	Autor:	Michal Jirouš
*	Datum: 30.6.2008
*	Soubor: buttonbase.cpp
*	Popis: funkcni zaklad vsech komponent zalozenych na principech tlacitka
**********************************************************************/

#include "gfg.h"

/*Zakladni inicializace a konstruktory*/
ButtonBase::ButtonBase()
{
	buttonBaseInit(0,0);
}

ButtonBase::ButtonBase( float w, float h )
{
	buttonBaseInit( w, h );
}

void ButtonBase::init()
{
	buttonBaseInit(0,0);
}

void ButtonBase::buttonBaseInit( float w, float h )
{
	baseInit( w, h );	//inicializace komponentz
	m_bPushed = false;
	m_iDetectionType = GFG_DETECT_MOUSE | GFG_DETECT_KEYBOARD;
	m_iObjectType = GFG_BUTTON;
	m_pTexture_up = NULL;
	m_pTexture_down = NULL;
}

/*Destruktor - pouzite textury je nutno smazat*/
ButtonBase::~ButtonBase()
{
	if( m_pTexture_up )
		textureLibrary.unloadTexture( m_pTexture_up );
	if( m_pTexture_down )
		textureLibrary.unloadTexture( m_pTexture_down );
}


/*Volani callback funkci pri kliknuti na tlacitko*/
void ButtonBase::onClick()
{
	if( m_Callback.callbackFunc )
	{
		m_Callback.callbackFunc( this, m_Callback.callbackData );
	}
}

/*Reakce na udalosti mysi, promenna isOnArea indikuje souradnice kurzoru nad komponentou*/
bool ButtonBase::onMouseButtonDown( float x, float y, int button, bool isOnArea )
{
	return m_bPushed = isOnArea;
}

bool ButtonBase::onMouseButtonUp(float x, float y, int button, bool isOnArea)
{
	if( isOnArea && m_bPushed)
	{
		onClick();
	}
	m_bPushed = false;
	return isOnArea;
}

bool ButtonBase::onMouseOver( float x, float y )
{
	if( !m_bMouseOver )
		m_bPushed = false;
	return m_bMouseOver;
}

/*Reakce na udalosti klavesnice*/
bool ButtonBase::onKeyboardDown( int key )
{
	if( key == GFG_KEY_ENTER )
	{
		onClick();	
		return true;
	}
	return false;
}

/*Nastavovani textur - vzdy je potreba smazat starou texturu*/
void ButtonBase::setTextureIdle( string texture )
{
	if( m_pTexture_up )
		textureLibrary.unloadTexture( m_pTexture_up );
	
	m_pTexture_up = textureLibrary.applyTexture( texture );
}

void ButtonBase::setTexturePushed( string texture )
{
	if( m_pTexture_down )
		textureLibrary.unloadTexture( m_pTexture_down );
	
	m_pTexture_down = textureLibrary.applyTexture( texture );
}

