##// END OF EJS Templates
Fix Creator crash when opening Charts project...
Fix Creator crash when opening Charts project There's a problem with Creator parsing the headers defined in Charts src.pro. This will cause the Creator (3.0.0-beta) to crash when trying to open charts.pro. As a workaround the headers are defined using new variables for each function and unsetting the variables after each rotation. Task-number: QTRD-2480 Change-Id: Ia77428dab61fa9fa57ca5501ad27f8c3f514f017 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>

File last commit:

r2614:c8086b11eeb5
r2641:614285c5dc95
Show More
chartdataset.cpp
637 lines | 18.3 KiB | text/x-c | CppLexer
/ src / chartdataset.cpp
Michal Klocek
Updates chartdataset unit test
r771 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Michal Klocek
Updates chartdataset unit test
r771 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** This file is part of the Qt Enterprise Charts Add-on.
Michal Klocek
Updates chartdataset unit test
r771 **
** $QT_BEGIN_LICENSE$
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
Michal Klocek
Updates chartdataset unit test
r771 ** 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
Refactors internals...
r2273 #include "chartpresenter_p.h"
Jani Honkonen
Implemented QAbstractSeries::chart()...
r1314 #include "qchart.h"
Michal Klocek
Refactors internals...
r2273 #include "qchart_p.h"
Marek Rosa
renamed QValueAxis related files
r1805 #include "qvalueaxis.h"
Marek Rosa
renamed QBarCategoryAxis related files
r1810 #include "qbarcategoryaxis.h"
Marek Rosa
renamed QValueAxis related files
r1805 #include "qvalueaxis_p.h"
Marek Rosa
Renamed QCategoryAxis related files
r1817 #include "qcategoryaxis.h"
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 #include "qabstractseries_p.h"
sauimone
renamed barseries files to abstractbarseries
r1586 #include "qabstractbarseries.h"
sauimone
Naming convention change for barcharts. QBarChartSeries is now QBarSeries etc.
r338 #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 internals...
r2273 #include "chartitem_p.h"
Marek Rosa
Domains added
r2275 #include "xydomain_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "xypolardomain_p.h"
Marek Rosa
Log domains zoomin, zoomout and move added
r2280 #include "xlogydomain_p.h"
#include "logxydomain_p.h"
#include "logxlogydomain_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "xlogypolardomain_p.h"
#include "logxypolardomain_p.h"
#include "logxlogypolardomain_p.h"
Michal Klocek
Refactors qchart , adds line animation...
r131
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #ifndef QT_ON_ARM
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 #include "qdatetimeaxis.h"
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #endif
Michal Klocek
Refactors qchart , adds line animation...
r131 QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors internals...
r2273 ChartDataSet::ChartDataSet(QChart *chart)
: QObject(chart),
m_chart(chart)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556
Michal Klocek
Refactors qchart , adds line animation...
r131 }
ChartDataSet::~ChartDataSet()
{
Michal Klocek
Adds domains swap logic
r2284 deleteAllSeries();
deleteAllAxes();
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Michal Klocek
Refactors internals...
r2273 /*
* This method adds series to chartdataset, series ownership is taken from caller.
*/
Jani Honkonen
more coding style fixes for src-folder...
r2104 void ChartDataSet::addSeries(QAbstractSeries *series)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactors internals...
r2273 if (m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not add series. Series already on the chart.");
return;
}
Miikka Heikkinen
Add Polar chart support...
r2483 // Ignore unsupported series added to polar chart
if (m_chart && m_chart->chartType() == QChart::ChartTypePolar) {
if (!(series->type() == QAbstractSeries::SeriesTypeArea
|| series->type() == QAbstractSeries::SeriesTypeLine
|| series->type() == QAbstractSeries::SeriesTypeScatter
|| series->type() == QAbstractSeries::SeriesTypeSpline)) {
qWarning() << QObject::tr("Can not add series. Series type is not supported by a polar chart.");
return;
}
series->d_ptr->setDomain(new XYPolarDomain());
} else {
series->d_ptr->setDomain(new XYDomain());
}
Michal Klocek
Refactors internals...
r2273 series->d_ptr->initializeDomain();
m_seriesList.append(series);
series->setParent(this); // take ownership
series->d_ptr->m_chart = m_chart;
emit seriesAdded(series);
}
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Refactors internals...
r2273 /*
* This method adds axis to chartdataset, axis ownership is taken from caller.
*/
Miikka Heikkinen
Add Polar chart support...
r2483 void ChartDataSet::addAxis(QAbstractAxis *axis, Qt::Alignment aligment)
Michal Klocek
Refactors internals...
r2273 {
if (m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not add axis. Axis already on the chart.");
Michal Klocek
Refactor domain model...
r439 return;
}
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 axis->d_ptr->setAlignment(aligment);
Michal Klocek
Adds axis domain intialization
r1695
Miikka Heikkinen
Add Polar chart support...
r2483 if (!axis->alignment()) {
qWarning() << QObject::tr("No alignment specified !");
Michal Klocek
Refactors internals...
r2273 return;
};
Michal Klocek
Adds axis domain intialization
r1695
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *newDomain;
Miikka Heikkinen
Remove restriction of only one axis per orientation in polar charts...
r2547 if (m_chart && m_chart->chartType() == QChart::ChartTypePolar)
Miikka Heikkinen
Add Polar chart support...
r2483 newDomain = new XYPolarDomain();
Miikka Heikkinen
Remove restriction of only one axis per orientation in polar charts...
r2547 else
Miikka Heikkinen
Add Polar chart support...
r2483 newDomain = new XYDomain();
QSharedPointer<AbstractDomain> domain(newDomain);
Michal Klocek
Refactors internals...
r2273 axis->d_ptr->initializeDomain(domain.data());
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 axis->setParent(this);
axis->d_ptr->m_chart = m_chart;
m_axisList.append(axis);
Michal Klocek
Adds area chart...
r421
Michal Klocek
Refactors internals...
r2273 emit axisAdded(axis);
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Refactors internals...
r2273 /*
* This method removes series form chartdataset, series ownership is passed back to caller.
*/
Jani Honkonen
more coding style fixes for src-folder...
r2104 void ChartDataSet::removeSeries(QAbstractSeries *series)
Michal Klocek
Adds axis domain intialization
r1695 {
Michal Klocek
Refactors internals...
r2273 if (! m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not remove series. Series not found on the chart.");
Michal Klocek
Adds axis domain intialization
r1695 return;
}
Michal Klocek
Refactors internals...
r2273 QList<QAbstractAxis*> axes = series->d_ptr->m_axes;
Michal Klocek
Adds axis domain intialization
r1695
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractAxis* axis, axes) {
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 detachAxis(series,axis);
Michal Klocek
Fix indexing issue of series
r910 }
Michal Klocek
Adds domains swap logic
r2284
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 emit seriesRemoved(series);
m_seriesList.removeAll(series);
Miikka Heikkinen
Add Polar chart support...
r2483 // Reset domain to default
series->d_ptr->setDomain(new XYDomain());
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 series->setParent(0);
series->d_ptr->m_chart = 0;
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Fix indexing issue of series
r910
Michal Klocek
Refactors internals...
r2273 /*
* This method removes axis form chartdataset, series ownership is passed back to caller.
*/
void ChartDataSet::removeAxis(QAbstractAxis *axis)
Michal Klocek
Refactor QChart API...
r1577 {
Michal Klocek
Refactors internals...
r2273 if (! m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not remove axis. Axis not found on the chart.");
Tero Ahola
Refactored QML axis handling
r1813 return;
Michal Klocek
Adds createDefaultAxes logic
r1588 }
Michal Klocek
Refactor QChart API...
r1577
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 QList<QAbstractSeries*> series = axis->d_ptr->m_series;
foreach(QAbstractSeries* s, series) {
detachAxis(s,axis);
}
Michal Klocek
Refactors internals...
r2273 emit axisRemoved(axis);
m_axisList.removeAll(axis);
Michal Klocek
Refactor QChart API...
r1577
Michal Klocek
Refactors internals...
r2273 axis->setParent(0);
axis->d_ptr->m_chart = 0;
Michal Klocek
Refactor QChart API...
r1577 }
Michal Klocek
Refactors internals...
r2273 /*
Michal Klocek
Adds domains swap logic
r2284 * This method attaches axis to series, return true if success.
Michal Klocek
Refactors internals...
r2273 */
Miikka Heikkinen
Add Polar chart support...
r2483 bool ChartDataSet::attachAxis(QAbstractSeries *series,QAbstractAxis *axis)
Michal Klocek
Adds createDefaultAxes logic
r1588 {
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(series);
Q_ASSERT(axis);
Michal Klocek
Adds createDefaultAxes logic
r1588
Miikka Heikkinen
Add Polar chart support...
r2483 QList<QAbstractSeries *> attachedSeriesList = axis->d_ptr->m_series;
QList<QAbstractAxis *> attachedAxisList = series->d_ptr->m_axes;
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (!m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not find series on the chart.");
return false;
}
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (axis && !m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not find axis on the chart.");
return false;
}
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Refactors internals...
r2273 if (attachedAxisList.contains(axis)) {
qWarning() << QObject::tr("Axis already attached to series.");
return false;
Michal Klocek
Adds axis domain intialization
r1695 }
Michal Klocek
Adds createDefaultAxes logic
r1588
Michal Klocek
Adds domains swap logic
r2284 if (attachedSeriesList.contains(series)) {
qWarning() << QObject::tr("Axis already attached to series.");
return false;
}
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *domain = series->d_ptr->domain();
Michal Klocek
Adds domains swap logic
r2284 AbstractDomain::DomainType type = selectDomain(attachedAxisList<<axis);
Miikka Heikkinen
Add Polar chart support...
r2483 if (type == AbstractDomain::UndefinedDomain) return false;
Michal Klocek
Fix indexing issue of series
r910
Miikka Heikkinen
Add Polar chart support...
r2483 if (domain->type() != type) {
Marek Rosa
Preset range on LogAxis fix
r2373 AbstractDomain *old = domain;
Miikka Heikkinen
Add Polar chart support...
r2483 domain = createDomain(type);
Marek Rosa
Preset range on LogAxis fix
r2373 domain->setRange(old->minX(), old->maxX(), old->minY(), old->maxY());
Miikka Heikkinen
Add Polar chart support...
r2483 // Initialize domain size to old domain size, as it won't get updated
// unless geometry changes.
domain->setSize(old->size());
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Miikka Heikkinen
Add Polar chart support...
r2483 if (!domain)
return false;
if (!domain->attachAxis(axis))
return false;
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 QList<AbstractDomain *> blockedDomains;
domain->blockRangeSignals(true);
blockedDomains << domain;
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 if (domain != series->d_ptr->domain()) {
foreach (QAbstractAxis *axis, series->d_ptr->m_axes) {
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 series->d_ptr->domain()->detachAxis(axis);
domain->attachAxis(axis);
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (QAbstractSeries *otherSeries, axis->d_ptr->m_series) {
if (otherSeries != series && otherSeries->d_ptr->domain()) {
if (!otherSeries->d_ptr->domain()->rangeSignalsBlocked()) {
otherSeries->d_ptr->domain()->blockRangeSignals(true);
blockedDomains << otherSeries->d_ptr->domain();
}
}
}
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 }
Michal Klocek
Fix domain switching
r2288 series->d_ptr->setDomain(domain);
series->d_ptr->initializeDomain();
}
Michal Klocek
bugfix signals not reconnected when domain changed
r2292
series->d_ptr->m_axes<<axis;
axis->d_ptr->m_series<<series;
Michal Klocek
Refactors internals...
r2273 series->d_ptr->initializeAxes();
Michal Klocek
Domain not sharable again
r2285 axis->d_ptr->initializeDomain(domain);
Michal Klocek
Refactors internals...
r2273
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (AbstractDomain *blockedDomain, blockedDomains)
blockedDomain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 return true;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors internals...
r2273 /*
Michal Klocek
Adds domains swap logic
r2284 * This method detaches axis to series, return true if success.
Michal Klocek
Refactors internals...
r2273 */
bool ChartDataSet::detachAxis(QAbstractSeries* series,QAbstractAxis *axis)
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 {
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(series);
Q_ASSERT(axis);
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 QList<QAbstractSeries* > attachedSeriesList = axis->d_ptr->m_series;
QList<QAbstractAxis* > attachedAxisList = series->d_ptr->m_axes;
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = series->d_ptr->domain();
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (!m_seriesList.contains(series)) {
qWarning() << QObject::tr("Can not find series on the chart.");
return false;
}
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (axis && !m_axisList.contains(axis)) {
qWarning() << QObject::tr("Can not find axis on the chart.");
return false;
}
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725
Michal Klocek
Refactors internals...
r2273 if (!attachedAxisList.contains(axis)) {
qWarning() << QObject::tr("Axis not attached to series.");
return false;
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(axis->d_ptr->m_series.contains(series));
Michal Klocek
Adds domains swap logic
r2284 domain->detachAxis(axis);
Michal Klocek
Refactors internals...
r2273 series->d_ptr->m_axes.removeAll(axis);
axis->d_ptr->m_series.removeAll(series);
Michal Klocek
Refactored for MVP...
r139
Michal Klocek
Refactors internals...
r2273 return true;
Michal Klocek
Refactored for MVP...
r139 }
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::createDefaultAxes()
Michal Klocek
Refactored for MVP...
r139 {
Michal Klocek
Refactors internals...
r2273 if (m_seriesList.isEmpty())
return;
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 QAbstractAxis::AxisTypes typeX(0);
QAbstractAxis::AxisTypes typeY(0);
Michal Klocek
Fixes tst_qchartview
r1652
Michal Klocek
Refactors internals...
r2273 // Remove possibly existing axes
Michal Klocek
Adds domains swap logic
r2284 deleteAllAxes();
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_axisList.isEmpty());
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 // Select the required axis x and axis y types based on the types of the current series
foreach(QAbstractSeries* s, m_seriesList) {
typeX |= s->d_ptr->defaultAxisType(Qt::Horizontal);
typeY |= s->d_ptr->defaultAxisType(Qt::Vertical);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 // Create the axes of the types selected
Titta Heikkala
Fix default axes creation...
r2614 // As long as AxisType enum balues are sequential a check to see if there are series of
// different types is needed. In such cases AxisTypeNoAxis is used to create separate axes
// for the types.
if (typeX != QAbstractAxis::AxisTypeNoAxis) {
if (typeX != m_seriesList.first()->d_ptr->defaultAxisType(Qt::Horizontal))
typeX = QAbstractAxis::AxisTypeNoAxis;
createAxes(typeX, Qt::Horizontal);
}
if (typeY != QAbstractAxis::AxisTypeNoAxis) {
if (typeY != m_seriesList.first()->d_ptr->defaultAxisType(Qt::Vertical))
typeY = QAbstractAxis::AxisTypeNoAxis;
createAxes(typeY, Qt::Vertical);
}
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors axis handling...
r223
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation orientation)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Refactors internals...
r2273 QAbstractAxis *axis = 0;
//decide what axis should be created
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 switch (type) {
case QAbstractAxis::AxisTypeValue:
axis = new QValueAxis(this);
break;
case QAbstractAxis::AxisTypeBarCategory:
axis = new QBarCategoryAxis(this);
break;
case QAbstractAxis::AxisTypeCategory:
axis = new QCategoryAxis(this);
break;
#ifndef Q_WS_QWS
case QAbstractAxis::AxisTypeDateTime:
axis = new QDateTimeAxis(this);
break;
#endif
default:
axis = 0;
break;
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 if (axis) {
//create one axis for all
Michal Klocek
Fix all tst_chartdataset test cases
r1593
Michal Klocek
Refactors internals...
r2273 addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft);
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 qreal min = 0;
qreal max = 0;
findMinMaxForSeries(m_seriesList,orientation,min,max);
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
attachAxis(s,axis);
Michal Klocek
Fixes nicenumbers missing update issue
r1738 }
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 axis->setRange(min,max);
Michal Klocek
Fix indexing issue of series
r910 }
Titta Heikkala
Fix default axes creation...
r2614 else if (type.testFlag(QAbstractAxis::AxisTypeNoAxis)) {
Michal Klocek
Refactors internals...
r2273 //create separate axis
foreach(QAbstractSeries *s, m_seriesList) {
QAbstractAxis *axis = s->d_ptr->createDefaultAxis(orientation);
if(axis) {
addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft);
attachAxis(s,axis);
}
}
Tero Ahola
Fixed bug with changing theme when several series exist
r538 }
}
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 void ChartDataSet::findMinMaxForSeries(QList<QAbstractSeries *> series,Qt::Orientations orientation, qreal &min, qreal &max)
{
Q_ASSERT(!series.isEmpty());
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *domain = series.first()->d_ptr->domain();
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 min = (orientation == Qt::Vertical) ? domain->minY() : domain->minX();
max = (orientation == Qt::Vertical) ? domain->maxY() : domain->maxX();
Miikka Heikkinen
Add Polar chart support...
r2483 for (int i = 1; i< series.size(); i++) {
AbstractDomain *domain = series[i]->d_ptr->domain();
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 min = qMin((orientation == Qt::Vertical) ? domain->minY() : domain->minX(), min);
max = qMax((orientation == Qt::Vertical) ? domain->maxY() : domain->maxX(), max);
}
Mika Salmela
Check if min and max are same on findMinMaxForSeries
r2414 if (min == max) {
min -= 0.5;
max += 0.5;
}
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408 }
Michal Klocek
Adds domains swap logic
r2284 void ChartDataSet::deleteAllSeries()
sauimone
added map for yaxises methods to set axis
r1554 {
Michal Klocek
Adds domains swap logic
r2284 foreach (QAbstractSeries *s , m_seriesList){
Michal Klocek
Refactors internals...
r2273 removeSeries(s);
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 s->deleteLater();
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_seriesList.count() == 0);
sauimone
added map for yaxises methods to set axis
r1554 }
Michal Klocek
Adds domains swap logic
r2284 void ChartDataSet::deleteAllAxes()
Michal Klocek
Refactors axis handling...
r223 {
Michal Klocek
Adds domains swap logic
r2284 foreach (QAbstractAxis *a , m_axisList){
Michal Klocek
Refactors internals...
r2273 removeAxis(a);
Michal Klocek
fixes removal of series and axes (deleteLater)
r2299 a->deleteLater();
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors internals...
r2273 Q_ASSERT(m_axisList.count() == 0);
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::zoomInDomain(const QRectF &rect)
sauimone
added map for yaxises methods to set axis
r1554 {
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = s->d_ptr->domain();
Michal Klocek
Bugfix resize event during zoomin
r2289 s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Adds tst_qvaluesaxis stub implementation
r1699 }
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->zoomIn(rect);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 }
Michal Klocek
Update of chartdataset_tst
r1564
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::zoomOutDomain(const QRectF &rect)
{
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* domain = s->d_ptr->domain();
Michal Klocek
Bugfix resize event during zoomin
r2289 s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Update of chartdataset_tst
r1564 }
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->zoomOut(rect);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Refactors internals...
r2273 }
Tero Ahola
Refactored QML axis handling
r1813
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 void ChartDataSet::zoomResetDomain()
{
QList<AbstractDomain*> domains;
foreach (QAbstractSeries *s, m_seriesList) {
AbstractDomain *domain = s->d_ptr->domain();
s->d_ptr->m_domain->blockRangeSignals(true);
domains << domain;
}
foreach (AbstractDomain *domain, domains)
domain->zoomReset();
foreach (AbstractDomain *domain, domains)
domain->blockRangeSignals(false);
}
bool ChartDataSet::isZoomedDomain()
{
foreach (QAbstractSeries *s, m_seriesList) {
if (s->d_ptr->domain()->isZoomed())
return true;
}
return false;
}
Michal Klocek
Refactors internals...
r2273 void ChartDataSet::scrollDomain(qreal dx, qreal dy)
{
Marek Rosa
Domains added
r2275 QList<AbstractDomain*> domains;
Michal Klocek
Refactors internals...
r2273 foreach(QAbstractSeries *s, m_seriesList) {
Michal Klocek
Bugfix resize event during zoomin
r2289 AbstractDomain* domain = s->d_ptr->domain();
s->d_ptr->m_domain->blockRangeSignals(true);
Michal Klocek
Refactors internals...
r2273 domains<<domain;
Michal Klocek
Refactor QChart API...
r1577 }
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Refactors internals...
r2273 domain->move(dx, dy);
Michal Klocek
Update of chartdataset_tst
r1564
Marek Rosa
Domains added
r2275 foreach(AbstractDomain *domain, domains)
Michal Klocek
Bugfix resize event during zoomin
r2289 domain->blockRangeSignals(false);
Michal Klocek
Adds missing functions to qchart API
r1542 }
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 QPointF ChartDataSet::mapToValue(const QPointF &position, QAbstractSeries *series)
{
QPointF point;
if (series == 0 && !m_seriesList.isEmpty())
series = m_seriesList.first();
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 if (series && series->type() == QAbstractSeries::SeriesTypePie)
return point;
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 if (series && m_seriesList.contains(series))
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 point = series->d_ptr->m_domain->calculateDomainPoint(position - m_chart->plotArea().topLeft());
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 return point;
}
QPointF ChartDataSet::mapToPosition(const QPointF &value, QAbstractSeries *series)
{
QPointF point = m_chart->plotArea().topLeft();
if (series == 0 && !m_seriesList.isEmpty())
series = m_seriesList.first();
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 if (series && series->type() == QAbstractSeries::SeriesTypePie)
return QPoint(0, 0);
Marek Rosa
Negative values with log axis handled
r2356 bool ok;
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 if (series && m_seriesList.contains(series))
Marek Rosa
Negative values with log axis handled
r2356 point += series->d_ptr->m_domain->calculateGeometryPoint(value, ok);
Marek Rosa
Mapping functions added to QChart. Callout example updated
r2344 return point;
}
Miikka Heikkinen
Add Polar chart support...
r2483 QList<QAbstractAxis *> ChartDataSet::axes() const
Michal Klocek
Adds scroll support...
r531 {
Michal Klocek
Refactors internals...
r2273 return m_axisList;
Michal Klocek
Refactor axis hadnling...
r1078 }
Jani Honkonen
more coding style fixes for src-folder...
r2104 QList<QAbstractSeries *> ChartDataSet::series() const
Michal Klocek
Refactor axis hadnling...
r1078 {
Michal Klocek
Refactors internals...
r2273 return m_seriesList;
Michal Klocek
Adds scroll support...
r531 }
Michal Klocek
Refactors internals...
r2273
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain::DomainType ChartDataSet::selectDomain(QList<QAbstractAxis *> axes)
Michal Klocek
Adds domains swap logic
r2284 {
enum Type {
Michal Klocek
Fix domain switching
r2288 Undefined = 0,
Michal Klocek
Adds domains swap logic
r2284 LogType = 0x1,
ValueType = 0x2
};
Michal Klocek
Fix domain switching
r2288 int horizontal(Undefined);
int vertical(Undefined);
Michal Klocek
Adds domains swap logic
r2284
Miikka Heikkinen
Add Polar chart support...
r2483 // Assume cartesian chart type, unless chart is set
QChart::ChartType chartType(QChart::ChartTypeCartesian);
if (m_chart)
chartType = m_chart->chartType();
Michal Klocek
Fix domain switching
r2288
Miikka Heikkinen
Add Polar chart support...
r2483 foreach (QAbstractAxis *axis, axes)
{
switch (axis->type()) {
case QAbstractAxis::AxisTypeLogValue:
if (axis->orientation() == Qt::Horizontal)
horizontal |= LogType;
if (axis->orientation() == Qt::Vertical)
vertical |= LogType;
Michal Klocek
Adds domains swap logic
r2284 break;
Miikka Heikkinen
Add Polar chart support...
r2483 case QAbstractAxis::AxisTypeValue:
case QAbstractAxis::AxisTypeBarCategory:
case QAbstractAxis::AxisTypeCategory:
case QAbstractAxis::AxisTypeDateTime:
if (axis->orientation() == Qt::Horizontal)
horizontal |= ValueType;
if (axis->orientation() == Qt::Vertical)
vertical |= ValueType;
Michal Klocek
Adds domains swap logic
r2284 break;
Miikka Heikkinen
Add Polar chart support...
r2483 default:
qWarning() << "Undefined type";
Michal Klocek
Adds domains swap logic
r2284 break;
}
}
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == Undefined)
vertical = ValueType;
if (horizontal == Undefined)
horizontal = ValueType;
Michal Klocek
Fix domain switching
r2288
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == ValueType && horizontal == ValueType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::XYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::XYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == LogType && horizontal == ValueType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::XLogYDomain;
if (chartType == QChart::ChartTypePolar)
return AbstractDomain::XLogYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == ValueType && horizontal == LogType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::LogXYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::LogXYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
Miikka Heikkinen
Add Polar chart support...
r2483 if (vertical == LogType && horizontal == LogType) {
if (chartType == QChart::ChartTypeCartesian)
return AbstractDomain::LogXLogYDomain;
else if (chartType == QChart::ChartTypePolar)
return AbstractDomain::LogXLogYPolarDomain;
Michal Klocek
Adds domains swap logic
r2284 }
return AbstractDomain::UndefinedDomain;
}
//refactor create factory
AbstractDomain* ChartDataSet::createDomain(AbstractDomain::DomainType type)
{
Miikka Heikkinen
Add Polar chart support...
r2483 switch (type)
{
case AbstractDomain::LogXLogYDomain:
return new LogXLogYDomain();
case AbstractDomain::XYDomain:
return new XYDomain();
case AbstractDomain::XLogYDomain:
return new XLogYDomain();
case AbstractDomain::LogXYDomain:
return new LogXYDomain();
case AbstractDomain::XYPolarDomain:
return new XYPolarDomain();
case AbstractDomain::XLogYPolarDomain:
return new XLogYPolarDomain();
case AbstractDomain::LogXYPolarDomain:
return new LogXYPolarDomain();
case AbstractDomain::LogXLogYPolarDomain:
return new LogXLogYPolarDomain();
default:
return 0;
}
Michal Klocek
Adds domains swap logic
r2284 }
Michal Klocek
Refactors qchart , adds line animation...
r131 #include "moc_chartdataset_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE