//========= Copyright � 1996-2002, Valve LLC, All rights reserved. ============
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================

#ifndef VGUI_CHECKBUTTON2_H
#define VGUI_CHECKBUTTON2_H
#ifdef _WIN32
#pragma once
#endif

#include "VGUI_Label.h"
#include "VGUI_ImagePanel.h"
#include "vgui_defaultinputsignal.h"

namespace vgui
{
class CCheckButton2;
class ICheckButton2Handler
{
public:
	virtual void	StateChanged( CCheckButton2 *pButton ) = 0;
};

// VGUI checkbox class.
// - Provides access to the checkbox images.
// - Provides an easy callback mechanism for state changes.
// - Default background is invisible, and default text color is white.
class CCheckButton2 : public Panel, public CDefaultInputSignal
{
public:
	CCheckButton2();
	~CCheckButton2();

	// Initialize the button with these.
	void		SetImages( char const *pChecked, char const *pUnchecked );
	void		SetImages( Image *pChecked, Image *pUnchecked );		// If you use this, the button will never delete the images.
	void		DeleteImages();

	// The checkbox can be to the left or the right of the text (default is left).
	void		SetCheckboxLeft( bool bLeftAlign );
	bool		GetCheckboxLeft();

	// Set the label text.
	void		SetText( char const *pText, ... );
	void		SetTextColor( int r, int g, int b, int a );

	// You can register for change notification here.
	void		SetHandler( ICheckButton2Handler *pHandler );

	// Get/set the check state.
	bool		IsChecked();
	void		SetChecked( bool bChecked );

// Panel overrides.
	virtual void	internalMousePressed( MouseCode code );	

protected:
	void			SetupControls();

// InputSignal overrides.
	virtual void mousePressed( MouseCode code, Panel *panel );

public:
	ICheckButton2Handler	*m_pHandler;

	bool		m_bCheckboxLeft;
	Label		m_Label;
	ImagePanel	m_CheckboxPanel;
	
	Image		*m_pChecked;
	Image		*m_pUnchecked;
	bool		m_bOwnImages;

	bool		m_bChecked;
};
}
#endif // VGUI_CHECKBUTTON2_H