##// END OF EJS Templates
Adds animation settings handling
Adds animation settings handling

File last commit:

r278:1d8f8b316dca
r298:cf230c2f88fb
Show More
scatterpresenter.cpp
157 lines | 5.5 KiB | text/x-c | CppLexer
Tero Ahola
Moved scatter impl into a subfolder
r194 #include "scatterpresenter_p.h"
Tero Ahola
Integrated scatter again. Missing functionality....
r158 #include "qscatterseries.h"
#include <QPen>
#include <QPainter>
#include <QGraphicsScene>
#include <QDebug>
Tero Ahola
Refactored chartwidgettest test data impl
r278 #include <QTime>
Tero Ahola
Integrated scatter again. Missing functionality....
r158
QTCOMMERCIALCHART_BEGIN_NAMESPACE
ScatterPresenter::ScatterPresenter(QScatterSeries *series, QGraphicsObject *parent) :
ChartItem(parent),
m_series(series),
m_boundingRect(),
//m_markerColor(QColor()),
Tero Ahola
Enabled theme colors in scatter again
r182 // m_markerColor(QColor(255, 0, 0)),
Tero Ahola
Integrated scatter again. Missing functionality....
r158 m_visibleChartArea()
{
if (parent)
m_boundingRect = parent->boundingRect();
if (series) {
connect(series, SIGNAL(changed()), this, SLOT(handleModelChanged()));
}
}
void ScatterPresenter::handleDomainChanged(const Domain& domain)
{
m_visibleChartArea = domain;
changeGeometry();
}
void ScatterPresenter::handleGeometryChanged(const QRectF& rect)
{
m_boundingRect = rect;
changeGeometry();
}
void ScatterPresenter::handleModelChanged()
{
// TODO: more fine grained modelChanged signaling
changeGeometry();
}
void ScatterPresenter::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
{
Tero Ahola
Scatter series marker visuals
r195 // TODO: Optimization: avoid setting on every paint method call?
// The custom settings in series override those defined by the theme
Tero Ahola
Refactored chartwidgettest test data impl
r278 int shape = m_series->markerShape();
painter->save();
painter->setClipRect(m_boundingRect);
// Paint dropshadow
QPen dropShadowPen(QColor(0, 0, 0, 70));
dropShadowPen.setWidth(3);
painter->setPen(dropShadowPen);
painter->setBrush(Qt::NoBrush);
painter->setRenderHint(QPainter::Antialiasing);
for (int i(0); i < m_scenex.count() && i < m_sceney.count(); i++) {
if (scene()->width() > m_scenex.at(i) && scene()->height() > m_sceney.at(i))
switch (shape) {
case QScatterSeries::MarkerShapeDefault:
// Fallthrough, defaults to circle
case QScatterSeries::MarkerShapeCircle:
painter->drawChord(m_scenex.at(i) + 2, m_sceney.at(i) + 2, 9, 9, 0, 5760);
break;
case QScatterSeries::MarkerShapePoint:
//painter->drawPoint(m_scenex.at(i), m_sceney.at(i));
break;
case QScatterSeries::MarkerShapeRectangle:
painter->drawRect(m_scenex.at(i) + 2, m_sceney.at(i) + 2, 8, 8);
break;
case QScatterSeries::MarkerShapeTiltedRectangle: {
// TODO:
static const QPointF points[4] = {
QPointF(-1.0 + m_scenex.at(i), 0.0 + m_sceney.at(i)),
QPointF(0.0 + m_scenex.at(i), 1.0 + m_sceney.at(i)),
QPointF(1.0 + m_scenex.at(i), 0.0 + m_sceney.at(i)),
QPointF(0.0 + m_scenex.at(i), -1.0 + m_sceney.at(i))
};
painter->drawPolygon(points, 4);
break;
}
default:
// TODO: implement the rest of the shapes
Q_ASSERT(false);
break;
}
}
Tero Ahola
Documenting QScatterSeries
r261
Tero Ahola
Refactored chartwidgettest test data impl
r278 // Paint the shape
QPen pen = m_markerPen;
if (m_series->markerPen().color().isValid())
pen = m_series->markerPen();
Tero Ahola
Documenting QScatterSeries
r261 if (m_series->markerBrush().color().isValid())
painter->setBrush(m_series->markerBrush());
else
Tero Ahola
Scatter series marker visuals
r195 painter->setBrush(m_markerBrush);
Tero Ahola
Refactored chartwidgettest test data impl
r278 painter->setPen(pen);
painter->setRenderHint(QPainter::Antialiasing, false);
Tero Ahola
Integrated scatter again. Missing functionality....
r158 for (int i(0); i < m_scenex.count() && i < m_sceney.count(); i++) {
if (scene()->width() > m_scenex.at(i) && scene()->height() > m_sceney.at(i))
Tero Ahola
Scatter series marker visuals
r195 switch (shape) {
case QScatterSeries::MarkerShapeDefault:
// Fallthrough, defaults to circle
case QScatterSeries::MarkerShapeCircle:
painter->drawChord(m_scenex.at(i), m_sceney.at(i), 9, 9, 0, 5760);
break;
case QScatterSeries::MarkerShapePoint:
painter->drawPoint(m_scenex.at(i), m_sceney.at(i));
break;
case QScatterSeries::MarkerShapeRectangle:
painter->drawRect(m_scenex.at(i), m_sceney.at(i), 9, 9);
break;
Tero Ahola
Refactored chartwidgettest test data impl
r278 case QScatterSeries::MarkerShapeTiltedRectangle: {
Tero Ahola
Scatter series marker visuals
r228 // TODO:
static const QPointF points[4] = {
QPointF(-1.0 + m_scenex.at(i), 0.0 + m_sceney.at(i)),
QPointF(0.0 + m_scenex.at(i), 1.0 + m_sceney.at(i)),
QPointF(1.0 + m_scenex.at(i), 0.0 + m_sceney.at(i)),
QPointF(0.0 + m_scenex.at(i), -1.0 + m_sceney.at(i))
};
painter->drawPolygon(points, 4);
Tero Ahola
Scatter series marker visuals
r195 break;
Tero Ahola
Refactored chartwidgettest test data impl
r278 }
Tero Ahola
Scatter series marker visuals
r195 default:
// TODO: implement the rest of the shapes
Q_ASSERT(false);
break;
}
Tero Ahola
Integrated scatter again. Missing functionality....
r158 }
Tero Ahola
Refactored chartwidgettest test data impl
r278
painter->restore();
Tero Ahola
Integrated scatter again. Missing functionality....
r158 }
void ScatterPresenter::changeGeometry()
{
if (m_boundingRect.isValid()) {
prepareGeometryChange();
qreal scalex = m_boundingRect.width() / m_visibleChartArea.spanX();
qreal scaley = m_boundingRect.height() / m_visibleChartArea.spanY();
m_scenex.clear();
m_sceney.clear();
// Convert relative coordinates to absolute pixel coordinates that can be used for drawing
foreach (QPointF point, m_series->data()) {
m_scenex.append(m_boundingRect.left() + point.x() * scalex - m_visibleChartArea.m_minX * scalex);
m_sceney.append(m_boundingRect.bottom() - point.y() * scaley + m_visibleChartArea.m_minY * scaley);
}
}
}
Tero Ahola
Moved scatter impl into a subfolder
r194 #include "moc_scatterpresenter_p.cpp"
Tero Ahola
Integrated scatter again. Missing functionality....
r158
QTCOMMERCIALCHART_END_NAMESPACE