##// END OF EJS Templates
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series

File last commit:

r625:d16a64d75da0
r630:dd8db9a3a988
Show More
xychartitem.cpp
156 lines | 4.2 KiB | text/x-c | CppLexer
Michal Klocek
Add missing files from previous commit
r466 #include "xychartitem_p.h"
#include "qxyseries.h"
#include "chartpresenter_p.h"
Michal Klocek
Animation refactor...
r530 #include "chartanimator_p.h"
Michal Klocek
Add missing files from previous commit
r466 #include <QPainter>
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 #include <QGraphicsSceneMouseEvent>
Michal Klocek
Add missing files from previous commit
r466
QTCOMMERCIALCHART_BEGIN_NAMESPACE
//TODO: optimize : remove points which are not visible
Michal Klocek
Animation refactor...
r530 XYChartItem::XYChartItem(QXYSeries* series, QGraphicsItem *parent):ChartItem(parent),
Michal Klocek
Add missing files from previous commit
r466 m_minX(0),
m_maxX(0),
m_minY(0),
m_maxY(0),
m_series(series)
{
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)));
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 QObject::connect(this,SIGNAL(clicked(const QPointF&)),series,SIGNAL(clicked(const QPointF&)));
Michal Klocek
Add missing files from previous commit
r466 }
QPointF XYChartItem::calculateGeometryPoint(const QPointF& point) const
{
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);
}
QPointF XYChartItem::calculateGeometryPoint(int index) const
{
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
qreal x = (m_series->x(index) - m_minX)* deltaX;
qreal y = (m_series->y(index) - m_minY)*-deltaY + m_size.height();
return QPointF(x,y);
}
QVector<QPointF> XYChartItem::calculateGeometryPoints() const
{
const qreal deltaX = m_size.width()/(m_maxX-m_minX);
const qreal deltaY = m_size.height()/(m_maxY-m_minY);
QVector<QPointF> points;
points.reserve(m_series->count());
for (int i = 0; i < m_series->count(); ++i) {
qreal x = (m_series->x(i) - m_minX)* deltaX;
qreal y = (m_series->y(i) - m_minY)*-deltaY + m_size.height();
points << QPointF(x,y);
}
return points;
}
Michal Klocek
Adds clicked(Point) to lineSeries, changes visible points handling
r544 QPointF XYChartItem::calculateDomainPoint(const QPointF& point) const
{
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
Improves spline interpolation...
r622 void XYChartItem::updateLayout(QVector<QPointF>& oldPoints,QVector<QPointF>& newPoints,int index)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Animation refactor...
r530 if(m_animator){
Michal Klocek
Improves spline interpolation...
r622 m_animator->updateLayout(this,oldPoints,newPoints,index);
}else{
setLayout(newPoints);
Michal Klocek
Animation refactor...
r530 }
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Unify naming setGeometry -> setLayout
r557 void XYChartItem::setLayout(QVector<QPointF>& points)
Michal Klocek
Add missing files from previous commit
r466 {
m_points = points;
Michal Klocek
Improves spline interpolation...
r622 update();
Michal Klocek
Add missing files from previous commit
r466 }
//handlers
void XYChartItem::handlePointAdded(int index)
{
Q_ASSERT(index<m_series->count());
Q_ASSERT(index>=0);
QPointF point = calculateGeometryPoint(index);
QVector<QPointF> points = m_points;
Michal Klocek
Improves spline interpolation...
r622 points.insert(index,point);
updateLayout(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 update();
}
void XYChartItem::handlePointRemoved(int index)
{
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 Q_ASSERT(index<m_series->count() + 1);
Michal Klocek
Add missing files from previous commit
r466 Q_ASSERT(index>=0);
QVector<QPointF> points = m_points;
points.remove(index);
Michal Klocek
Improves spline interpolation...
r622 updateLayout(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 update();
}
void XYChartItem::handlePointReplaced(int index)
{
Q_ASSERT(index<m_series->count());
Q_ASSERT(index>=0);
QPointF point = calculateGeometryPoint(index);
Michal Klocek
Refactor animation to fit line,spline,scatter...
r476 QVector<QPointF> points = m_points;
Marek Rosa
QXYSeries: model data orientation added. QBarSeries: some model data function placeholders
r527 points.replace(index,point);
Michal Klocek
Improves spline interpolation...
r622 updateLayout(m_points,points,index);
Michal Klocek
Add missing files from previous commit
r466 update();
}
void XYChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY)
{
m_minX=minX;
m_maxX=maxX;
m_minY=minY;
m_maxY=maxY;
if(isEmpty()) return;
QVector<QPointF> points = calculateGeometryPoints();
Michal Klocek
Improves spline interpolation...
r622 updateLayout(m_points,points);
Michal Klocek
Add missing files from previous commit
r466 update();
}
void XYChartItem::handleGeometryChanged(const QRectF& rect)
{
Q_ASSERT(rect.isValid());
m_size=rect.size();
m_clipRect=rect.translated(-rect.topLeft());
setPos(rect.topLeft());
Marek Rosa
Table model data example
r519 if(isEmpty()) return;
Michal Klocek
Add missing files from previous commit
r466 QVector<QPointF> points = calculateGeometryPoints();
Michal Klocek
Improves spline interpolation...
r622 updateLayout(m_points,points);
Michal Klocek
Add missing files from previous commit
r466 update();
}
bool XYChartItem::isEmpty()
{
return !m_clipRect.isValid() || m_maxX - m_minX == 0 || m_maxY - m_minY ==0 ;
}
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 void XYChartItem::mousePressEvent( QGraphicsSceneMouseEvent * event )
{
emit clicked(calculateDomainPoint(event->pos()));
}
Michal Klocek
Add missing files from previous commit
r466 #include "moc_xychartitem_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE