##// END OF EJS Templates
Values and Intervals axes ranges are now initialized only if they haven't been preset earlier
Values and Intervals axes ranges are now initialized only if they haven't been preset earlier

File last commit:

r1698:da7242791c36
r1703:d83729eb88d8
Show More
xychart.cpp
223 lines | 5.9 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
Michal Klocek
Refactors animation handling for xyseries
r1217 **
** 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$
**
****************************************************************************/
Jani Honkonen
Add license headers
r794
Michal Klocek
Refactor xychartitem -> xychart
r1218 #include "xychart_p.h"
Michal Klocek
Add missing files from previous commit
r466 #include "qxyseries.h"
Michal Klocek
Adds big fat pimpl to series classes...
r938 #include "qxyseries_p.h"
Michal Klocek
Add missing files from previous commit
r466 #include "chartpresenter_p.h"
Michal Klocek
Animation refactor...
r530 #include "chartanimator_p.h"
Michal Klocek
Refactors Domain and Axis...
r1698 #include "domain_p.h"
Michal Klocek
Add missing files from previous commit
r466 #include <QPainter>
Marek Rosa
QXYSeries: support for removing data from model when using custom mapping
r1055 #include <QAbstractItemModel>
Marek Rosa
Mapper class added for xyseries and pieseries. Model support commented out for barseries for now.
r1164 #include "qxymodelmapper.h"
Michal Klocek
Refactors axis animation, line animations
r1241 #include <QDebug>
Michal Klocek
Add missing files from previous commit
r466
QTCOMMERCIALCHART_BEGIN_NAMESPACE
//TODO: optimize : remove points which are not visible
Michal Klocek
Refactor xychartitem -> xychart
r1218 XYChart::XYChart(QXYSeries *series, ChartPresenter *presenter):Chart(presenter),
Michal Klocek
Refactors animation handling for xyseries
r1217 m_minX(0),
m_maxX(0),
m_minY(0),
m_maxY(0),
m_series(series),
Michal Klocek
Refactors axis animation, line animations
r1241 m_animation(0),
m_dirty(true)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
Marek Rosa
XYModelMapper slots for series signals implemented
r1262 // QObject::connect(series->d_func(),SIGNAL(pointReplaced(int)),this,SLOT(handlePointReplaced(int)));
// QObject::connect(series->d_func(),SIGNAL(pointAdded(int)),this,SLOT(handlePointAdded(int)));
// QObject::connect(series->d_func(),SIGNAL(pointRemoved(int)),this,SLOT(handlePointRemoved(int)));
QObject::connect(series, SIGNAL(pointReplaced(int)), this,SLOT(handlePointReplaced(int)));
QObject::connect(series, SIGNAL(pointAdded(int)), this,SLOT(handlePointAdded(int)));
QObject::connect(series, SIGNAL(pointRemoved(int)), this,SLOT(handlePointRemoved(int)));
QObject::connect(this, SIGNAL(clicked(QPointF)), series,SIGNAL(clicked(QPointF)));
Michal Klocek
Refactors animation handling for xyseries
r1217 }
Michal Klocek
Refactors axis animation, line animations
r1241 void XYChart::setGeometryPoints(const QVector<QPointF>& points)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
m_points = points;
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::setClipRect(const QRectF &rect)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
m_clipRect = rect;
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::setAnimation(XYAnimation* animation)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Refactors animation handling for xyseries
r1217 m_animation=animation;
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactors axis animation, line animations
r1241 void XYChart::setDirty(bool dirty)
{
m_dirty=dirty;
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 QPointF XYChart::calculateGeometryPoint(const QPointF &point) const
Michal Klocek
Add missing files from previous commit
r466 {
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
qreal x = (point.x() - m_minX)* deltaX;
qreal y = (point.y() - m_minY)*-deltaY + m_size.height();
return QPointF(x,y);
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 QPointF XYChart::calculateGeometryPoint(int index) const
Michal Klocek
Add missing files from previous commit
r466 {
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
Michal Klocek
Fixes and improvments to series API...
r1057 const QList<QPointF>& vector = m_series->points();
qreal x = (vector[index].x() - m_minX)* deltaX;
qreal y = (vector[index].y() - m_minY)*-deltaY + m_size.height();
Michal Klocek
Add missing files from previous commit
r466 return QPointF(x,y);
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 QVector<QPointF> XYChart::calculateGeometryPoints() const
Michal Klocek
Add missing files from previous commit
r466 {
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
Michal Klocek
Fixes and improvments to series API...
r1057 QVector<QPointF> result;
result.resize(m_series->count());
const QList<QPointF>& vector = m_series->points();
Michal Klocek
Add missing files from previous commit
r466 for (int i = 0; i < m_series->count(); ++i) {
Michal Klocek
Fixes and improvments to series API...
r1057 qreal x = (vector[i].x() - m_minX)* deltaX;
qreal y = (vector[i].y() - m_minY)*-deltaY + m_size.height();
result[i].setX(x);
result[i].setY(y);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Fixes and improvments to series API...
r1057 return result;
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 QPointF XYChart::calculateDomainPoint(const QPointF &point) const
Michal Klocek
Adds clicked(Point) to lineSeries, changes visible points handling
r544 {
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
qreal x = point.x()/deltaX +m_minX;
qreal y = (point.y()-m_size.height())/(-deltaY)+ m_minY;
return QPointF(x,y);
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints,int index)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
adds QLineAnimation fixes
r1271
Michal Klocek
Refactors animation handling for xyseries
r1217 if (m_animation) {
Michal Klocek
adds QLineAnimation fixes
r1271 m_animation->setup(oldPoints, newPoints, index);
Michal Klocek
Refactors axis animation, line animations
r1241 setGeometryPoints(newPoints);
setDirty(false);
presenter()->startAnimation(m_animation);
Michal Klocek
Refactors animation handling for xyseries
r1217 }
else {
setGeometryPoints(newPoints);
updateGeometry();
Michal Klocek
Animation refactor...
r530 }
Michal Klocek
Add missing files from previous commit
r466 }
//handlers
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointAdded(int index)
Michal Klocek
Add missing files from previous commit
r466 {
Marek Rosa
All model related methods and members removed from the series. QML stuff commented out where complaining
r1230 Q_ASSERT(index<m_series->count());
Q_ASSERT(index>=0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Michal Klocek
Refactors axis animation, line animations
r1241 QVector<QPointF> points;
if(m_dirty) {
points = calculateGeometryPoints();
} else {
points = m_points;
QPointF point = calculateGeometryPoint(index);
points.insert(index, point);
}
updateChart(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 }
Marek Rosa
QXYSeries: support for adding data to model when using custom mapping
r1054
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointRemoved(int index)
Michal Klocek
Adds big fat pimpl to series classes...
r938 {
Michal Klocek
Refactors axis animation, line animations
r1241 Q_ASSERT(index<=m_series->count());
Q_ASSERT(index>=0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Michal Klocek
Refactors axis animation, line animations
r1241 QVector<QPointF> points;
Michal Klocek
Refactors animation handling for xyseries
r1217
Michal Klocek
Refactors axis animation, line animations
r1241 if(m_dirty) {
points = calculateGeometryPoints();
} else {
points = m_points;
points.remove(index);
}
updateChart(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointReplaced(int index)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Refactors axis animation, line animations
r1241 Q_ASSERT(index<m_series->count());
Q_ASSERT(index>=0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Michal Klocek
Refactors axis animation, line animations
r1241 QVector<QPointF> points;
Michal Klocek
Refactors animation handling for xyseries
r1217
Michal Klocek
Refactors axis animation, line animations
r1241 if(m_dirty) {
points = calculateGeometryPoints();
} else {
QPointF point = calculateGeometryPoint(index);
points = m_points;
points.replace(index,point);
}
updateChart(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactors Domain and Axis...
r1698 void XYChart::handleDomainUpdated()
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Refactors Domain and Axis...
r1698 m_minX=domain()->minX();
m_maxX=domain()->maxX();
m_minY=domain()->minY();
m_maxY=domain()->maxY();
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 if (isEmpty()) return;
Michal Klocek
Refactors axis animation, line animations
r1241
Michal Klocek
Add missing files from previous commit
r466 QVector<QPointF> points = calculateGeometryPoints();
Michal Klocek
Refactors animation handling for xyseries
r1217
updateChart(m_points,points);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handleGeometryChanged(const QRectF &rect)
Michal Klocek
Add missing files from previous commit
r466 {
Marek Rosa
XYSeries model with limits working.
r833 Q_ASSERT(rect.isValid());
m_size=rect.size();
m_clipRect=rect.translated(-rect.topLeft());
Michal Klocek
Refactor xychartitem -> xychart
r1218 m_origin=rect.topLeft();
Michal Klocek
Add missing files from previous commit
r466
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 if (isEmpty()) return;
Michal Klocek
Refactors axis animation, line animations
r1241
Marek Rosa
XYSeries model with limits working.
r833 QVector<QPointF> points = calculateGeometryPoints();
Michal Klocek
Refactors axis animation, line animations
r1241
Michal Klocek
Refactors animation handling for xyseries
r1217 updateChart(m_points,points);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 bool XYChart::isEmpty()
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Bugfixes for spline vector allocation issues
r1082 return !m_clipRect.isValid() || qFuzzyIsNull(m_maxX - m_minX) || qFuzzyIsNull(m_maxY - m_minY) || m_series->points().isEmpty();
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 #include "moc_xychart_p.cpp"
Michal Klocek
Add missing files from previous commit
r466
QTCOMMERCIALCHART_END_NAMESPACE