##// END OF EJS Templates
Added support for adding and removing data with model. Updated the example
Added support for adding and removing data with model. Updated the example

File last commit:

r545:366c5163e81a
r545:366c5163e81a
Show More
xychartitem.cpp
156 lines | 3.9 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>
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)));
}
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
Add missing files from previous commit
r466 void XYChartItem::updatePoints(QVector<QPointF>& points)
{
Michal Klocek
Animation refactor...
r530 if(m_animator){
m_animator->applyLayout(this,points);
}
else setGeometry(points);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor animation to fit line,spline,scatter...
r476 void XYChartItem::updatePoint(QVector<QPointF>& points)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Refactor animation to fit line,spline,scatter...
r476 setGeometry(points);
Michal Klocek
Add missing files from previous commit
r466 }
void XYChartItem::setGeometry(QVector<QPointF>& points)
{
m_points = points;
}
//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;
points.insert(index,point);
updatePoints(points);
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);
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 // QPointF point = calculateGeometryPoint(index);
Michal Klocek
Add missing files from previous commit
r466 QVector<QPointF> points = m_points;
points.remove(index);
updatePoints(points);
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);
updatePoint(points);
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();
updatePoints(points);
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();
updatePoints(points);
update();
}
bool XYChartItem::isEmpty()
{
return !m_clipRect.isValid() || m_maxX - m_minX == 0 || m_maxY - m_minY ==0 ;
}
#include "moc_xychartitem_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE