#include "axisitem_p.h" #include "qchartaxis.h" #include #include #define LABEL_PADDING 5 QTCOMMERCIALCHART_BEGIN_NAMESPACE AxisItem::AxisItem(QChartAxis* axis,AxisType type,QGraphicsItem* parent) : ChartItem(parent), m_axis(axis), m_ticks(4), m_type(type) { //initial initialization handleAxisChanged(); } AxisItem::~AxisItem() { } QRectF AxisItem::boundingRect() const { return m_rect; } /* void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget) { if (!m_rect.isValid()) return; if(m_type==X_AXIS) { const qreal deltaX = m_rect.width() / m_ticks; for (int i = 0; i <= m_ticks; ++i) { int x = i * deltaX + m_rect.left(); if(i==0) x--; if(i==m_ticks) x++; qreal label = m_plotDomain.m_minX + (i * m_plotDomain.spanX() / m_ticks); painter->drawLine(x, m_rect.top()-1, x, m_rect.bottom()+1); // painter->drawLine(x, m_rect.bottom()-1, x, m_rect.bottom()-1 + 5); painter->drawText(x - 50, m_rect.bottom() + 5, 100, 20,Qt::AlignHCenter | Qt::AlignTop, QString::number(label)); } } if(m_type==Y_AXIS) { const qreal deltaY = (m_rect.height()) / m_ticks; for (int j = 0; j <= m_ticks; ++j) { int y = j * -deltaY + m_rect.bottom(); if(j==0) y++; if(j==m_ticks) y--; qreal label = m_plotDomain.m_minY + (j * m_plotDomain.spanY() / m_ticks); painter->drawLine(m_rect.left()-1, y, m_rect.right()+1, y); //painter->drawLine(m_rect.left() - 5, y, m_rect.left(), y); //TODO : margin = 50 ; painter->drawText(m_rect.left() - 50, y - 10, 50 - 5, 20, Qt::AlignRight | Qt::AlignVCenter, QString::number(label)); } } //painter->drawRect(m_rect.adjusted(0, 0, -1, -1)); } */ void AxisItem::createItems() { if(!m_rect.isValid()) return; switch (m_type) { case X_AXIS: { const qreal deltaX = m_rect.width() / m_ticks; for (int i = 0; i <= m_ticks; ++i) { int x = i * deltaX + m_rect.left(); qreal label = m_domain.m_minX + (i * m_domain.spanX()/ m_ticks); m_grid<boundingRect().center(); text->setPos(x - center.x(), m_rect.bottom() + LABEL_PADDING); //text->rotate(-45); m_labels<boundingRect().center(); text->setPos(m_rect.left() - text->boundingRect().width() - LABEL_PADDING , y-center.y()); m_labels< } void AxisItem::handleDomainChanged(const Domain& domain) { m_domain = domain; clear(); createItems(); } void AxisItem::handleGeometryChanged(const QRectF& rect) { Q_ASSERT(rect.isValid()); m_rect = rect; clear(); createItems(); } //TODO "nice numbers algorithm" #include "moc_axisitem_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE