// XTPListBox.h interface for the CXTPListBox class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPLISTBOX_H__)
#define __XTPLISTBOX_H__
//}}AFX_CODEJOCK_PRIVATE

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

enum XTPListBoxStyle
{
	xtpListBoxStandard,
	xtpListBoxOfficeXP,
	xtpListBoxOffice2007,
};

//===========================================================================
// Summary:
//     CXTPListBox is a CListBox derived class. CXTPListBox extends the standard
//     list box control to enable flicker free drawing.
//===========================================================================
class _XTP_EXT_CLASS CXTPListBox : public CListBox
{
	DECLARE_DYNAMIC(CXTPListBox)

public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPListBox object
	//-----------------------------------------------------------------------
	CXTPListBox();

	//-----------------------------------------------------------------------
	// Summary:
	//     Destroys a CXTPListBox object, handles cleanup and deallocation
	//-----------------------------------------------------------------------
	virtual ~CXTPListBox();

public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to initialize the list box.  This method
	//     should be called directly after creating or sub-classing the control.
	// Parameters:
	//     bAutoFont - True to enable automatic font initialization.
	//-----------------------------------------------------------------------
	virtual void Initialize(bool bAutoFont = true);

	//-----------------------------------------------------------------------
	// Summary:
	//     This method is called to get background color of listbox
	//-----------------------------------------------------------------------
	virtual COLORREF GetBackColor();

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this method to set list style
	// Input:
	//     style - XTPListBoxStyle  style of the ListBox (xtpListBoxStandard, xtpListBoxOfficeXP, xtpListBoxOffice2007)
	// See Also: XTPListBoxStyle, GetListStyle
	//-----------------------------------------------------------------------
	void SetListStyle(XTPListBoxStyle style);


	void SetTheme(XTPControlTheme nTheme);


	//-----------------------------------------------------------------------
	// Summary: Call this method to get style of the ListBox
	// Returns: XTPListBoxStyle value contains style of listbox
	// See Also: XTPListBoxStyle, SetListStyle
	//-----------------------------------------------------------------------
	XTPListBoxStyle GetListStyle() const;

protected:

//{{AFX_CODEJOCK_PRIVATE
	DECLARE_MESSAGE_MAP()

	bool m_bPreSubclassInit;

	//{{AFX_VIRTUAL(CXTPListBox)
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
	virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual void PreSubclassWindow();
	virtual void Init();
	//}}AFX_VIRTUAL

	//{{AFX_MSG(CXTPListBox)
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnPaint();
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
	afx_msg void OnMouseLeave();
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	afx_msg void OnKillFocus(CWnd* pNewWnd);
	//}}AFX_MSG
//}}AFX_CODEJOCK_PRIVATE

protected:
	XTPListBoxStyle m_nStyle;    // Listbox style.
	int m_nItemHeight;          // Height of the items.
	int m_nTextPadding;         // Text padding.
	int m_nHotItem;             // Hot item index.
};

AFX_INLINE void CXTPListBox::SetListStyle(XTPListBoxStyle style) {
	m_nStyle = style;
	if (m_hWnd) Invalidate(FALSE);
}
AFX_INLINE XTPListBoxStyle CXTPListBox::GetListStyle() const {
	return m_nStyle;
}


#endif // #if !defined(__XTPLISTBOX_H__)