// XTPTabCtrlButtons.h : interface for the CXTPTabCtrlButtons class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2011 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(__XTPTABCTRLBUTTONS_H_)
#define __XTPTABCTRLBUTTONS_H_
//}}AFX_CODEJOCK_PRIVATE

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

class CXTPTabCtrlButtons;
class CXTPTabBase;

#define XTP_IDC_TAB_CLOSE                106

//////////////////////////////////////////////////////////////////////
// Summary: CXTPTabCtrlButton is a stand alone structure class.  It is internal used in CXTPTabCtrlButtons class.
class _XTP_EXT_CLASS CXTPTabCtrlButton
{
public:
	CXTPTabCtrlButton (DWORD wStyle);

	void Draw(CDC* pDC, COLORREF clrButton);
	DWORD Click(CXTPTabCtrlButtons* pWnd, CPoint pt, BOOL bRepeat = FALSE);
	void SetRect(CRect rc);
	CRect GetRect();
	BOOL PtInRect(POINT pt) const;
	void CheckForMouseOver (CWnd* pWnd, CPoint pt);
	void SetEnable(BOOL bEnable);

	CRect m_Rect;
	DWORD m_wStyle;
	CTabCtrl* m_pTabCtrl;
	CXTPTabCtrlButtons* m_pButtons;
};

//////////////////////////////////////////////////////////////////////

AFX_INLINE CXTPTabCtrlButton::CXTPTabCtrlButton(DWORD wStyle) {
	m_wStyle = wStyle;
	m_pButtons = 0;
	m_pTabCtrl = 0;
	m_Rect.SetRectEmpty();
}
AFX_INLINE void CXTPTabCtrlButton::SetRect (CRect rc) {
	m_Rect = rc;
}
AFX_INLINE CRect CXTPTabCtrlButton::GetRect() {
	return m_Rect;
}
AFX_INLINE BOOL CXTPTabCtrlButton::PtInRect (POINT pt) const {
	return m_Rect.PtInRect (pt) != 0;
}

//////////////////////////////////////////////////////////////////////
// Summary: CXTPTabCtrlButtonsis a CWnd derived class.  It is internally used in the CXTPTabBase class.
class _XTP_EXT_CLASS CXTPTabCtrlButtons: public CWnd
{
public:
	CXTPTabCtrlButtons();
	~CXTPTabCtrlButtons();

	BOOL Create(CXTPTabBase* pCtrlBase);

	int GetWidth();

	void ShowButtons(BOOL bShow);
	BOOL ShowButtons();
	void Refresh();
	void SubclassTabButtons(CWnd* pWnd);
	void SetButtonStyle(DWORD dwFlags);
	void UnSubclassTabButtons();

	CTabCtrl* GetTabCtrl() const;

private:
	CRect AdjustRect();
private:
	CXTPTabCtrlButton m_btnClose;
	CXTPTabCtrlButton m_btnLeft;
	CXTPTabCtrlButton m_btnRight;

	DWORD m_dwFlags;
	CTabCtrl* m_pTabCtrl;
	CXTPTabBase* m_pTabCtrlBase;
	BOOL m_bShow;

	HWND m_hwndSubclassed;
	HWND m_hwndPrimary;

private:

	afx_msg void OnPaint();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnMouseLeave();
	afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);

	BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
	DECLARE_MESSAGE_MAP()

	friend class CXTPTabBase;
	friend class CXTPTabCtrlButton;
};

AFX_INLINE CTabCtrl* CXTPTabCtrlButtons::GetTabCtrl() const {
	return m_pTabCtrl;
}

AFX_INLINE BOOL CXTPTabCtrlButtons::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

#endif // #if !defined(__XTPTABCTRLBUTTONS_H_)
