#ifndef AXISITEM_H
#define AXISITEM_H

#include <QGraphicsItem>
#include <QVector>
#include <QLocale>
#include <QFont>
#include "common/range.h"

class AxisItem : public QGraphicsItem
{
public:
	enum Type {X, Y};

	AxisItem(Type type, QGraphicsItem *parent = 0);

	/* Note: The items position is at the 0 point of the axis line, not at the
	   top-left point of the bounding rect as usual */
	QRectF boundingRect() const {return _boundingRect;}
	void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
	  QWidget *widget);

	void setRange(const RangeF &range);
	void setSize(qreal size);
	void setZoom(qreal zoom) {_zoom = zoom;}

	QSizeF margin() const;
	QList<qreal> ticks() const;

private:
	struct Tick {
		double value;
		QRect boundingBox;
	};

	void updateBoundingRect();

	Type _type;
	RangeF _range;
	qreal _size;
	QVector<Tick> _ticks;
	QRectF _boundingRect;
	QFont _font;
	QLocale _locale;
	qreal _zoom;
};

#endif // AXISITEM_H
