qscatterseries.cpp
96 lines
| 2.5 KiB
| text/x-c
|
CppLexer
/ src / qscatterseries.cpp
Tero Ahola
|
r42 | #include "qscatterseries.h" | ||
#include "qscatterseries_p.h" | ||||
#include "qchart.h" | ||||
#include <QPainter> | ||||
#include <QGraphicsScene> | ||||
Tero Ahola
|
r48 | #include <QDebug> | ||
Tero Ahola
|
r42 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
//#define QSeriesData QList<qreal> | ||||
Tero Ahola
|
r61 | QScatterSeriesPrivate::QScatterSeriesPrivate(QGraphicsItem *parent) : | ||
Tero Ahola
|
r42 | QGraphicsItem(parent), | ||
Tero Ahola
|
r54 | m_scalex(100), // TODO: let the use define the scale (or autoscaled) | ||
m_scaley(100) | ||||
Tero Ahola
|
r42 | { | ||
} | ||||
Tero Ahola
|
r54 | void QScatterSeriesPrivate::resize(QRectF rect) | ||
Tero Ahola
|
r42 | { | ||
Tero Ahola
|
r48 | m_scenex.clear(); | ||
m_sceney.clear(); | ||||
foreach(qreal x, m_x) | ||||
Tero Ahola
|
r54 | m_scenex.append(rect.left() + x * (rect.width() / m_scalex)); | ||
Tero Ahola
|
r48 | |||
foreach(qreal y, m_y) | ||||
Tero Ahola
|
r54 | m_sceney.append(rect.bottom() - y * (rect.height() / m_scaley)); | ||
Tero Ahola
|
r42 | } | ||
Tero Ahola
|
r54 | // TODO: | ||
//void QScatterSeriesPrivate::setAxisScale(qreal xscale, qreal yscale) | ||||
Tero Ahola
|
r42 | QRectF QScatterSeriesPrivate::boundingRect() const | ||
{ | ||||
Tero Ahola
|
r48 | return QRectF(0, 0, 55, 100); | ||
Tero Ahola
|
r42 | } | ||
void QScatterSeriesPrivate::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) | ||||
{ | ||||
QPen pen = painter->pen(); | ||||
QBrush brush = pen.brush(); | ||||
// TODO: The opacity should be user definable... | ||||
Tero Ahola
|
r54 | brush.setColor(QColor(255, 82, 0, 100)); | ||
Tero Ahola
|
r42 | pen.setBrush(brush); | ||
pen.setWidth(4); | ||||
painter->setPen(pen); | ||||
Tero Ahola
|
r48 | // TODO: m_scenex and m_sceny are left empty during construction -> we would need a resize | ||
// event right after construction or maybe given a size during initialization | ||||
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)) | ||||
//painter->drawArc(m_scenex.at(i), m_sceney.at(i), 2, 2, 0, 5760); | ||||
painter->drawPoint(m_scenex.at(i), m_sceney.at(i)); | ||||
Tero Ahola
|
r42 | } | ||
} | ||||
Tero Ahola
|
r61 | QScatterSeries::QScatterSeries(QObject *parent) : | ||
Tero Ahola
|
r42 | QChartSeries(parent), | ||
Tero Ahola
|
r61 | d(new QScatterSeriesPrivate(qobject_cast<QGraphicsItem *> (parent))) | ||
Tero Ahola
|
r42 | { | ||
Tero Ahola
|
r48 | } | ||
Tero Ahola
|
r61 | bool QScatterSeries::setData(QList<qreal> x, QList<qreal> y) | ||
{ | ||||
// TODO: validate data | ||||
d->m_x = x; | ||||
d->m_y = y; | ||||
QGraphicsItem *parentItem = qobject_cast<QGraphicsItem *>(parent()); | ||||
Q_ASSERT(parentItem); | ||||
d->resize(parentItem->boundingRect()); | ||||
return true; | ||||
} | ||||
Tero Ahola
|
r54 | void QScatterSeries::chartSizeChanged(QRectF rect) | ||
Tero Ahola
|
r48 | { | ||
// Recalculate scatter data point locations on the scene | ||||
// d->transform().reset(); | ||||
// d->transform().translate(); | ||||
Tero Ahola
|
r54 | d->resize(rect); | ||
Tero Ahola
|
r42 | } | ||
Tero Ahola
|
r54 | // TODO: | ||
//void QScatterSeries::chartScaleChanged(qreal xscale, qreal yscale) | ||||
//{ | ||||
// d->rescale(xscale, yscale); | ||||
//} | ||||
Tero Ahola
|
r42 | QScatterSeries::~QScatterSeries() | ||
{ | ||||
delete d; | ||||
} | ||||
#include "moc_qscatterseries.cpp" | ||||
QTCOMMERCIALCHART_END_NAMESPACE | ||||