##// END OF EJS Templates
Merge remote-tracking branch 'origin/5.7' into dev...
Merge remote-tracking branch 'origin/5.7' into dev Change-Id: I3f2ec8fb552bbed786cb0f7f5a0433d2d15f1931

File last commit:

r2863:15eed6371853
r2879:d27b6b26880d merge
Show More
chartdataset.cpp
657 lines | 19.6 KiB | text/x-c | CppLexer
Miikka Heikkinen
Updated license...
r2854 /****************************************************************************
Michal Klocek
Updates chartdataset unit test
r771 **
Miikka Heikkinen
Updated license...
r2854 ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
Michal Klocek
Updates chartdataset unit test
r771 **
Miikka Heikkinen
Updated license...
r2854 ** This file is part of the Qt Charts module of the Qt Toolkit.
Michal Klocek
Updates chartdataset unit test
r771 **
Miikka Heikkinen
Updated license...
r2854 ** $QT_BEGIN_LICENSE:GPL$
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
Miikka Heikkinen
Updated license...
r2854 ** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
Michal Klocek
Updates chartdataset unit test
r771 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
Miikka Heikkinen
Updated license...
r2854 ****************************************************************************/
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>
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 #include <private/glxyseriesdata_p.h>
Michal Klocek
Refactors qchart , adds line animation...
r131
Miikka Heikkinen
No longer automatically disable QDateTimeAxis on ARM platforms...
r2861 #ifndef QT_QREAL_IS_FLOAT
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),
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 m_chart(chart),
m_glXYSeriesDataManager(new GLXYSeriesDataManager(this))
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;
}
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 // Disable OpenGL for series in polar charts
series->setUseOpenGL(false);
Miikka Heikkinen
Add Polar chart support...
r2483 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;
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820
QXYSeries *xySeries = qobject_cast<QXYSeries *>(series);
if (xySeries)
m_glXYSeriesDataManager->removeSeries(xySeries);
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);
Andy Shaw
Add support for reversed axis when useOpenGL is true...
r2863 connect(axis, &QAbstractAxis::reverseChanged, this, &ChartDataSet::reverseChanged);
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);
Andy Shaw
Add support for reversed axis when useOpenGL is true...
r2863 disconnect(axis, &QAbstractAxis::reverseChanged, this, &ChartDataSet::reverseChanged);
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;
Miikka Heikkinen
No longer automatically disable QDateTimeAxis on ARM platforms...
r2861 #ifndef QT_QREAL_IS_FLOAT
Michal Klocek
Refactors internals...
r2273 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 }
Andy Shaw
Add support for reversed axis when useOpenGL is true...
r2863 void ChartDataSet::reverseChanged()
{
QAbstractAxis *axis = qobject_cast<QAbstractAxis *>(sender());
if (axis)
m_glXYSeriesDataManager->handleAxisReverseChanged(axis->d_ptr->m_series);
}
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