// CPACChkB.cpp : implementation file
/////////////////////////////////////////////////////
#include "StdAfx.h"

#include "WControls\CTL_WCkB.hpp"

#include "Controls\CTL_CtlB.hpp"
#include "Others\CTL_TTT.hpp"
#include "Others\CTL_Pub.hpp"

//External Modules
#include "CTL_ErO.hpp"
#include "IncTUT.h"
//End of External Modules

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTL_Editor_CheckBox

BEGIN_MESSAGE_MAP(CTL_Editor_CheckBox, CButton)
	//{{AFX_MSG_MAP(CTL_Editor_CheckBox)
	ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//**************************************************************************
CTL_Editor_CheckBox::CTL_Editor_CheckBox(CTL_tdeCarCheckBoxType _tdeType,
																				 long _lAdditionnalStyles /*= 0*/,
																				 CTL_Editor_Control *_pclControl,
																				 CWnd *_pclParentWnd,
																				 long _lUserDefinedType /*= 0*/,
																				 long _lUserDefinedCode /*= 0*/,
																				 CString _csFalseText /*= ""*/,
																				 CString _csTrueText /*= ""*/)

										: CTL_BaseWindowsControl(_pclControl,
																						 _pclParentWnd,
																						 _lUserDefinedType,
																						 _lUserDefinedCode)
{
	m_pri_tdeType = _tdeType;

	//Creates control
	DWORD lStyles;
	CRect crBidonRect(0,0,0,0);
	lStyles = WS_CHILD | BS_AUTOCHECKBOX;
	
	m_pri_csFalseText = _csFalseText.IsEmpty() ? "False" : _csFalseText;
	m_pri_csTrueText = _csTrueText.IsEmpty() ? "True" : _csTrueText;

	switch ( m_pri_tdeType )
	{
	case CTL_CHECK_BOX_TYPE__NORMAL :
		lStyles |= BS_PUSHLIKE;
		break;
	}

	lStyles |= _lAdditionnalStyles;

	if ( Create("",
							lStyles,
							crBidonRect,
							_pclParentWnd,
							CTL_fn_lGetNextAvailableIDForControl()) )
	{
		SetFont(_pclParentWnd->GetFont());
	}

	m_pri_td_p_fn_vHasBeenClicked_CallBack = NULL;
}

//**************************************************************************
CTL_Editor_CheckBox::~CTL_Editor_CheckBox()
{

}

/////////////////////////////////////////////////////////////////////////////
// CTL_Editor_CheckBox message handlers

//**************************************************************************
void CTL_Editor_CheckBox::m_pub_fn_vSetHasBeenClicked_CallBack(CTL_tdp_fn_vCheckBoxHasBeenClicked _p_fn_vCallBack)
{
	ERROR_ASSERT( m_pri_td_p_fn_vHasBeenClicked_CallBack == NULL );
	
	m_pri_td_p_fn_vHasBeenClicked_CallBack = _p_fn_vCallBack;
}

//**************************************************************************
void CTL_Editor_CheckBox::OnClicked()
{
	switch ( m_pri_tdeType )
	{
	case CTL_CHECK_BOX_TYPE__NORMAL :
		SetCheck( GetCheck() );
		break;
	}

	if ( m_pri_td_p_fn_vHasBeenClicked_CallBack != NULL )
		m_pri_td_p_fn_vHasBeenClicked_CallBack(this, 
																					 m_pub_fn_pclGetParentControl(),
																					 m_pri_tdeType,
																					 m_pub_fn_lGetUserDefinedType(),
																					 m_pub_fn_lGetUserDefinedCode());
}

//**************************************************************************
void CTL_Editor_CheckBox::SetCheck(BOOL bCheck)
{
	switch ( m_pri_tdeType )
	{
	case CTL_CHECK_BOX_TYPE__NORMAL :
		//Sets button's text
		SetWindowText(bCheck ? m_pri_csTrueText : m_pri_csFalseText);
		break;
	}

	CButton::SetCheck(bCheck);
}

//**********************************************************************************
//For TUT registration
void CTL_Editor_CheckBox::m_pub_fn_vRegisterWindowsControl(CString _csAdditionnalInfo)
{
#ifndef CTL_WITH_NO_TUT
	m_pro_fn_vRegisterWindowsControl(_csAdditionnalInfo, TUT_e_Button, "Check Box", this);
#endif //CTL_WITH_NO_TUT
}
