##// END OF EJS Templates
Bar series to use theme base colors. Pie brush minor fix....
Bar series to use theme base colors. Pie brush minor fix. Also fixed pen of bar series and stacked bar series.

File last commit:

r653:f4e416c6727f
r661:4756f59398b8
Show More
scatterchartitem.cpp
173 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
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),
Tero Ahola
Use light outline color instead of dark for bar, area and scatter
r653 m_size(15)
Michal Klocek
Refactor scatter chart to fit the other classes...
r470
{
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