// ------------------------------------------------------------------------------------ //
//																						//
//	File: Asura_GUIMenu_Widget_CheckBox.h												//
//																						//
//	Description: CheckBox widget class													//
//																						//
//	Created: Steve Keen - 9/11/06														//
//																						//
//	Copyright (C) 2006 Rebellion (Derby), All Rights Reserved.							//
// ------------------------------------------------------------------------------------ //

#ifndef __ASURA_GUIMENU_WIDGET_CHECKBOX_H__
#define __ASURA_GUIMENU_WIDGET_CHECKBOX_H__

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif

#ifdef ASURA_USE_GUI_MENU_SYSTEM
#include "GUIMenu/Asura_GUIMenu_CommandConsole.h"
#include "GUIMenu/Asura_GUIMenu_Widget_Base.h"

// -- Typedef -------------------------------------------------------------------------

// -- Enums ---------------------------------------------------------------------------

// -- Defines -------------------------------------------------------------------------
#define ASURA_GUIMENU_WIDGET_CHECKBOX_FLAGS_USE_LEFT_RIGHT_TOGGLE_CONTROL	(1<<0)


#define ASURA_GUIMENU_WIDGET_CHECKBOX_LOCAL_FLAG_START	16

// versions: ASURA_CHUNK_WIDGET_CHECKBOX_VERSION
// 0: initial data
// 1: added console var - MH
// 2: added checkbox specific flags
#define ASURA_CHUNK_WIDGET_CHECKBOX_VERSION 2

// -- Structures ----------------------------------------------------------------------

// -- Class ---------------------------------------------------------------------------

class Asura_GUIMenu_Widget_CheckBox : public Asura_GUIMenu_Widget_Base
{
	friend class Asura_Chunk_GUIMenu;
	friend class Tools_GUIMenu_Widget_CheckBox;

	// -- Functions -----------------------------------------------------------------------
public:
	enum Asura_GUIMenu_Inherit_Flag_Widget_CheckBox_Type
	{
		ASURA_GUIMENU_WIDGET_CHECKBOX_LOCAL_FLAG_FLAGS	  = (1<<(ASURA_GUIMENU_WIDGET_CHECKBOX_LOCAL_FLAG_START+0)),

		//ASURA_GUIMENU_WIDGET_CHECKBOX_OVERIDE_MAX is here to stop another programmer adding past bit flag 31
		ASURA_GUIMENU_WIDGET_CHECKBOX_LOCAL_FLAG_MAX	= (1<<(ASURA_GUIMENU_WIDGET_CHECKBOX_LOCAL_FLAG_START+15))
	};

	Asura_GUIMenu_Widget_CheckBox();
	virtual ~Asura_GUIMenu_Widget_CheckBox();

	virtual void 				Update( float fElapsedTime);
	virtual void 				Render( u_int uState);
	virtual void				Copy( const Asura_GUIMenu_Root* pxSource);

	virtual u_int				ProcessInputActivity( const Asura_GUIMenu_Input& xInput);

	// -- UI Message handler functions --
	virtual bool				OnInit( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnDeInit( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnDataChange( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnDataRequest( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnClicked( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnRollIn( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnRollOut( const Asura_Message_GUIMenu_Notify* pxMessage);
	virtual bool				OnEnable( const Asura_Message_GUIMenu_Notify* pxMessage);

//	virtual void				UpdateInheritedValues( bool bOnInit = false);

	bool						IsCheckboxFlagSet( u_int uNumericFlag) const;
	void						SetCheckboxFlag( u_int uNumericFlag, bool bTrueOrFalse);
	u_int						GetCheckboxFlags( void) const;
	void						SetCheckboxFlags( u_int uNumericFlags);
	u_int*						GetCheckboxFlagsAsPtr( void);


#ifdef ASURA_TOOLS
	virtual void				UpdateLocalDataFromStyle( void);
	virtual void				WriteToChunkStream( Asura_Chunk_Stream& xStream) const;
	virtual void				ExportToXML(Tools_GUIMenu_XMLExporter* pxExporter) const;
#endif
	virtual void				ReadFromChunkStream( Asura_Chunk_Stream& xStream, Asura_GUIMenu_Root* pxParentObject, u_int uChunkVersion);

	// Helper to Get the console var
	void InitFromConsoleVar();

protected:
	void						SetupDefaultElements( void);

private:

	// Helper to Set the console var
	void SetConsoleVar() const;

	// -- Variables -----------------------------------------------------------------------
public:

protected:

private:
	typedef Asura_GUIMenu_Widget_Base PARENT;

	bool						m_bIsOn;
	Asura_GUIMenu_ConsoleVar	m_xConsoleVar;

	u_int						m_uCheckboxFlags;
};
#endif // ASURA_USE_GUI_MENU_SYSTEM
#endif // __ASURA_GUIMENU_WIDGET_CHECKBOX_H__
