text: // XTPChartAxisConstantLines.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(__XTPCHARTAXISCONSTANTLINES_H__)
  #define __XTPCHARTAXISCONSTANTLINES_H__
  //}}AFX_CODEJOCK_PRIVATE
  
  #if _MSC_VER >= 1000
  #pragma once
  #endif // _MSC_VER >= 1000
  
  #include "../XTPChartElement.h"
  #include "../Types/XTPChartTypes.h"
  #include "../XTPChartDefines.h"
  #include "../XTPChartLegend.h"
  
  class CXTPChartAxis;
  class CXTPChartLineStyle;
  class CXTPChartLineStyle;
  
  //===========================================================================
  // Summary:
  //     CXTPChartAxisConstantLine is a hybrid object derived from CXTPChartTextElement
  //     and CXTPChartLegendItem, this class represents a constant line parallel
  //     to an axis.Normally this class is own by an axis object(CXTPChartaxis).
  //
  // Remarks:
  //
  //===========================================================================
  class _XTP_EXT_CLASS CXTPChartAxisConstantLine : public CXTPChartTextElement, public CXTPChartLegendItem
  {
  	DECLARE_DYNCREATE(CXTPChartAxisConstantLine)
  
  public:
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Constructs a CXTPChartAxisConstantLine object.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartAxisConstantLine();
  
  	//-------------------------------------------------------------------------
  	// Summary:
  	//     Destroys a CXTPChartAxisConstantLine object, handles cleanup
  	//-------------------------------------------------------------------------
  	virtual ~CXTPChartAxisConstantLine();
  
  public:
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to set the line visible.
  	// Parameters:
  	//     bVisible - BOOL, TRUE value for set the line visible and FALSE
  	//     to hide the constant line.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetVisible(BOOL bVisible);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to know whether the axis constat line is visible or not.
  	// Return:
  	//     BOOL value TRUE  if the line visible and FALSE if the line is invisible.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	BOOL IsVisible() const;
  
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to set the corresponding legend item visible or not.
  	// Parameters:
  	//     bVisible - BOOL, TRUE value for set the legend visible and FALSE
  	//     to hide the legend.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetLegendVisible(BOOL bVisible);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to know whether the corresponding legend item is visible or not.
  	// Returns:
  	//     BOOL value TRUE if the legend item visible and FALSE if the legend item invisible.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	BOOL IsLegendVisible() const;
  
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to set the text of the contant line legend item.
  	// Parameters:
  	//     lpszTitle - The string value for the new text, its type is CXTPChartString.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetText(const CXTPChartString& lpszTitle);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to get the text of the contant line legend item.
  	// Returns:
  	//     The string value for the legend item text, its type is CXTPChartString.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartString GetText() const;
  
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to set the text color of the contant line legend item.
  	// Parameters:
  	//     clrTextColor - The CXTPChartColor value for the text color.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetTextColor(const CXTPChartColor& clrTextColor);
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to get the text color of the contant line legend item.
  	// Returns:
  	//     The CXTPChartColor value for the text color.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartColor GetTextColor() const;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to get the actual text color of the contant line legend item.
  	// Returns:
  	//     The CXTPChartColor value for the actual text color.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartColor GetActualTextColor() const;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to get the font of the contant line legend item text.
  	// Returns:
  	//     The CXTPChartFont value for the font used to render the text.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartFont* GetFont() const;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to set the font of the contant line legend item text.
  	// Parameters:
  	//     pFont - The CXTPChartFont value for the font to be used to render the text.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetFont(CXTPChartFont* pFont);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to set the text alignment of the contant line legend item text.
  	// Parameters:
  	//     nAlignment - The enumerated value for the text alignment, the common alignments are
  	//                  near, far and center.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetAlignment(XTPChartStringAlignment nAlignment);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to get the alignment of the contant line legend item text.
  	// Returns:
  	//     The XTPChartStringAlignment enumeration corresponding to the chosen alignment.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	XTPChartStringAlignment GetAlignment() const;
  
  	//-------------------------------------------------------------------------
  	// Summary:
  	//     Call this function to set the antialiasing ON or OFF.Antialiasing is
  	//     the smooothing 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 smooothing 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;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to get the legend name.
  	// Returns:
  	//     The string value for the legend name.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartString GetLegendName() const;
  
  	void SetLegendName(const CXTPChartString& strName);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to get the constant line style.
  	// Returns:
  	//     The pointer to an object of type CXTPChartLineStyle.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartLineStyle* GetLineStyle() const;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to get the value of the constant line in the axis.
  	// Returns:
  	//     A string denoting the axis value.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartString GetAxisValue() const;
  	double GetAxisValueInternal() const;
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to set the value of the constant line in the axis.
  	// Parameters:
  	//     lpszValue - A string denoting the axis value.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	void SetAxisValue(LPCTSTR lpszValue);
  	void SetAxisValue(double dValue);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Use this function to get the value of the actual color of the constant line.
  	// Returns:
  	//     A CXTPChartColor object denoting the ARGB value.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartColor GetActualColor() const;
  
  
  	BOOL IsShowBehind() const;
  	void SetShowBehind(BOOL bShowBehind);
  
  	void ShowTextBelow(BOOL bShowTextBelow);
  	BOOL IsTextBelow() const;
  
  	CXTPChartColor GetColor() const;
  	void SetColor(const CXTPChartColor& color);
  
  public:
  	void DoPropExchange(CXTPPropExchange* pPX);
  
  protected:
  
  	//-------------------------------------------------------------------------
  	// Summary:
  	//     This function create a CXTPChartDeviceCommand object, this object
  	//     represents the rendering of the legend item.
  	// Parameters:
  	//     pDC       - Pointer to a CXTPChartDeviceContext object.
  	//     rcBounds  - The bounding rectange.
  	// Returns:
  	//     Returns CXTPChartDeviceCommand object, this polymorphic object handles
  	//     the rendering of an element in the chart.Here it handles the drawing
  	//     of the the legend item.
  	// Remarks:
  	// See Also:
  	//-------------------------------------------------------------------------
  	virtual CXTPChartDeviceCommand* CreateLegendDeviceCommand(CXTPChartDeviceContext* pDC, CRect rcBounds);
  
  #ifdef _XTP_ACTIVEX
  //{{AFX_CODEJOCK_PRIVATE
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  	DECLARE_OLETYPELIB_EX(CXTPChartAxisConstantLine);
  
  	BSTR OleGetText();
  	void OleSetText(LPCTSTR lpszText);
  	VARIANT OleGetAxisValue();
  	void OleSetAxisValue(const VARIANT& var);
  
  	BOOL OleGetLegendVisible();
  	void OleSetLegendVisible(BOOL bValue);
  	BOOL OleGetVisible();
  	void OleSetVisible(BOOL bValue);
  	BOOL OleGetShowTextBelow();
  	void OleSetShowTextBelow(BOOL bValue);
  	BOOL OleGetAlignment();
  	void OleSetAlignment(int nValue);
  	LPDISPATCH OleGetLineStyle();
  	LPDISPATCH OleGetFont();
  
  	OLE_COLOR OleGetColor();
  	OLE_COLOR OleGetTextColor();
  	void OleSetColor(OLE_COLOR clr);
  	void OleSetTextColor(OLE_COLOR clr);
  
  
  //}}AFX_CODEJOCK_PRIVATE
  #endif
  
  
  protected:
  	BOOL m_bLegendVisible;                  //TRUE if the legend is visible, FALSE if invisible.
  	BOOL m_bVisible;                        //TRUE if the constant line is visible, FALSE if invisible.
  
  	CXTPChartString m_strText;               //The text of the constant line legend item.
  	CXTPChartString m_strLegendName;         //The legend name.
  	CXTPChartString m_strAxisValue;          //The string value of constant line parallel to an axis.
  	double m_dAxisValue;
  
  	CXTPChartColor m_clrTextColor;           //The text color of the constant line legend item.
  	CXTPChartColor m_clrColor;               //The color of the constant line.
  
  	XTPChartStringAlignment m_nAlignment;    //The text alignment of the constant line legend item.
  	BOOL m_bAntialiasing;                   //TRUE if antialiasing is used, FALSE if not using antialiasing.
  	CXTPChartFont* m_pFont;                  //The font used for the text of the constant line legend item.
  	BOOL m_bShowTextBelow;                  //TRUE if the text is below, FALSE if not.
  	BOOL m_bShowBehind;                     //TRUE if the text is behind, FALSE if not.
  
  	CXTPChartLineStyle* m_pLineStyle;        //The chart line style object.
  
  	friend class CXTPChartAxisConstantLines;
  };
  
  //===========================================================================
  // Summary:
  //     This class encapsulates a collection of CXTPChartAxisConstantLine objects.
  // Remarks:
  //
  class _XTP_EXT_CLASS CXTPChartAxisConstantLines : public CXTPChartElementCollection
  {
  public:
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Constructs a CXTPChartAxisConstantLines object.
  	// Parameters:
  	//     pAxis - The pointer to a CXTPChartAxis object.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartAxisConstantLines(CXTPChartAxis* pAxis);
  
  	//-------------------------------------------------------------------------
  	// Summary:
  	//     Destroys a CXTPChartAxisConstantLines object, handles cleanup
  	//-------------------------------------------------------------------------
  	virtual ~CXTPChartAxisConstantLines();
  
  
  public:
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     This function a new constant line to the collection of lines.
  	// Parameters:
  	//     pConstantLine - The pointer to a CXTPChartAxisConstantLine object.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartAxisConstantLine* Add(CXTPChartAxisConstantLine* pConstantLine);
  
  	//-----------------------------------------------------------------------
  	// Summary:
  	//     Call this function to get the constant line object at a particular
  	//     index in the collection.
  	// Parameters:
  	//     nIndex - The zero based index of the of item in the collection.
  	// Returns:
  	//     The pointer to a CXTPChartAxisConstantLine object, at the index selected.
  	// Remarks:
  	//-----------------------------------------------------------------------
  	CXTPChartAxisConstantLine* GetAt(int nIndex) const;
  
  public:
  	void DoPropExchange(CXTPPropExchange* pPX);
  
  public:
  #ifdef _XTP_ACTIVEX
  //{{AFX_CODEJOCK_PRIVATE
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  
  	DECLARE_OLETYPELIB_EX(CXTPChartAxisConstantLines);
  
  	afx_msg long OleGetItemCount();
  	afx_msg LPDISPATCH OleGetItem(long nIndex);
  	DECLARE_ENUM_VARIANT(CXTPChartAxisConstantLines)
  
  	afx_msg LPDISPATCH OleAdd(LPCWSTR lpszTitle);
  //}}AFX_CODEJOCK_PRIVATE
  #endif
  
  protected:
  };
  
  
  AFX_INLINE CXTPChartAxisConstantLine* CXTPChartAxisConstantLines::GetAt(int nIndex) const {
  	return nIndex >= 0 && nIndex < m_arrElements.GetSize() ? (CXTPChartAxisConstantLine*)m_arrElements.GetAt(nIndex) : NULL;
  }
  
  
  AFX_INLINE CXTPChartString CXTPChartAxisConstantLine::GetText() const {
  	return m_strText;
  }
  AFX_INLINE CXTPChartFont* CXTPChartAxisConstantLine::GetFont() const {
  	return m_pFont;
  }
  AFX_INLINE XTPChartStringAlignment CXTPChartAxisConstantLine::GetAlignment() const {
  	return m_nAlignment;
  }
  
  AFX_INLINE void CXTPChartAxisConstantLine::SetAntialiasing(BOOL bAntialiasing) {
  	m_bAntialiasing = bAntialiasing;
  	OnChartChanged();
  }
  AFX_INLINE BOOL CXTPChartAxisConstantLine::GetAntialiasing() const {
  	return m_bAntialiasing;
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetVisible(BOOL bVisible) {
  	m_bVisible = bVisible;
  	OnChartChanged();
  }
  AFX_INLINE BOOL CXTPChartAxisConstantLine::IsVisible() const {
  	return m_bVisible;
  }
  AFX_INLINE CXTPChartLineStyle* CXTPChartAxisConstantLine::GetLineStyle() const {
  	return m_pLineStyle;
  }
  AFX_INLINE CXTPChartString CXTPChartAxisConstantLine::GetAxisValue() const {
  	return m_strAxisValue;
  }
  AFX_INLINE double CXTPChartAxisConstantLine::GetAxisValueInternal() const {
  	return m_dAxisValue;
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetAxisValue(LPCTSTR lpszValue) {
  	m_strAxisValue = lpszValue;
  	OnChartChanged();
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetAxisValue(double dValue) {
  	m_dAxisValue = dValue;
  	m_strAxisValue.Empty();
  	OnChartChanged();
  }
  AFX_INLINE BOOL CXTPChartAxisConstantLine::IsLegendVisible() const {
  	return m_bLegendVisible;
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetLegendVisible(BOOL bLegendVisible) {
  	m_bLegendVisible = bLegendVisible;
  	OnChartChanged();
  }
  AFX_INLINE void CXTPChartAxisConstantLine::ShowTextBelow(BOOL bShowTextBelow) {
  	m_bShowTextBelow = bShowTextBelow;
  	OnChartChanged();
  }
  AFX_INLINE BOOL CXTPChartAxisConstantLine::IsTextBelow() const {
  	return m_bShowTextBelow;
  }
  AFX_INLINE CXTPChartColor CXTPChartAxisConstantLine::GetColor() const {
  	return m_clrColor;
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetColor(const CXTPChartColor& color) {
  	m_clrColor = color;
  	OnChartChanged();
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetLegendName(const CXTPChartString& strName) {
  	m_strLegendName = strName;
  	OnChartChanged();
  }
  AFX_INLINE BOOL CXTPChartAxisConstantLine::IsShowBehind() const {
  	return m_bShowBehind;
  }
  AFX_INLINE void CXTPChartAxisConstantLine::SetShowBehind(BOOL bShowBehind) {
  	m_bShowBehind = bShowBehind;
  	OnChartChanged();
  }
  
  #endif //#if !defined(__XTPCHARTAXISCONSTANTLINES_H__)
  