##// END OF EJS Templates
Legend disabled by defaut. User can turn in on, by calling setVisible
Legend disabled by defaut. User can turn in on, by calling setVisible

File last commit:

r612:bc455d9d24c8
r652:4ab0d58be448
Show More
scatterchartitem.cpp
179 lines | 4.3 KiB | text/x-c | CppLexer
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 #include "scatterchartitem_p.h"
#include "qscatterseries.h"
#include "chartpresenter_p.h"
#include <QPainter>
#include <QGraphicsScene>
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Fix sctter series wrong points offset issue
r536
Michal Klocek
Refactor animation to fit line,spline,scatter...
r476 ScatterChartItem::ScatterChartItem(QScatterSeries *series, QGraphicsItem *parent) :
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 XYChartItem(series,parent),
m_series(series),
m_items(this),
m_shape(QScatterSeries::MarkerShapeRectangle),
m_size(10)
{
Q_ASSERT(parent);
Q_ASSERT(series);
Michal Klocek
Adds missing scatter intercation implementation...
r541 QObject::connect(m_series,SIGNAL(updated()), this, SLOT(handleUpdated()));
Michal Klocek
Refactor scatter chart to fit the other classes...
r470
setZValue(ChartPresenter::ScatterSeriesZValue);
setFlags(QGraphicsItem::ItemHasNoContents);
setFlags(QGraphicsItem::ItemClipsChildrenToShape);
handleUpdated();
Michal Klocek
Adds missing scatter intercation implementation...
r541 m_items.setHandlesChildEvents(false);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 // TODO: how to draw a drop shadow?
// QGraphicsDropShadowEffect *dropShadow = new QGraphicsDropShadowEffect();
// dropShadow->setOffset(2.0);
// dropShadow->setBlurRadius(2.0);
// setGraphicsEffect(dropShadow);
}
QRectF ScatterChartItem::boundingRect() const
{
return m_rect;
}
void ScatterChartItem::createPoints(int count)
{
for (int i = 0; i < count; ++i) {
QGraphicsItem *item;
switch (m_shape) {
Michal Klocek
Adds missing scatter intercation implementation...
r541 case QScatterSeries::MarkerShapeCircle:{
QGraphicsEllipseItem* i = new QGraphicsEllipseItem(0,0,m_size,m_size);
const QRectF& rect = i->boundingRect();
i->setPos(-rect.width()/2,-rect.height()/2);
item = new Marker(i,this);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 break;
Michal Klocek
Adds missing scatter intercation implementation...
r541 }
case QScatterSeries::MarkerShapeRectangle:{
QGraphicsRectItem* i = new QGraphicsRectItem(0,0,m_size,m_size);
i->setPos(-m_size/2,-m_size/2);
item = new Marker(i,this);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 break;
Michal Klocek
Adds missing scatter intercation implementation...
r541 }
default:
qWarning()<<"Unsupported marker type";
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 break;
Michal Klocek
Adds missing scatter intercation implementation...
r541
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
m_items.addToGroup(item);
}
}
void ScatterChartItem::deletePoints(int count)
{
QList<QGraphicsItem *> items = m_items.childItems();
for (int i = 0; i < count; ++i) {
delete(items.takeLast());
}
}
Michal Klocek
Adds missing scatter intercation implementation...
r541 void ScatterChartItem::markerSelected(Marker* marker)
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 {
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 emit XYChartItem::clicked(QPointF(m_series->x(marker->index()), m_series->y(marker->index())));
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
Michal Klocek
Unify naming setGeometry -> setLayout
r557 void ScatterChartItem::setLayout(QVector<QPointF>& points)
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 {
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 if(points.size()==0)
{
Michal Klocek
Unify naming setGeometry -> setLayout
r557 XYChartItem::setLayout(points);
Marek Rosa
Added support for adding and removing data with model. Updated the example
r545 return;
}
Michal Klocek
Refactor scatter chart to fit the other classes...
r470
int diff = XYChartItem::points().size() - points.size();
if(diff>0) {
deletePoints(diff);
}
else if(diff<0) {
createPoints(-diff);
}
if(diff!=0) handleUpdated();
QList<QGraphicsItem*> items = m_items.childItems();
for(int i=0; i< points.size();i++) {
Michal Klocek
Adds missing scatter intercation implementation...
r541 Marker* item = static_cast<Marker*>(items.at(i));
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 const QPointF& point = points.at(i);
Michal Klocek
Fix sctter series wrong points offset issue
r536 const QRectF& rect = item->boundingRect();
Michal Klocek
Adds missing scatter intercation implementation...
r541 item->setIndex(i);
Michal Klocek
Fix sctter series wrong points offset issue
r536 item->setPos(point.x()-rect.width()/2,point.y()-rect.height()/2);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 if(!clipRect().contains(point)) {
item->setVisible(false);
}
else {
item->setVisible(true);
}
}
prepareGeometryChange();
m_rect = clipRect();
Michal Klocek
Unify naming setGeometry -> setLayout
r557 XYChartItem::setLayout(points);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
void ScatterChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Tero Ahola
Squashed bunch of warnings
r611 Q_UNUSED(painter)
Q_UNUSED(option)
Q_UNUSED(widget)
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
void ScatterChartItem::setPen(const QPen& pen)
{
foreach(QGraphicsItem* item , m_items.childItems()) {
Michal Klocek
Adds missing scatter intercation implementation...
r541 static_cast<Marker*>(item)->setPen(pen);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
}
void ScatterChartItem::setBrush(const QBrush& brush)
{
foreach(QGraphicsItem* item , m_items.childItems()) {
Michal Klocek
Adds missing scatter intercation implementation...
r541 static_cast<Marker*>(item)->setBrush(brush);
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 }
}
void ScatterChartItem::handleUpdated()
{
int count = m_items.childItems().count();
if(count==0) return;
bool recreate = m_size != m_series->size() || m_shape != m_series->shape();
//TODO: only rewrite on size change
m_size = m_series->size();
m_shape = m_series->shape();
if(recreate){
deletePoints(count);
createPoints(count);
}
setPen(m_series->pen());
setBrush(m_series->brush());
}
#include "moc_scatterchartitem_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE