//********************************************************************
// This source file is part of Ninfa3D Engine
// 
// Copyright (C) 2008-2009 Viz_fuerte.
// All rights reserved.
// 
// LIMITED WARRANTY
// This software is provided "as-is", without any express or implied warranty.
// In no event shall the author be held liable for any damages arising from the use of this software.
// This is a contract. By accepting the Ninfa3D Engine (the SOFTWARE), 
// you (either an individual or a single entity, the LICENSEE) accept the terms and conditions of this licensing agreement.
// 
// If the LICENSEE does not accept the terms and conditions, then LICENSEE must not accept the SOFTWARE.
// If at a later time the LICENSEE decides not to continue licensing the SOFTWARE under these terms and 
// conditions, then the LICENSEE must delete permanently all files constituting the SOFTWARE.
//
// File: Body.cpp
//********************************************************************

/*--------------------------------------------------------------------
Includos*/

	#include "..\..\Header Files\Ninfa3D.h"

/*--------------------------------------------------------------------
Variables externas*/

	extern ISceneManager* SceneManager;
	extern IGUIEnvironment* guienv;

/*--------------------------------------------------------------------
Declaracion global de funciones*/

extern "C"
{

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	GUI BOTON.
*/

	/*====================================================================
	CREA UN BOTON.*/

	DLL_EXPORT void* DLL_APIENTRY CreateGUIButton(int X,int Y,const wchar_t* Text,IGUIElement* Parent)
	{
		IGUIButton* Button = guienv->addButton(rect<s32>(X,Y,X,Y),Parent,-1,Text);
		Button->setIsPushButton(true);
		Button->setUseAlphaChannel(true);
		return (void*)Button;
	}

	/*====================================================================
	APLICA UNA IMAGEN AL BOTON.*/

	DLL_EXPORT void DLL_APIENTRY ButtonImage(IGUIButton* Button,ITexture* Texture,int X,int Y)
	{
		Button->setImage(Texture,rect<s32>(X,Y,X,Y));
	}

	/*====================================================================
	DEVUELVE TRUE SI EL BOTON ESTA PULSADO.*/

	DLL_EXPORT bool DLL_APIENTRY ButtonIsPressed(IGUIButton* Button)
	{
		return Button->isPressed();
	}

	/*====================================================================
	DIBUJA EL BORDE DEL BOTON.*/

	DLL_EXPORT void DLL_APIENTRY ButtonDrawBorder(IGUIButton* Button)
	{
		Button->setDrawBorder(true);
	}

	/*====================================================================
	ELIMINA EL BOTON.*/

	DLL_EXPORT void DLL_APIENTRY DeleteButton(IGUIButton* Button)
	{
		Button->remove();
	}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	GUI BARRA DESLIZANTE.
*/

	/*====================================================================
	CREA UNA BARRA DESLIZANTE.*/

	DLL_EXPORT void* DLL_APIENTRY CreateGUIScrollBar(int X,int Y,bool Horizontal,IGUIElement* Parent)
	{
		IGUIScrollBar* ScrollBar = guienv->addScrollBar(Horizontal,rect<s32>(X,Y,X,Y),Parent);
		return (void*)ScrollBar;
	}

	/*====================================================================
	CAMBIA LA POSICION DE LA BARRA DESLIZANTE.*/

	DLL_EXPORT void DLL_APIENTRY ScrollBarPosition(IGUIScrollBar* ScrollBar,int Position)
	{
		ScrollBar->setPos(Position);
	}

	/*====================================================================
	CAMBIA LA POSICION DE LA BARRA DESLIZANTE.*/

	DLL_EXPORT void DLL_APIENTRY ScrollBarSmallStep(IGUIScrollBar* ScrollBar,int Step)
	{
		ScrollBar->setSmallStep(Step);
	}

	/*====================================================================
	CAMBIA LA POSICION DE LA BARRA DESLIZANTE.*/

	DLL_EXPORT void DLL_APIENTRY ScrollBarLargeStep(IGUIScrollBar* ScrollBar,int Step)
	{
		ScrollBar->setLargeStep(Step);
	}

	/*====================================================================
	DEVUELVE LA POSICION DE LA BARRA DESLIZANTE.*/

	DLL_EXPORT int DLL_APIENTRY ScrollBarXY(IGUIScrollBar* ScrollBar)
	{
		return ScrollBar->getPos();
	}

	/*====================================================================
	ELIMINA LA BARRA DESLIZANTE.*/

	DLL_EXPORT void DLL_APIENTRY DeleteScrollBar(IGUIScrollBar* ScrollBar)
	{
		ScrollBar->remove();
	}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	GUI VENTANA
*/

	/*====================================================================
	CREA UNA VENTANA.*/

	DLL_EXPORT void* DLL_APIENTRY CreateGUIWindow(int X,int Y,int Width,int Height,const wchar_t* Text,IGUIElement* Parent)
	{
		IGUIWindow* Window = guienv->addWindow(rect<s32>(X,Y,X+Width,Y+Height),false,Text,Parent);
		return (void*)Window;
	}

	/*====================================================================
	ELIMINA LA VENTANA.*/

	DLL_EXPORT void DLL_APIENTRY DeleteWindow(IGUIWindow* Window)
	{
		Window->remove();
	}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	GUI CAJA DE INFORMACION.
*/

	/*====================================================================
	CREA CAJA DE INFORMACION.*/

	DLL_EXPORT void* DLL_APIENTRY CreateGUIMessageBox(const wchar_t* Caption,int Flags,const wchar_t* Text,IGUIElement* Parent)
	{
		IGUIWindow* MBox = guienv->addMessageBox(Caption,Text,true,Flags,Parent);
		return (void*)MBox;
	}

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	GUI CAJA DE REVISION.
*/

	/*====================================================================
	CREA CAJA DE INFORMACION.*/

	DLL_EXPORT void* DLL_APIENTRY CreateGUICheckBox(int X,int Y,int Width,int Height,const wchar_t* Text,IGUIElement* Parent)
	{
		IGUICheckBox* CBox = guienv->addCheckBox(true,rect<s32>(X,Y,X+Width,Y+Height),Parent,-1,Text);
		return (void*)CBox;
	}

	/*====================================================================
	CREA CAJA DE INFORMACION.*/

	DLL_EXPORT void DLL_APIENTRY CheckBoxEnable(IGUICheckBox* CBox,bool Enable)
	{
		CBox->setEnabled(Enable);
	}

	/*====================================================================
	CREA CAJA DE INFORMACION.*/

	DLL_EXPORT void DLL_APIENTRY CheckBoxChecked(IGUICheckBox* CBox,bool Checker)
	{
		CBox->setChecked(Checker);
	}

	/*====================================================================
	DEVUELVE TRUE SI LA CAJA ESTA REVISADA.*/

	DLL_EXPORT bool DLL_APIENTRY CheckBoxIsChecked(IGUICheckBox* CBox)
	{
		return CBox->isChecked();
	}

}