/*
	GWEN
	Copyright (c) 2010 Facepunch Studios
	See license in Gwen.h
*/

#pragma once
#ifndef GWEN_CONTROLS_COLORPICKER_H
#define GWEN_CONTROLS_COLORPICKER_H

#include "Gwen/Controls/Base.h"
#include "Gwen/Gwen.h"
#include "Gwen/Skin.h"


namespace Gwen 
{
	namespace ControlsInternal
	{
		class GWEN_EXPORT ColorDisplay : public Controls::Base
		{
			public:
				GWEN_CONTROL_INLINE( ColorDisplay, Controls::Base )
				{
					SetSize( 32, 32 );
					m_Color = Color( 255, 0, 0, 255 );
					m_DrawCheckers = true;
				}

				virtual void Render( Gwen::Skin::Base* skin )
				{
					skin->DrawColorDisplay( this, m_Color );
				}

				virtual void SetColor( Gwen::Color color ) { m_Color = color; }
				virtual Gwen::Color GetColor() { return m_Color; }

				virtual void SetRed( int red )  	{ m_Color.r = red;	}
				virtual void SetGreen( int green )	{ m_Color.g = green;}
				virtual void SetBlue( int blue )	{ m_Color.b = blue;	}
				virtual void SetAlpha( int alpha )	{ m_Color.a = alpha;}

				virtual void SetDrawCheckers( bool should ) { m_DrawCheckers = should; }

			protected:
				Gwen::Color m_Color;
				bool m_DrawCheckers;
		};
	}
	namespace Controls
	{

		class GWEN_EXPORT ColorPicker : public Base
		{
			public:

				GWEN_CONTROL( ColorPicker, Base );

				virtual void Render( Skin::Base* skin );
				virtual void Layout( Skin::Base* skin );
				virtual void CreateControls();
				virtual void SlidersMoved( Gwen::Controls::Base* control );
				virtual void NumericTyped( Gwen::Controls::Base* control );
				virtual void UpdateControls();
				virtual void UpdateColorControls( Gwen::String name, Gwen::Color col, int sliderVal );
				virtual void CreateColorControl( Gwen::String name, int y );

				virtual void SetColor( Gwen::Color color );
				virtual Gwen::Color GetColor() { return m_Color; }

				int GetColorByName( Gwen::String colorName );
				void SetColorByName( Gwen::String colorName, int colorValue );
				Gwen::String GetColorFromName( Gwen::String name );
				virtual void SetAlphaVisible( bool visible );

				virtual void SetRed( int red )  	{ m_Color.r = red;	}
				virtual void SetGreen( int green )	{ m_Color.g = green;}
				virtual void SetBlue( int blue )	{ m_Color.b = blue;	}
				virtual void SetAlpha( int alpha )	{ m_Color.a = alpha;}

				Event::Caller	onColorChanged;

			protected:
				Gwen::Color m_Color;

		};
	}
}
#endif
