// XTPChartLineDeviceCommand.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(__XTPCHARTLINEDEVICECOMMAND_H__)
#define __XTPCHARTLINEDEVICECOMMAND_H__
//}}AFX_CODEJOCK_PRIVATE

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

#include "XTPChartDeviceCommand.h"
#include "../XTPChartDefines.h"

class _XTP_EXT_CLASS CXTPChartLineDeviceCommand : public CXTPChartDeviceCommand
{
protected:
	CXTPChartLineDeviceCommand(const CXTPChartDiagramPoint& p1, const CXTPChartDiagramPoint& p2, int thickness);

	virtual CXTPChartElement* HitTest(CPoint point, CXTPChartElement* pParent) const;

protected:
	CXTPChartDiagramPoint m_p1;  //The first point.
	CXTPChartDiagramPoint m_p2;  //The second point.
	int m_nThickness;           //The thickness of the line.
};
//===========================================================================
// Summary:
//     This class represents a solid line device command, which is a kind of
//     CXTPChartDeviceCommand It specifically handles the rendering of solid
//     lines in a chart.
//
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartSolidLineDeviceCommand : public CXTPChartLineDeviceCommand
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartSolidLineDeviceCommand object.
	// Parameters:
	//     p1        - The first point of the line.
	//     p2        - The second point of the line
	//     color     - The color of the line.
	//     thickness - The thickness of the line.
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartSolidLineDeviceCommand(const CXTPChartDiagramPoint& p1, const CXTPChartDiagramPoint& p2, const CXTPChartColor& color, int thickness);

protected:
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The GDI device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartDeviceContext* pDC);

	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The OpenGL device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartOpenGLDeviceContext* pDC);


protected:
	CXTPChartColor m_color;      //The line color.
};

//===========================================================================
// Summary:
//     This class represents a solid polyline device command, which is a kind of
//     CXTPChartDeviceCommand It specifically handles the rendering of solid
//     lines in a chart.
//
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartSolidPolylineDeviceCommand : public CXTPChartDeviceCommand
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartSolidPolylineDeviceCommand object.
	// Parameters:
	//     p1        - The first point of the line.
	//     p2        - The second point of the line
	//     color     - The color of the line.
	//     thickness - The thickness of the line.
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartSolidPolylineDeviceCommand(const CXTPChartPoints& p, const CXTPChartColor& color, int thickness);

protected:
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The GDI device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartDeviceContext* pDC);

protected:
	CXTPChartColor m_color;      //The line color.
	int m_nThickness;       //The thickness of the spline.
	CXTPChartPoints m_p;     //The points which form the polyline.
};


class _XTP_EXT_CLASS CXTPChartSplineDeviceCommand : public CXTPChartDeviceCommand
{
protected:
	CXTPChartSplineDeviceCommand(const CXTPChartPoints& p, int thickness);

protected:
	CXTPChartElement* HitTest(CPoint point, CXTPChartElement* pParent) const;

protected:
	CXTPChartPoints m_p;     //The points which form the spline.
	int m_nThickness;       //The thickness of the spline.
};
//===========================================================================
// Summary:
//     This class represents a solid spline device command, which is a kind of
//     CXTPChartDeviceCommand It specifically handles the rendering of solid
//     splines in a chart.
//
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartSolidSplineDeviceCommand : public CXTPChartSplineDeviceCommand
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartSolidLineDeviceCommand object.
	// Parameters:
	//     p         - The points which forms the spline.
	//     color     - The color of the spline.
	//     thickness - The thickness of the spline.
	// Remarks:
	//-----------------------------------------------------------------------
	CXTPChartSolidSplineDeviceCommand(const CXTPChartPoints& p, const CXTPChartColor& color, int thickness);

protected:
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The GDI device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartDeviceContext* pDC);
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The OpenGL device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartOpenGLDeviceContext* pDC);

protected:
	CXTPChartColor m_color;  //The spline color.

};

//===========================================================================
// Summary:
//     This class represents a dash line device command, which is a kind of
//     CXTPChartDeviceCommand It specifically handles the rendering of solid
//     lines in a chart.
//
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartDashedLineDeviceCommand : public CXTPChartLineDeviceCommand
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartSolidLineDeviceCommand object.
	// Parameters:
	//     p1         - The first point of the line.
	//     p2         - The second point of the line
	//     color      - The color of the line.
	//     thickness  - The thickness of the line.
	//     nDashStyle - The dash style.
	// Remarks:
	//     The dash line style are the following.
	//     Empty style, invisible.
	//     Solid line style.
	//     Dash line style.
	//     Dot line style.
	//     Alternate dash and dot line style.
	//     Dash dot dot line style.
	//-----------------------------------------------------------------------
	CXTPChartDashedLineDeviceCommand(const CXTPChartDiagramPoint& p1, const CXTPChartDiagramPoint& p2, const CXTPChartColor& color, int thickness, XTPChartDashStyle nDashStyle);

protected:
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The GDI device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartDeviceContext* pDC);

protected:
	CXTPChartColor m_color;          //The line color.
	XTPChartDashStyle m_nDashStyle;  //The dash style.
};

//===========================================================================
// Summary:
//     This class represents a dashed spline device command, which is a kind of
//     CXTPChartDeviceCommand It specifically handles the rendering of dashed
//     splines in a chart.
//
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartDashedSplineDeviceCommand : public CXTPChartSplineDeviceCommand
{
public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPChartSolidLineDeviceCommand object.
	// Parameters:
	//     p         - The points which forms the spline.
	//     color     - The color of the spline.
	//     thickness - The thickness of the spline.
	//     nDashStyle - The dash style.
	// Remarks:
	//     The dash line style are the following.
	//     Empty style, invisible.
	//     Solid line style.
	//     Dash line style.
	//     Dot line style.
	//     Alternate dash and dot line style.
	//     Dash dot dot line style.
	//-----------------------------------------------------------------------
	CXTPChartDashedSplineDeviceCommand(const CXTPChartPoints& p, const CXTPChartColor& color, int thickness, XTPChartDashStyle nDashStyle);

protected:
	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The GDI device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartDeviceContext* pDC);

	//-----------------------------------------------------------------------
	// Summary:
	//     This is a virtual function override of base class CXTPChartDeviceContext,
	//     act polymorphically to do the actual drawing of the chart element, to which
	//     this device command is associated with.
	// Parameters:
	//     pDC      - The OpenGL device context of the chart.
	// Remarks:
	//-----------------------------------------------------------------------
	void ExecuteOverride(CXTPChartOpenGLDeviceContext* pDC);

protected:
	CXTPChartColor m_color;          //The spline color.
	XTPChartDashStyle m_nDashStyle;  //The dash style.
};



#endif //#if !defined(__XTPCHARTLINEDEVICECOMMAND_H__)
