// CXTPChartTitle.h
//
// This file is a part of the XTREME TOOLKIT PRO 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(__XTPCHARTTITLE_H__)
#define __XTPCHARTTITLE_H__
//}}AFX_CODEJOCK_PRIVATE

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

#include "XTPChartElement.h"
#include "Types/XTPChartTypes.h"
#include "Utils/XTPChartTextPainter.h"
#include "XTPChartDefines.h"

class CXTPChartDeviceContext;
class CXTPChartDeviceCommand;
class CXTPChartFont;
class CXTPChartElementView;
class CXTPChartContent;
class CXTPPropExchange;



enum XTPChartDocking
{
	xtpChartDockTop,
	xtpChartDockBottom,
	xtpChartDockLeft,
	xtpChartDockRight
};


//===========================================================================
// Summary:
//     This class represents a chart title.
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartTitle : public CXTPChartTextElement
{
	DECLARE_DYNAMIC(CXTPChartTitle)

public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartTitle object.
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartTitle();

	//-------------------------------------------------------------------------
	// Summary:
	//     Destroys a CXTPChartTitle object, handles cleanup
	//-------------------------------------------------------------------------
	virtual ~CXTPChartTitle();

public:


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to set the title visible/invisible.
	// Parameters:
	//     bVisible    - A BOOL value TRUE to set the title visible and
	//                   FALSE to hide the title.
	// Remarks:
	// See Also:
	//-------------------------------------------------------------------------
	void SetVisible(BOOL bVisible);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to to see whether the title is visible.
	// Returns:
	//     Returns a BOOL value , TRUE if the title is visible,
	//     FALSE if the title is invisible.
	// Remarks:
	// See Also:
	//-------------------------------------------------------------------------
	BOOL IsVisible() const;


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to set text of the title
	// Parameters:
	//     lpszTitle    - New text of the title.
	// Remarks:
	// See Also: GetText
	//-------------------------------------------------------------------------
	void SetText(LPCTSTR lpszTitle);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to get text of the title
	// Returns:
	//     Text of the title.
	// Remarks:
	// See Also: SetText
	//-------------------------------------------------------------------------
	CXTPChartString GetText() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to set custom text color of the title
	// Parameters:
	//     clrTextColor  - New text color of the title. Can be CXTPChartColor::Empty to use current Appearance color.
	// Remarks:
	// See Also: GetTextColor
	//-------------------------------------------------------------------------
	void SetTextColor(const CXTPChartColor& clrTextColor);


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get custom text color of the title
	// Returns:
	//     Text color of the title or CXTPChartColor::Empty if current Appearance color should be used.
	// Remarks:
	// See Also: SetTextColor
	//-------------------------------------------------------------------------
	CXTPChartColor GetTextColor() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get text color of the title
	// Returns:
	//     Text color of the title
	// Remarks:
	// See Also: GetTextColor
	//-------------------------------------------------------------------------
	CXTPChartColor GetActualTextColor() const;


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to set font for title
	// Parameters:
	//     pFont - New font to be set
	// Remarks:
	// See Also: GetFont
	//-------------------------------------------------------------------------
	void SetFont(CXTPChartFont* pFont);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get font for title
	// Returns:
	//     Pointer to CXTPChartFont object that holds font information
	// Remarks:
	// See Also: SetFont
	//-------------------------------------------------------------------------
	CXTPChartFont* GetFont() const;


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to set docking position of the title
	// Parameters:
	//     nDocking - docking position of title, it can be one of the following -
	//                xtpChartDockTop, xtpChartDockBottom, xtpChartDockLeft, xtpChartDockRight.
	// Remarks:
	// See Also: GetDocking
	//-------------------------------------------------------------------------
	void SetDocking(XTPChartDocking nDocking);


	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get docking position of the title
	// Returns :
	//     Docking position of title, it can be one of the following -
	//                xtpChartDockTop, xtpChartDockBottom, xtpChartDockLeft, xtpChartDockRight.
	// Remarks:
	// See Also: SetDocking
	//-------------------------------------------------------------------------
	XTPChartDocking GetDocking() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to set indent between 2 titles
	// Parameters:
	//     nIndent - New indent to be set
	// Remarks:
	// See Also: GetIndent
	//-------------------------------------------------------------------------
	void SetIndent(int nIndent);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get indent between 2 titles
	// Returns:
	//     Indent between 2 charts
	// Remarks:
	// See Also: GetIndent
	//-------------------------------------------------------------------------
	int GetIndent() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to set text alignment of the title
	// Parameters:
	//     nAlignment - New text alignment to be set.
	//                  It can be one of the following - xtpChartAlignNear, xtpChartAlignCenter, xtpChartAlignFar
	// Remarks:
	// See Also: GetAlignment
	//-------------------------------------------------------------------------
	void SetAlignment(XTPChartStringAlignment nAlignment);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to get text alignment of the title
	// Parameters:
	//     Text alignment of the title.
	//     It can be one of the following - xtpChartAlignNear, xtpChartAlignCenter, xtpChartAlignFar
	// Remarks:
	// See Also: SetAlignment
	//-------------------------------------------------------------------------
	XTPChartStringAlignment GetAlignment() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to set the antialiasing ON or OFF.Antialiasing is
	//     the smoothing of sharp edges of text and drawing.
	// Parameters:
	//     bAntialiasing - A BOOL value TRUE to set the antialiasing ON and
	//                   FALSE to OFF the anitialiasing operation.
	// Remarks:
	// See Also:
	//-------------------------------------------------------------------------
	void SetAntialiasing(BOOL bAntialiasing);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this function to get whether antialiasing is enabled or not.
	//     Antialiasing is the smoothing of sharp edges of text and drawing.
	// Returns:
	//     Returns boolean TRUE if the antialiasing is turned on FALSE if the
	//     antialiasing is turned off.
	// Remarks:
	// See Also:
	//-------------------------------------------------------------------------
	BOOL GetAntialiasing() const;

public:
	//-------------------------------------------------------------------------
	// Summary:
	//     This method is calculates text angle according current docking position
	// See Also: GetDocking
	//-------------------------------------------------------------------------
	int GetTextAngle() const;

public:

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to Store/Load the properties of title object
	//      using the specified data object.
	// Parameters:
	//     pPX - Source or destination CXTPPropExchange data object reference.
	// Remarks:
	//     This member function is used to store or load property data to or
	//     from a storage.
	//-----------------------------------------------------------------------
	void DoPropExchange(CXTPPropExchange* pPX);

public:
//{{AFX_CODEJOCK_PRIVATE

	virtual CXTPChartElementView* CreateView(CXTPChartDeviceContext* pDC, CXTPChartElementView* pParentView);
	CPoint CalcOrigin(CRect bounds, CRect startBounds, CRect rect);
	XTPChartNearTextPosition GetNearTextPosition();
//}}AFX_CODEJOCK_PRIVATE


protected:
	friend class CXTPChartTitleCollection;

	CXTPChartString m_strText;      // Text of the title.
	CXTPChartColor m_clrTextColor;  // Text color
	BOOL m_bVisible;                // TRUE if title is visible
	CXTPChartFont* m_pFont;         // Font of the title
	BOOL m_bAntialiasing;           // Antialiasing flag
	XTPChartDocking m_nDocking;     // Current docking position of the title
	int m_nIndent;                  // Indent between 2 titles
	int m_nInnerIndent;             // Inner indent
	XTPChartStringAlignment m_nAlignment;   // Text alignment
};


//===========================================================================
// Summary:
//     CXTPChartTitleCollection represents collection of chart titles.
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartTitleCollection : public CXTPChartElementCollection
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartTitleCollection object.
	// Parameters:
	//     pOwner - Owner object
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartTitleCollection(CXTPChartElement* pOwner);

	//-------------------------------------------------------------------------
	// Summary:
	//     Destroys a CXTPChartTitleCollection object, handles cleanup
	//-------------------------------------------------------------------------
	virtual ~CXTPChartTitleCollection();

public:

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this method to add new title
	// Parameters:
	//     pTitle - New title to add
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartTitle* Add(CXTPChartTitle* pTitle);

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this method to get title by its index
	// Parameters:
	//     nIndex - Index of title to get
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartTitle* GetAt(int nIndex) const;

public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Call this member function to Store/Load the properties of title object
	//      using the specified data object.
	// Parameters:
	//     pPX - Source or destination CXTPPropExchange data object reference.
	// Remarks:
	//     This member function is used to store or load property data to or
	//     from a storage.
	//-----------------------------------------------------------------------
	virtual void DoPropExchange(CXTPPropExchange* pPX);

public:

//{{AFX_CODEJOCK_PRIVATE
	void CreateView(CXTPChartDeviceContext* pDC, CXTPChartElementView* pParentView);
	void CalculateView(CXTPChartDeviceContext* pDC, CRect& rcChart, CXTPChartElementView* pParentView);
//}}AFX_CODEJOCK_PRIVATE



protected:
	friend class CXTPChartContent;
};


AFX_INLINE CXTPChartTitle* CXTPChartTitleCollection::GetAt(int nIndex) const {
	return nIndex >= 0 && nIndex < m_arrElements.GetSize() ? (CXTPChartTitle*)m_arrElements.GetAt(nIndex) : NULL;
}


AFX_INLINE CXTPChartString CXTPChartTitle::GetText() const {
	return m_strText;
}
AFX_INLINE CXTPChartFont* CXTPChartTitle::GetFont() const {
	return m_pFont;
}
AFX_INLINE XTPChartDocking CXTPChartTitle::GetDocking() const {
	return m_nDocking;
}
AFX_INLINE int CXTPChartTitle::GetIndent() const {
	return m_nIndent;
}
AFX_INLINE XTPChartStringAlignment CXTPChartTitle::GetAlignment() const {
	return m_nAlignment;
}

AFX_INLINE void CXTPChartTitle::SetAntialiasing(BOOL bAntialiasing) {
	m_bAntialiasing = bAntialiasing;
	OnChartChanged();
}
AFX_INLINE  BOOL CXTPChartTitle::GetAntialiasing() const {
	return m_bAntialiasing;
}
AFX_INLINE  BOOL CXTPChartTitle::IsVisible() const {
	return m_bVisible;
}
AFX_INLINE  void CXTPChartTitle::SetVisible(BOOL bVisible) {
	m_bVisible = bVisible;
	OnChartChanged();
}



#endif //#if !defined(__XTPCHARTTITLE_H__)
