##// END OF EJS Templates
Fixed AreaSeries initialization for PolarChart...
Fixed AreaSeries initialization for PolarChart The correct domain has to be set for the upper and the lower series of the AreaSeries with polar chart. Updating the geometry of LineChartItem will have problems if the correct domain is not set. Change-Id: Id9664ae175d2ee272c4705fbdbf17d9a719cf428 Task-number: QTRD-3507 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2791:53fbaba3122c
r2791:53fbaba3122c
Show More
chartdataset.cpp
631 lines | 18.2 KiB | text/x-c | CppLexer
Michal Klocek
Updates chartdataset unit test
r771 /****************************************************************************
**
Titta Heikkala
Copyright header changes...
r2776 ** Copyright (C) 2015 The Qt Company Ltd
Michal Klocek
Updates chartdataset unit test
r771 ** All rights reserved.
Titta Heikkala
Copyright header changes...
r2776 ** For any questions to The Qt Company, please use contact form at http://qt.io
Michal Klocek
Updates chartdataset unit test
r771 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Michal Klocek
Updates chartdataset unit test
r771 **
Titta Heikkala
Updated license headers...
r2740 ** Licensees holding valid commercial license for Qt may use this file in
** accordance with the Qt License Agreement provided with the Software
** or, alternatively, in accordance with the terms contained in a written
Titta Heikkala
Copyright header changes...
r2776 ** agreement between you and The Qt Company.
Michal Klocek
Updates chartdataset unit test
r771 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Michal Klocek
Updates chartdataset unit test
r771 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <private/chartdataset_p.h>
#include <private/chartpresenter_p.h>
#include <QtCharts/QChart>
#include <private/qchart_p.h>
#include <QtCharts/QValueAxis>
#include <QtCharts/QBarCategoryAxis>
#include <private/qvalueaxis_p.h>
#include <QtCharts/QCategoryAxis>
#include <private/qabstractseries_p.h>
#include <QtCharts/QAbstractBarSeries>
#include <QtCharts/QStackedBarSeries>
#include <QtCharts/QPercentBarSeries>
#include <QtCharts/QPieSeries>
#include <private/chartitem_p.h>
#include <private/xydomain_p.h>
#include <private/xypolardomain_p.h>
#include <private/xlogydomain_p.h>
#include <private/logxydomain_p.h>
#include <private/logxlogydomain_p.h>
#include <private/xlogypolardomain_p.h>
#include <private/logxypolardomain_p.h>
#include <private/logxlogypolardomain_p.h>
Michal Klocek
Refactors qchart , adds line animation...
r131
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #ifndef QT_ON_ARM
Titta Heikkala
Fix include syntax...
r2714 #include <QtCharts/QDateTimeAxis>
Marek Rosa
Disabled QDateTimeAxis on ARM
r1867 #endif
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Michal Klocek
Refactors qchart , adds line animation...
r131
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());
Titta Heikkala
Fixed AreaSeries initialization for PolarChart...
r2791 // Set the correct domain for upper and lower series too
if (series->type() == QAbstractSeries::SeriesTypeArea) {
foreach (QObject *child, series->children()) {
if (qobject_cast<QAbstractSeries *>(child)) {
QAbstractSeries *childSeries = qobject_cast<QAbstractSeries *>(child);
childSeries->d_ptr->setDomain(new XYPolarDomain());
}
}
}
Miikka Heikkinen
Add Polar chart support...
r2483 } 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(axis);
Michal Klocek
Adds createDefaultAxes logic
r1588
Kimmo Leppälä
Fix crash in ChartDataSet::attachAxis()...
r2669 if (!series)
return false;
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
Miikka Heikkinen
Fix QAbstractAxis::AxisTypes enum values....
r2719 createAxes(typeX, Qt::Horizontal);
createAxes(typeY, Qt::Vertical);
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);
Miikka Heikkinen
Fix QAbstractAxis::AxisTypes enum values....
r2719 } else {
// Create separate axis for each series
Michal Klocek
Refactors internals...
r2273 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)
{
Titta Heikkala
Qt Charts project file structure change...
r2712 Q_ASSERT(!series.isEmpty());
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408
Miikka Heikkinen
Add Polar chart support...
r2483 AbstractDomain *domain = series.first()->d_ptr->domain();
Titta Heikkala
Qt Charts project file structure change...
r2712 min = (orientation == Qt::Vertical) ? domain->minY() : domain->minX();
max = (orientation == Qt::Vertical) ? domain->maxY() : domain->maxX();
Michal Klocek
adds Andy's customer request, first call to createDaultAxis scales whole domain (if on common axis)
r2408
Miikka Heikkinen
Add Polar chart support...
r2483 for (int i = 1; i< series.size(); i++) {
AbstractDomain *domain = series[i]->d_ptr->domain();
Titta Heikkala
Qt Charts project file structure change...
r2712 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"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE