diff --git a/src/qchart.cpp b/src/qchart.cpp index 73f84ab..5c25893 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -28,7 +28,8 @@ public: XYGrid* m_grid; QRect m_rect; QList m_series; - QList m_plotDataList; + QList m_plotDomainList; + QList m_xyLineChartItems; QList m_items; int m_plotDataIndex; int m_marginSize; @@ -44,21 +45,6 @@ d_ptr(new QChartPrivate(this)) // set axis Q_D(QChart); d->m_axisY->rotate(90); - - //TODO hardcoded values , to removed soon - XYPlotDomain data; - data.m_minX = 0.0; - data.m_maxX = 100.0; - data.m_minY = 0.0; - data.m_maxY = 100.0; - data.m_ticksX=4; - data.m_ticksY=4; - - d->m_plotDataList.clear(); - d->m_plotDataList << data; - - d->m_grid->setZValue(10); - d->m_grid->setXYPlotData(d->m_plotDataList.at(0)); } QChart::~QChart(){} @@ -78,9 +64,28 @@ void QChart::addSeries(QChartSeries* series) switch(series->type()) { case QChartSeries::SeriesTypeLine: { - XYLineChartItem* item = new XYLineChartItem(static_cast(series),this); - item->updateXYPlotData(d->m_plotDataList.at(0)); - d->m_items<(series); + + XYPlotDomain domain; + //TODO "nice numbers algorithm" + domain.m_ticksX=4; + domain.m_ticksY=4; + + for (int i = 0 ; i < xyseries->count() ; i++) + { + qreal x = xyseries->x(i); + qreal y = xyseries->y(i); + domain.m_minX = qMin(domain.m_minX,x); + domain.m_minY = qMin(domain.m_minY,y); + domain.m_maxX = qMax(domain.m_maxX,x); + domain.m_maxY = qMax(domain.m_maxY,y); + } + + XYLineChartItem* item = new XYLineChartItem(xyseries,this); + item->updateXYPlotDomain(domain); + d->m_plotDomainList<m_xyLineChartItems< x, QList y, QChartSeries: void QChart::setSize(const QSizeF& size) { Q_D(QChart); - //TODO refactor to setGeometry d->m_rect = QRect(QPoint(0,0),size.toSize()); d->m_rect.adjust(margin(),margin(),-margin(),-margin()); d->m_grid->setPos(d->m_rect.topLeft()); d->m_grid->setSize(d->m_rect.size()); - d->m_plotDataList[0].m_viewportRect = d->m_rect; // TODO: line chart items would need to be updated separately as they don't support update // via paint method - foreach(QGraphicsItem* item , d->m_items) - reinterpret_cast(item)->updateXYPlotData(d->m_plotDataList.at(0)); + for (int i =0; i< d->m_plotDomainList.size();i++) + { + d->m_plotDomainList[i].m_viewportRect = d->m_rect; + + } + + foreach(XYLineChartItem* item , d->m_xyLineChartItems) + item->updateXYPlotDomain(d->m_plotDomainList.at(d->m_plotDataIndex)); + + d->m_grid->setXYPlotData(d->m_plotDomainList.at(d->m_plotDataIndex)); update(); } diff --git a/src/xylinechart/xylinechartitem.cpp b/src/xylinechart/xylinechartitem.cpp index 74a09d1..752e1b3 100644 --- a/src/xylinechart/xylinechartitem.cpp +++ b/src/xylinechart/xylinechartitem.cpp @@ -14,7 +14,7 @@ m_series(series) } -void XYLineChartItem::updateXYPlotData(const XYPlotDomain& data) +void XYLineChartItem::updateXYPlotDomain(const XYPlotDomain& data) { m_xyPlotData=data; diff --git a/src/xylinechart/xylinechartitem_p.h b/src/xylinechart/xylinechartitem_p.h index beff445..739276b 100644 --- a/src/xylinechart/xylinechartitem_p.h +++ b/src/xylinechart/xylinechartitem_p.h @@ -20,7 +20,7 @@ public: virtual QRectF boundingRect() const; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - void updateXYPlotData(const XYPlotDomain& data); + void updateXYPlotDomain(const XYPlotDomain& data); private: QPolygonF m_polyline;