##// END OF EJS Templates
Fixed category handling of barcharts. Now the categories can be undefined. Updated documentation.
Fixed category handling of barcharts. Now the categories can be undefined. Updated documentation.

File last commit:

r1208:2943560d5819
r1208:2943560d5819
Show More
chartdataset.cpp
291 lines | 8.0 KiB | text/x-c | CppLexer
/ src / chartdataset.cpp
Michal Klocek
Updates chartdataset unit test
r771 /****************************************************************************
**
** Copyright (C) 2012 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "chartdataset_p.h"
Michal Klocek
Changes QChartAxis -> QAxis
r1006 #include "qaxis.h"
#include "qaxis_p.h"
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 #include "qabstractseries_p.h"
sauimone
Naming convention change for barcharts. QBarChartSeries is now QBarSeries etc.
r338 #include "qbarseries.h"
#include "qstackedbarseries.h"
#include "qpercentbarseries.h"
Jani Honkonen
Moved pie stuff to own .pri file and rename stuff
r146 #include "qpieseries.h"
Michal Klocek
Refactors qchart , adds line animation...
r131
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors axis handling...
r223 ChartDataSet::ChartDataSet(QObject *parent):QObject(parent),
Michal Klocek
Changes QChartAxis -> QAxis
r1006 m_axisX(new QAxis(this)),
m_axisY(new QAxis(this)),
Marek Rosa
Spline working somewhat
r401 m_domainIndex(0),
Michal Klocek
Refactor axis hadnling...
r1078 m_axisXInitialized(false),
m_axisYInitialized(false)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactor axis hadnling...
r1078 //create main domain
Domain* domain = new Domain(m_axisY);
m_axisDomainMap.insert(m_axisY,domain);
QObject::connect(m_axisY->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
QObject::connect(m_axisX->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool)));
QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),m_axisY->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),m_axisX->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
Michal Klocek
Refactors qchart , adds line animation...
r131 }
ChartDataSet::~ChartDataSet()
{
Michal Klocek
Adds if series deleted , remove series from chart
r1062 removeAllSeries();
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartDataSet::addSeries(QAbstractSeries* series, QAxis *axisY)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactor domain model...
r439 if(axisY==0) axisY = m_axisY;
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* axis = m_seriesAxisMap.value(series);
Michal Klocek
Fix indexing issue of series
r910
if(axis) {
Michal Klocek
Refactor domain model...
r439 qWarning() << "Can not add series. Series already on the chart";
return;
}
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Krazy reported errors...
r974 series->setParent(this); // take ownership
axisY->setParent(this); // take ownership
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactor domain model...
r439 Domain* domain = m_axisDomainMap.value(axisY);
Michal Klocek
Fix indexing issue of series
r910
if(!domain) {
Michal Klocek
Adds owvership to domain
r787 domain = new Domain(axisY);
Michal Klocek
Adds pimpl for qchartaxis and qchartaxiscategories
r963 QObject::connect(axisY->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
Michal Klocek
Refactor axis hadnling...
r1078 QObject::connect(axisX()->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int)));
Michal Klocek
Adds pimpl for qchartaxis and qchartaxiscategories
r963 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axisY->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
Michal Klocek
Bugfix missing min max intialization when axis added to domain
r442 //initialize
Michal Klocek
Refactor domain model...
r439 m_axisDomainMap.insert(axisY,domain);
emit axisAdded(axisY,domain);
Marek Rosa
Spline working somewhat
r401 }
Michal Klocek
Adds area chart...
r421
Michal Klocek
Fix indexing issue of series
r910 if(!m_axisXInitialized){
m_axisXInitialized=true;
Michal Klocek
Refactor axis hadnling...
r1078 emit axisAdded(m_axisX,domain);
}
if(!m_axisYInitialized && axisY==m_axisY){
m_axisYInitialized=true;
emit axisAdded(m_axisY,domain);
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Adds area chart...
r421
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 series->d_ptr->scaleDomain(*domain);
sauimone
Fixed category handling of barcharts. Now the categories can be undefined. Updated documentation.
r1208 // Note that with SeriesTypeBar we don't set up categories, but use real values on x-asis
sauimone
new series: groupedbarseries
r1167 if(series->type() == QAbstractSeries::SeriesTypeGroupedBar
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 || series->type() == QAbstractSeries::SeriesTypeStackedBar
|| series->type() == QAbstractSeries::SeriesTypePercentBar) {
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 QBarSeries* barSeries = static_cast<QBarSeries*>(series);
setupCategories(barSeries);
}
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 if (series->type()== QAbstractSeries::SeriesTypePie && m_seriesAxisMap.count() == 0) {
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 axisX()->hide();
this->axisY()->hide();
}
Michal Klocek
Adds area chart...
r421
Michal Klocek
Fix indexing issue of series
r910 m_seriesAxisMap.insert(series,axisY);
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
Michal Klocek
Fix indexing issue of series
r910
int key=0;
while (i.hasNext()) {
i.next();
if(i.key()!=key) {
break;
}
key++;
}
m_indexSeriesMap.insert(key,series);
Michal Klocek
Adds if series deleted , remove series from chart
r1062 series->d_ptr->m_dataset=this;
Michal Klocek
Fix indexing issue of series
r910 emit seriesAdded(series,domain);
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Refactor domain model...
r439 }
Jani Honkonen
Pie chart refactoring
r142
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* ChartDataSet::removeSeries(QAbstractSeries* series)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* axis = m_seriesAxisMap.value(series);
Michal Klocek
Fix indexing issue of series
r910
if(!axis){
qWarning()<<"Can not remove series. Series not found on the chart.";
Michal Klocek
Krazy reported errors...
r974 return 0;
Marek Rosa
Spline working somewhat
r401 }
Michal Klocek
Krazy reported errors...
r974
Michal Klocek
Fix indexing issue of series
r910 emit seriesRemoved(series);
Michal Klocek
Krazy reported errors...
r974
Michal Klocek
Fix indexing issue of series
r910 m_seriesAxisMap.remove(series);
int key = seriesIndex(series);
Q_ASSERT(key!=-1);
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Fix indexing issue of series
r910 m_indexSeriesMap.remove(key);
Michal Klocek
Krazy reported errors...
r974 series->setParent(0);
Michal Klocek
Adds if series deleted , remove series from chart
r1062 series->d_ptr->m_dataset=0;
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QList<QAxis*> axes = m_seriesAxisMap.values();
Michal Klocek
Fix indexing issue of series
r910
int i = axes.indexOf(axis);
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Fix indexing issue of series
r910 if(i==-1){
Michal Klocek
Refactor domain model...
r439 Domain* domain = m_axisDomainMap.take(axis);
emit axisRemoved(axis);
Michal Klocek
Refactor axis hadnling...
r1078 if(axis!=m_axisY){
Michal Klocek
Krazy reported errors...
r974 axis->setParent(0);
Michal Klocek
Refactor axis hadnling...
r1078 delete domain;
}else{
m_axisYInitialized=false;
m_axisDomainMap.insert(m_axisY,domain);
Michal Klocek
Fix ownership handling: if object has a parent do not delete it
r444 }
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Fix indexing issue of series
r910 if(m_seriesAxisMap.values().size()==0)
{
m_axisXInitialized=false;
Michal Klocek
Refactor domain model...
r439 emit axisRemoved(axisX());
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Krazy reported errors...
r974
return axis;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Adds RemoveAllSeries method to API
r258 void ChartDataSet::removeAllSeries()
{
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 QList<QAbstractSeries*> series = m_seriesAxisMap.keys();
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QList<QAxis*> axes;
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 foreach(QAbstractSeries *s , series) {
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* axis = removeSeries(s);
Michal Klocek
Krazy reported errors...
r974 if(axis==axisY()) continue;
int i = axes.indexOf(axis);
if(i==-1){
axes<<axis;
}
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Fix indexing issue of series
r910 Q_ASSERT(m_seriesAxisMap.count()==0);
Michal Klocek
Refactor axis hadnling...
r1078 Q_ASSERT(m_axisDomainMap.count()==1);
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Krazy reported errors...
r974 qDeleteAll(series);
qDeleteAll(axes);
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Adds back reimplemnted categories handling
r701 void ChartDataSet::setupCategories(QBarSeries* series)
{
Michal Klocek
Changes QChartAxisCategories -> QAxisCategories
r1032 QAxisCategories* categories = axisX()->categories();
Michal Klocek
Adds back reimplemnted categories handling
r701 categories->clear();
Michal Klocek
Adds BarCategories typedef
r703 categories->insert(series->categories());
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactor domain model...
r439 void ChartDataSet::zoomInDomain(const QRectF& rect, const QSizeF& size)
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QMapIterator<QAxis*, Domain*> i(m_axisDomainMap);
Michal Klocek
Refactor axis hadnling...
r1078 //main domain has to be the last one;
Domain *domain = m_axisDomainMap.value(axisY());
Q_ASSERT(domain);
Michal Klocek
Refactor domain model...
r439 while (i.hasNext()) {
i.next();
Michal Klocek
Refactor axis hadnling...
r1078 if(i.value()==domain) continue;
Michal Klocek
Refactor domain model...
r439 i.value()->zoomIn(rect,size);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Refactor axis hadnling...
r1078 domain->zoomIn(rect,size);
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactor domain model...
r439 void ChartDataSet::zoomOutDomain(const QRectF& rect, const QSizeF& size)
{
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QMapIterator<QAxis*, Domain*> i(m_axisDomainMap);
Michal Klocek
Refactor axis hadnling...
r1078 //main domain has to be the last one;
Domain *domain = m_axisDomainMap.value(axisY());
Q_ASSERT(domain);
Michal Klocek
Refactor domain model...
r439 while (i.hasNext()) {
i.next();
Michal Klocek
Refactor axis hadnling...
r1078 if(i.value()==domain) continue;
Michal Klocek
Refactor domain model...
r439 i.value()->zoomOut(rect,size);
}
Michal Klocek
Refactor axis hadnling...
r1078 domain->zoomOut(rect,size);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Fixes to API , QSeriesType -> SeriesType , add missing getters
r1107 int ChartDataSet::seriesCount(QAbstractSeries::SeriesType type)
Michal Klocek
Fix indexing issue of series
r910 {
int count=0;
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QMapIterator<QAbstractSeries*, QAxis*> i(m_seriesAxisMap);
Michal Klocek
Fix indexing issue of series
r910 while (i.hasNext()) {
i.next();
if(i.key()->type()==type) count++;
}
return count;
}
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 int ChartDataSet::seriesIndex(QAbstractSeries *series)
Tero Ahola
Fixed bug with changing theme when several series exist
r538 {
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
Michal Klocek
Fix indexing issue of series
r910 while (i.hasNext()) {
i.next();
if (i.value() == series)
return i.key();
Tero Ahola
Fixed bug with changing theme when several series exist
r538 }
Tero Ahola
Reserve ordering of chart series internally....
r825 return -1;
Tero Ahola
Fixed bug with changing theme when several series exist
r538 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* ChartDataSet::axisY(QAbstractSeries *series) const
Michal Klocek
Refactors axis handling...
r223 {
Michal Klocek
Fix indexing issue of series
r910 if(series == 0) return m_axisY;
return m_seriesAxisMap.value(series);
Michal Klocek
Refactors axis handling...
r223 }
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 Domain* ChartDataSet::domain(QAbstractSeries *series) const
Michal Klocek
Refactors axis handling...
r223 {
Michal Klocek
Changes QChartAxis -> QAxis
r1006 QAxis* axis = m_seriesAxisMap.value(series);
Michal Klocek
Fix indexing issue of series
r910 if(axis){
Michal Klocek
Refactor domain model...
r439 return m_axisDomainMap.value(axis);
Michal Klocek
Fix indexing issue of series
r910 }else
return 0;
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 Domain* ChartDataSet::domain(QAxis* axis) const
Michal Klocek
Refactors axis handling...
r223 {
Michal Klocek
Updates chartdataset unit test
r771 if(!axis || axis==axisX()) {
Michal Klocek
Fix ownership handling: if object has a parent do not delete it
r444 return m_axisDomainMap.value(axisY());
}
else {
return m_axisDomainMap.value(axis);
}
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Adds scroll support...
r531 void ChartDataSet::scrollDomain(int dx,int dy,const QSizeF& size)
{
Michal Klocek
Refactor axis hadnling...
r1078 QMapIterator<QAxis*, Domain*> i( m_axisDomainMap);
//main domain has to be the last one;
Domain *domain = m_axisDomainMap.value(axisY());
while (i.hasNext()) {
i.next();
if(i.value()==domain) continue;
i.value()->move(dx,dy,size);
}
domain->move(dx,dy,size);
}
QList<QAbstractSeries*> ChartDataSet::series() const
{
return m_seriesAxisMap.keys();
Michal Klocek
Adds scroll support...
r531 }
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartdataset_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE