##// END OF EJS Templates
Ranges on values, intervals and datatime axes cannot be set to be invalid
Ranges on values, intervals and datatime axes cannot be set to be invalid

File last commit:

r1698:da7242791c36
r1728:0f94bbbf49ff
Show More
chartvaluesaxisy.cpp
128 lines | 4.0 KiB | text/x-c | CppLexer
/ src / axis / valuesaxis / chartvaluesaxisy.cpp
Marek Rosa
Added Chart classes for value and categories axis
r1555 /****************************************************************************
**
** Copyright (C) 2012 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
#include "chartvaluesaxisy_p.h"
#include "qabstractaxis.h"
#include "chartpresenter_p.h"
#include "chartanimator_p.h"
Michal Klocek
Refactors Domain and Axis...
r1698 #include "qvaluesaxis.h"
Marek Rosa
Added Chart classes for value and categories axis
r1555 #include <QGraphicsLayout>
#include <QDebug>
#include <QFontMetrics>
Marek Rosa
Removed generic chartaxis
r1561 #include <cmath>
Marek Rosa
Added Chart classes for value and categories axis
r1555
static int label_padding = 5;
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors Domain and Axis...
r1698 ChartValuesAxisY::ChartValuesAxisY(QAbstractAxis *axis,ChartPresenter *presenter) : ChartAxis(axis,presenter),
m_tickCount(0)
Marek Rosa
Added Chart classes for value and categories axis
r1555 {
}
ChartValuesAxisY::~ChartValuesAxisY()
{
}
QVector<qreal> ChartValuesAxisY::calculateLayout() const
{
Michal Klocek
Refactors Domain and Axis...
r1698 Q_ASSERT(m_tickCount>=2);
Marek Rosa
Added Chart classes for value and categories axis
r1555
QVector<qreal> points;
Michal Klocek
Refactors Domain and Axis...
r1698 points.resize(m_tickCount);
Marek Rosa
Added Chart classes for value and categories axis
r1555
Michal Klocek
Refactors Domain and Axis...
r1698 const qreal deltaY = m_rect.height()/(m_tickCount-1);
for (int i = 0; i < m_tickCount; ++i) {
Marek Rosa
Removed generic chartaxis
r1561 int y = i * -deltaY + m_rect.bottom();
points[i] = y;
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
Marek Rosa
Removed generic chartaxis
r1561
Marek Rosa
Added Chart classes for value and categories axis
r1555 return points;
}
void ChartValuesAxisY::updateGeometry()
{
Marek Rosa
Removed generic chartaxis
r1561 const QVector<qreal> &layout = ChartAxis::layout();
Marek Rosa
Added Chart classes for value and categories axis
r1555 m_minWidth = 0;
m_minHeight = 0;
if(layout.isEmpty()) return;
QStringList ticksList;
Michal Klocek
Refactor QChart API...
r1577 createNumberLabels(ticksList,m_min,m_max,layout.size());
Marek Rosa
Added Chart classes for value and categories axis
r1555
QList<QGraphicsItem *> lines = m_grid->childItems();
QList<QGraphicsItem *> labels = m_labels->childItems();
QList<QGraphicsItem *> shades = m_shades->childItems();
QList<QGraphicsItem *> axis = m_axis->childItems();
Q_ASSERT(labels.size() == ticksList.size());
Q_ASSERT(layout.size() == ticksList.size());
Marek Rosa
Removed generic chartaxis
r1561 qreal height = 2*m_rect.bottom();
Marek Rosa
Added Chart classes for value and categories axis
r1555 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
Marek Rosa
Removed generic chartaxis
r1561 lineItem->setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
Marek Rosa
Added Chart classes for value and categories axis
r1555
for (int i = 0; i < layout.size(); ++i) {
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
Marek Rosa
Removed generic chartaxis
r1561 lineItem->setLine(m_rect.left() , layout[i], m_rect.right(), layout[i]);
Marek Rosa
Added Chart classes for value and categories axis
r1555 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
Marek Rosa
Removed generic chartaxis
r1561
Marek Rosa
Added Chart classes for value and categories axis
r1555 labelItem->setText(ticksList.at(i));
const QRectF& rect = labelItem->boundingRect();
Marek Rosa
Removed generic chartaxis
r1561
Marek Rosa
Added Chart classes for value and categories axis
r1555 QPointF center = rect.center();
labelItem->setTransformOriginPoint(center.x(), center.y());
Marek Rosa
Removed generic chartaxis
r1561 labelItem->setPos(m_rect.left() - rect.width() - label_padding , layout[i]-center.y());
Marek Rosa
Added Chart classes for value and categories axis
r1555
Marek Rosa
Removed generic chartaxis
r1561 if(labelItem->pos().y()+rect.height()>height) {
Marek Rosa
Added Chart classes for value and categories axis
r1555 labelItem->setVisible(false);
lineItem->setVisible(false);
Marek Rosa
Removed generic chartaxis
r1561 }
else {
Marek Rosa
Added Chart classes for value and categories axis
r1555 labelItem->setVisible(true);
lineItem->setVisible(true);
Marek Rosa
Removed generic chartaxis
r1561 height=labelItem->pos().y();
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
Marek Rosa
Removed generic chartaxis
r1561
m_minWidth=qMax(rect.width()+label_padding,m_minWidth);
m_minHeight+=rect.height();
Marek Rosa
Added Chart classes for value and categories axis
r1555
if ((i+1)%2 && i>1) {
QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
Marek Rosa
Removed generic chartaxis
r1561 rectItem->setRect(m_rect.left(),layout[i],m_rect.width(),layout[i-1]-layout[i]);
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
Marek Rosa
Removed generic chartaxis
r1561 lineItem->setLine(m_rect.left()-5,layout[i],m_rect.left(),layout[i]);
Marek Rosa
Added Chart classes for value and categories axis
r1555 }
}
Michal Klocek
Refactors Domain and Axis...
r1698 void ChartValuesAxisY::handleAxisUpdated()
{
//TODO:: fix this
QValuesAxis* axis = qobject_cast<QValuesAxis*>(m_chartAxis);
m_tickCount = axis->ticksCount();
ChartAxis::handleAxisUpdated();
}
Marek Rosa
Added Chart classes for value and categories axis
r1555 QTCOMMERCIALCHART_END_NAMESPACE