#pragma once

//! @file Utility/UI/CheckBox.h
//! @brief チェックボックスクラスインクルードファイル

#include "Utility/UI/Control.h"

namespace Utility{ namespace UI {

	//! @class CheckBox
	//! @brief チェックボックスクラス
	class CheckBox : public UI::Control
	{
	private:
		Mix::RectangleF m_Rect;
		Mix::RectangleF m_BackgroundRect;

		Mix::RectangleF m_BoxFrameRect;
		Mix::RectangleF m_BoxRect;
		Mix::RectangleF m_CheckRect;

		Mix::StringW m_Text;
		Mix::Vector2 m_TextPos;
		Mix::RectangleF m_TextRect;

		Boolean m_bCheck;
		Boolean m_bCheckDown;

	public:
		//! @brief コンストラクタ
		CheckBox( void );
		//! @brief デストラクタ
		virtual ~CheckBox( void );

		//! @brief テキストを設定します
		//! @param[in] pText テキスト
		void SetText( const wchar_t* pText );
		//! @brief テキストを取得します
		//! @return テキストを返します
		const wchar_t* GetText( void ) const;

		//! @brief ステートを設定します
		//! @param[in] state チェックをつける場合は True
		void SetState( Boolean state );
		//! @brief ステートを取得します
		//! @return チェックがついている場合は True を返します
		Boolean GetState( void ) const;

	protected:
		virtual void Update( const Control::UPDATE_EVENT_ARGS& args );
		virtual const Mix::RectangleF& GetRectangle( void ) const;

		virtual void OnMouseDown( Mix::HID::IMouse* pMouse );
		virtual void OnMouseUp( Mix::HID::IMouse* pMouse );

		virtual void OnDraw( const Control::DRAW_EVENT_ARGS& args );
	};
}}
