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

#include "WControls\CTL_WSta.hpp"

#include "Others\CTL_Pub.hpp"
#include "Others\CTL_Pri.hpp"

//ANNECY CB
#include "WControls\CTL_VBas.hpp"
//END ANNECY

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

extern CBrush g_clWhiteBrush;

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

//Colors for a value (not changeable in Setup)
COLORREF CTL_g_colref_ValueTextColor =				RGB(0,0,0);

/////////////////////////////////////////////////////////////////////////////
// CTL_Editor_Static
IMPLEMENT_DYNAMIC(CTL_Editor_Static, CStatic)

BEGIN_MESSAGE_MAP(CTL_Editor_Static, CStatic)
	//{{AFX_MSG_MAP(CTL_Editor_Static)
	ON_WM_RBUTTONUP()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_PAINT()
	ON_WM_LBUTTONUP()
	ON_WM_LBUTTONDOWN()
//ANNECY CB
	ON_WM_MOUSEMOVE()
//END ANNECY
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//***************************************************************************
CTL_Editor_Static::CTL_Editor_Static(CString _csName,
																		 CTL_tdeStaticType _tdeType,
																		 long _lAdditionnalStyles,
																		 CTL_Editor_Control *_pclParentControl,
																		 CWnd *_pclParentWnd, 
																		 long _lUserDefinedType /*= 0*/,
																		 long _lUserDefinedCode /*= 0*/)
									
									: CTL_BaseWindowsControl(_pclParentControl,
																					 _pclParentWnd,
																					 _lUserDefinedType,
																					 _lUserDefinedCode)
{
	m_csTextToDisplay = _csName;

	m_pri_tdeType = _tdeType;

	m_pri_p_fnStaticHasBeenClicked_CallBack = CTL_g_p_fnDefaultCallBack_StaticHasBeenClicked;
	m_pri_td_p_fn_vGetColor = CTL_g_p_fnDefaultCallBack_GetColor;

	//Creates the control
	DWORD lStyles = WS_CHILD | SS_NOTIFY | WS_BORDER;
	switch ( m_pri_tdeType	)
	{
		case CTL_STATIC_TYPE__FIELD_VALUE:
		case CTL_STATIC_TYPE__NEUTRAL_FIELD:
			lStyles |= (SS_CENTER);
			break;
	}
	lStyles |= _lAdditionnalStyles;

	m_pri_colBackGroundColor = RGB(132,132,132);
	m_pri_colTextColor = RGB(0,0,0);

	if ( Create(_csName, 
							lStyles, 
							CRect(0,0,0,0), 
							_pclParentWnd, 
							CTL_fn_lGetNextAvailableIDForControl()) )
	{
		SetFont(_pclParentWnd->GetFont());
	}
}

//***************************************************************************
CTL_Editor_Static::~CTL_Editor_Static()
{
}

/////////////////////////////////////////////////////////////////////////////
// CTL_Editor_Static message handlers

//***************************************************************************
void CTL_Editor_Static::m_fn_vSetTextToDisplay(CString csNewText,
																							 BOOL _bMustRefresDisplay /*= FALSE*/)
{
	m_csTextToDisplay = csNewText;

	if ( _bMustRefresDisplay )
		InvalidateRect(NULL);
}

//***************************************************************************
CTL_tdeStaticType CTL_Editor_Static::m_pub_fn_tdeGetType()
{
	return m_pri_tdeType;
}

//***************************************************************************
CString CTL_Editor_Static::m_pub_fn_csGetDisplayedString()
{
	return m_csTextToDisplay; 
}

//***************************************************************************
COLORREF CTL_Editor_Static::m_pub_fn_colGetBackGroundColor()
{
	return m_pri_colBackGroundColor;
}

//***************************************************************************
void CTL_Editor_Static::m_pub_fn_vSetBackGroundColor(COLORREF _colNewColor,
																										 BOOL _bMustRefresDisplay /*= FALSE*/)
{
	m_pri_colBackGroundColor = _colNewColor;

	if ( _bMustRefresDisplay )
		InvalidateRect(NULL);
}

//***************************************************************************
COLORREF CTL_Editor_Static::m_pub_fn_colGetTextColor()
{
	return m_pri_colTextColor;
}

//***************************************************************************
void CTL_Editor_Static::m_pub_fn_vSetTextColor(COLORREF _colNewColor,
																							 BOOL _bMustRefresDisplay /*= FALSE*/)
{
	m_pri_colTextColor = _colNewColor;

	if ( _bMustRefresDisplay )
		InvalidateRect(NULL);
}

//***************************************************************************
void CTL_Editor_Static::m_pub_fn_vSetStaticHasBeenClicked_CallBack(
														CTL_td_p_fn_vStaticHasBeenClicked _p_fnStaticHasBeenClicked_CallBack)

{
	m_pri_p_fnStaticHasBeenClicked_CallBack = _p_fnStaticHasBeenClicked_CallBack;
}

//***************************************************************************
void CTL_Editor_Static::m_pub_fn_v_SetColRefGetColor_CallBack(CTL_tdp_fn_vGetColor _p_fn_CallBack)
{
	m_pri_td_p_fn_vGetColor = _p_fn_CallBack;
}

//***************************************************************************
void CTL_Editor_Static::OnRButtonUp(UINT nFlags, CPoint point) 
{
	//CPA2 Stegaru Cristian 98/06/19
	CTL_tdeClickType clickType = CTL_CLICK_TYPE__RIGHT_CLICK;
	if (MK_SHIFT == (MK_SHIFT & nFlags))
		clickType = CTL_CLICK_TYPE__SHIFT_RIGHT_CLICK;

	if ( m_pri_p_fnStaticHasBeenClicked_CallBack != NULL )
		m_pri_p_fnStaticHasBeenClicked_CallBack(this, clickType);
	//End CPA2 Stegaru Cristian 98/06/19

	CStatic::OnRButtonUp(nFlags, point);
}

//***************************************************************************
void CTL_Editor_Static::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	if ( m_pri_p_fnStaticHasBeenClicked_CallBack != NULL )
		m_pri_p_fnStaticHasBeenClicked_CallBack(this, CTL_CLICK_TYPE__LEFT_DOUBLE_CLICK);
	CStatic::OnMButtonDblClk(nFlags, point);
}

//***************************************************************************
void CTL_Editor_Static::OnLButtonUp(UINT nFlags, CPoint point) 
{
	if ( m_pri_p_fnStaticHasBeenClicked_CallBack != NULL )
		m_pri_p_fnStaticHasBeenClicked_CallBack(this, CTL_CLICK_TYPE__LEFT_CLICK);

	CStatic::OnLButtonUp(nFlags, point);
}

//***************************************************************************
//ANNECY CB
void CTL_Editor_Static::OnMouseMove(UINT nFlags, CPoint point) 
{
	CTL_Editor_BaseFormView *pView = (CTL_Editor_BaseFormView *) GetParent();
	ClientToScreen(&point);
	pView->ScreenToClient(&point);
	LPARAM	lParam = point.x + (point.y << 16);
	pView->SendMessage(WM_MOUSEMOVE, (WPARAM) nFlags, lParam);
}
//END ANNECY

void CTL_Editor_Static::OnLButtonDown(UINT nFlags, CPoint point) 
{
//ANNECY CB
//	if ( m_pri_p_fnStaticHasBeenClicked_CallBack != NULL )
//		m_pri_p_fnStaticHasBeenClicked_CallBack(this, CTL_CLICK_TYPE__LEFT_BUTTON_DOWN);
//	else
	{
		CTL_Editor_BaseFormView *pView = (CTL_Editor_BaseFormView *) GetParent();
		ClientToScreen(&point);
		pView->ScreenToClient(&point);
		LPARAM	lParam = point.x + (point.y << 16);
		pView->SendMessage(WM_LBUTTONDOWN, (WPARAM) nFlags, lParam);
	}
//END ANNECY
	CStatic::OnLButtonDown(nFlags, point);
}

//***************************************************************************
void CTL_Editor_Static::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CRect crClientRect;
	GetClientRect(crClientRect);

	if ( m_pri_td_p_fn_vGetColor != NULL )
		m_pri_td_p_fn_vGetColor(this, m_pri_colBackGroundColor, m_pri_colTextColor);

	//Fills the window's rect
	dc.FillSolidRect(crClientRect, m_pri_colBackGroundColor);

	//Displays the string 
	dc.SelectObject(GetFont());
	dc.SetTextColor(m_pri_colTextColor);
	dc.SetBkMode(TRANSPARENT);
	
	UINT nFormat = DT_SINGLELINE | DT_VCENTER;
	if ( (GetStyle() & SS_CENTER) != 0 )
		nFormat |= DT_CENTER;
	else
		nFormat |= DT_LEFT;

	crClientRect.left ++;
	dc.DrawText(m_csTextToDisplay, crClientRect, nFormat);
	
	// Do not call CStatic::OnPaint() for painting messages
}

//***************************************************************************
long CTL_Editor_Static::m_fn_lGetMinLength() 
{
	CClientDC dc(this);
	CString csWindowText;
	GetWindowText(csWindowText);
	dc.SelectObject(GetFont());

	return (dc.GetTextExtent(csWindowText).cx);
}

//**********************************************************************************
//For TUT registration
void CTL_Editor_Static::m_pub_fn_vRegisterWindowsControl(CString _csAdditionnalInfo)
{
#ifndef CTL_WITH_NO_TUT
	m_pro_fn_vRegisterWindowsControl(_csAdditionnalInfo, TUT_e_Window, "Static", this);
#endif //CTL_WITH_NO_TUT
}

