/*
 *
 *	ChartStandardAxis.h
 *
 *	Written by Cédric Moonen (cedric_moonen@hotmail.com)
 *
 *
 *
 *	This code may be used for any non-commercial and commercial purposes in a compiled form.
 *	The code may be redistributed as long as it remains unmodified and providing that the 
 *	author name and this disclaimer remain intact. The sources can be modified WITH the author 
 *	consent only.
 *	
 *	This code is provided without any garanties. I cannot be held responsible for the damage or
 *	the loss of time it causes. Use it at your own risks
 *
 *	An e-mail to notify me that you are using this code is appreciated also.
 *
 *
 */

#ifndef _CHARTSTANDARDAXIS_H_
#define _CHARTSTANDARDAXIS_H_

#include "ChartAxis.h"

//! Specialization of a CChartAxis class to display standard values.
class CChartStandardAxis : public CChartAxis
{
friend CChartCtrl;

public:
	//! Sets the tick increment.
	/**
		The tick increment is the value between two adjacents
		ticks on the axis.
		@param bAuto
			Specifies if the tick increment is automatically calculated.
		@param newIncrement
			The tick increment to use in manual mode.
	**/
	void SetTickIncrement(bool bAuto, double newIncrement);
	//! Gets the tick increment.
	/**
		The tick increment is the value between two adjacents
		ticks on the axis.
	**/
	double GetTickIncrement() const					{ return m_dTickIncrement; }

private:
	//! Default constructor
	CChartStandardAxis();
	//! Default destructor
	~CChartStandardAxis();

	double GetFirstTickValue() const;
	bool GetNextTickValue(double dCurrentTick, double& dNextTick) const;
	TChartString GetTickLabel(double TickValue) const;
	long ValueToScreenDiscrete(double Value) const;
	long GetTickPos(double TickVal) const;

	void RefreshTickIncrement();
	void RefreshFirstTick();

	//! Sets the number of decimals points.
	void SetDecimals(unsigned uDecimals)  { m_uDecCount = uDecimals; }

	//! Caches the value of the first tick.
	double m_dFirstTickValue;
	//! Indicates the space between ticks (in axis value).
	double m_dTickIncrement;		
	//! Number of decimals to display for tick labels.
	unsigned int m_uDecCount;	
};

#endif  // _CHARTSTANDARDAXIS_H_